0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为什么要学习TTL脚本

科技绿洲 来源:黑猫学长 作者:黑猫学长 2023-11-24 16:00 次阅读

2.1 TTL背景

所谓 TTL, 其实是 Tera Term Language 的缩写, 也就是 Tera Term 的专用脚本语言. 那么 Tera Term(Wiki)是个什么东西呢? 其实就是个终端(Terminal), 也就是说跟什么 XSehll, SecureCRT, Putty 之类的东西差不多一个意思.

Tera Term 是日本人搞出来的东西. 其实仅仅就这个 Tera Term 来说我觉得一点并不好用, 完全比不上 Xshell. 不过关键就在于它有它自己的脚本语言 Tera Term Language 啊. 有了自己的脚本语言加持以后, 这个终端瞬间化身自动化利器, 可以提前设计好各种操作, 剩下的就让终端自动运行好了.

Tera Term 这个东西本身我就不多介绍了, 只要到 Tera Term Open Source Project 下载安装即可. 写好的脚本双击以后是会自动调用这个工具的. 接下来的内容将会介绍 TTL 的语法和使用.

TTL脚本是为tera term这个软件服务的。tera term加载TTL脚本后,会自动运行脚本,然后执行脚本里的命令。

2.2 为什么要学习TTL脚本

对于嵌入式开发人员来说,串口工具想必大家再熟悉不过。通常使用串口工具给开发板下发命令、接收log,亦或是连接远程终端,而这都需要我们手动控制。试想,下发一条命令可以手动,那下发1000条命令呢?

嵌入式开发中,有这么一款广泛使用的串口工具——Tera Term,其内置TTL脚本语言,该语言语法丰富但又简单易学。通过TTL脚本,即可实现串口工具自动化测试。当然,其功能远不止于此,但凡会用到串口工具的地方,都可以通过TTL脚本来满足自己自动化需求。例如自动连接远程终端、自动执行远程终端脚本、分析串口工具中显示的log、统计测试项是否成功等等。

2小时学会一个串口自动化脚本语言,半天即可熟练掌握,让你更快速更高效地完成嵌入式项目开发。最少的时间掌握一个终生受益的技能,这会让你变得比大多数嵌入式工程师更厉害。

Part3数据类型

TTL语言(TeraTerm Language)总共只有四种数据类型,分别为Integer、Character string、Integer Array、String Array。

Part4注释

; 分号后面是注释

; 分号开始的行是注释行

var = 0 ; 这里分号右边开始也算注释

Part5 字面量

  • 支持正数负数, 不支持浮点数
    123
    -11
  • $开始的数字是16进制
    $3a
    $10F
  • 字符串’Hello, world’“I can’t do that”“汉字也支持”
  • #开头的是ASCII码值字符, 也就是#后的数字查ASCII码表对应的是哪个字符就是哪个字符
    #65 ; 文字 “A”
    #$41 ; 文字 “A”
    #13 ; CR 文字
  • 字符串可以直接拼接
    ‘cat readme.txt’#13#10 ; 相当于 “cat readme.txtrn”
    ‘abc’#$0d#$0a’def’#$0d#$0a’ghi’

Part6 变量

变量包括用户自定义变量和系统变量两部分. 下面将分别介绍一下。

6.1 自定义变量

定义变量无需指定类型, 直接使用 变量名 = 值 的语法即可.

注意:赋值时候=右边的“10”或’10’表示字符串,10才表示数字,例如cycle =“10”和cycle = 10是不一样的,一个是字符串,一个是数字。

  • 定义普通变量
    _var = ‘valid’ ; 下划线开始的变量名合法。
    var = “valid” ; 使用双引号也可以
    var_1 = 1 ; 这是一个数字
    var_2 = ‘str’ ; 这是一个字符串
  • 定义数组及赋值
    intdim a 3 ; int数组
    a[0] = 1
    a[1] = 2
    a[2] = 3
    strdim s 3 ; str数组
    s[0] = ‘1’
    s[1] = ‘2’
    s[2] = ‘3’

6.2 系统变量

TTL 预置使用了一些系统变量, 写脚本的时候注意不要占用。 阅读脚本的时候要注意这些是系统变量, 是作为系统函数返回值而存在的。

常见:
inputstr ; waitln等函数的接收到的值存放于此
matchstr ; strmatch等函数的值存放于此
param1 ; 调用脚本时候传入的第一个参数
params ; 调用脚本时候传入的所有参数的数组
result ; waitln等函数执行的结果code存放于此
timeout ; 超时时间

具体请查看 Tera Term 的帮助文件:https://ttssh2.osdn.jp/manual/4/en/macro/syntax/variables.html

如何查看系统变量?

TTl脚本中貌似没有printf之类的函数,可以直接输出某个变量的值到底是多少。那如果写代码过程中想要看看其中某个变量的值是多少该怎么办呢?

其实可以转变思路,将想要打印的变量直接写入文件中就可以了。图片

Part7流程控制

TTL 也支持基本的流程控制操作;

7.1 do, loop

; 循环10次
i = 10
dowhile i > 0
  i = i - 1
loop

7.2 while, endwhile

; 循环10次
i = 10
while i > 0
  i = i - 1
endwhile

7.3 until, enduntil

; 循环10次
i = 1
until i > 10
  i = i + 1
enduntil

7.4 for, next

; 循环10for i 110
  sendln 'abc'
next

; 循环5for i 51
  sendln 'abc'
next

7.5 if, then, elseif, else, endif

if a = 1 then
  b = 1
  c = 2
  d = 3
endif

if i < 0 then
  i = 0
else
  i = i + 1
endif

if i = 1 then
  c = '1'
elseif i = 2 then
  c = '2'
elseif i = 3 then
  c = '3'
else
  c = '?'
endif

7.6 break, continue

  • break
while1
  recvln
  strcompare inputstr "OK"
  if result = 0 then
    break
  else
    sendln "abc..."
  endif
endwhile
  • continue

a = 0
b = 0
while a < 5
  a = a + 1
  if a > 2 then
    continue
  endif
  b = b + 1
endwhile

sprintf2 var "a=%d b=%d" a b
dispstr var; a=5 b=2

Part8子过程

TTL 可以定义一些子过程, 方便重复调用. 但是没有返回值, 不能称之为函数。

定义子过程首先要了解 label 标签

; 冒号开始的是标签
: I_am_a_label  	; 这就是一个标签

可以这样定义和调用子过程:

messagebox "I'm in main.""test"
; 跳转到":sub"
call sub
  messagebox "Now I'm in main""test"
end

; 子过程具体定义
:sub
  messagebox "Now I'm in sub""test"
  return  ; 返回到主体

子过程以return返回。标签后面没有return,说明不是子过程,只是标签。标签也建议用end结束。

Part9常见用法

下面介绍一些 TTL 脚本中的常见写法。

9.1 连接服务器

使用 connect 命令, 而且有不少其他命令必须在连接服务器后才能使用:
connect ‘hostname:22 /ssh /2 /auth=password /user=username /passwd=password’

9.2 执行给定命令

sendln date ; 向远端服务器上发送 date 命令以及 CR, 即执行该命令

9.3 等待特定字符

wait ‘**’ ‘#’ ; 等待远端服务器屏幕上出现 ** 或者 #. 未出现则一直等待. 该等待超时时间由系统变量 timeout 控制, 若为 0 则无超时时间, 即无限期等待

9.4 拼接字符串

使用 sprintf2 直接定义变量. 其中 %s 是占位符, 被字符串后面跟的变量替换.
hostname = ‘your_hostname’
username = ‘your_username’
password = ‘your_password’
sprintf2 server ‘%s:22 /ssh /2 /auth=password /user=%s /passwd=%s’ hostname username password

直接声明变量并在后面添加字符串.
hostname = ‘your_hostname’
msg = hostname
strconcat msg ‘:22 /ssh /2 /auth=password /user=’
strconcat msg username
strconcat msg ’ /passwd=’
strconcat msg password

9.5 保存服务器操作日志

getdir logdir ; 获取当前脚本所在路径
changedir logdir ; 调整日志文件夹路径到当前路径
logfile = “operation.log” ; 日志文件名
logopen logfile 0 0 1 ; 打开日志文件用于写入
logwrite “first line in log file”#13#10 ; 向日志文件中写入"first line in log filern", 其中 #13#10 的意思就是 CRLF

Part10include包含其他文件

include ‘1.ttl’
即:将1.ttl里面的内容包含到本TTL脚本中。

Part11常用命令

参考链接:

  • tera term的ttl脚本使用方法:https://blog.csdn.net/f2157120/article/details/99822653
  • 官方TTL命令参考:https://ttssh2.osdn.jp/manual/4/en/macro/command/index.html

常用命令直接参考官方命令介绍即可,非常清晰明了,此处就不一一列出。只列出部分易错/重要的命令。

11.1 fileopen

如果文件不存在,则创建该文件并打开。

11.2 changedir

注意和setdir的区别,两个命令都是改变路径,那么到底有什么区别呢?

chagedir改变的是Tera Term的路径。setdir改变的是MACRO的路径。

那这时候又有问题了,什么是Tera Term的路径,什么是MACRO路径?

File names specified for the communication commands (e.g. kmtsend) are based on the current directory for Tera Term.

File names specified for other commands (e.g. fileopen) are based on the current directory for MACRO.

可能看到这里还是不太清楚Tera Term的路径和MACRO的路径区别,也不要担心,在有的命令中,会用到路径的时候,会讲明是哪个路径,如下:

图片

11.3 filereadln

格式:filereadln

注意环境变量result的值:

如果当读取一行的时候发现指针已经到达文件末尾,result被设置为1。而不是读取了一行后发现在指针到达文件末尾,就返回1,切记!!

如果文件中仅仅包含一个新行,那么strvar的值是空的,result被置为0.

11.4 Strtrim

格式:strtrim

功能:删除strval字符串中开头和结尾出现的trimchars字符串

注意:

  1. 如果在strval字符串中间出现的trimchars,不会被移除,只会移除中间或者结尾出现的所有trimchars字符串。
  2. 如果strval字符串开头或者结尾出现了trimchars字符串中一部分的字符,也会被移除。
  3. 如果strval字符串开头或者结尾连续出现了几个rimchars字符串,则都会被移除。

例子:

src = “YEE_ONLY YEE_ONLY verify YEE_ONLY test YEE_ONL YEE_ONLY”
strtrim src 'YEE_ONLY ’
messagebox src ‘result’

显示结果为:verify YEE_ONLY test

11.5 gettime

例子:

gettime starttime “%Y%m%d-%H%M%S”
%Y%m%d-%H%M%S到底是什么时间格式呢?

参考链接即可知道:https://baike.baidu.com/item/strftime/9569073?fr=aladdin

Part12如何运行ttl脚本

有两种方式运行ttl脚本:

  • ttermpro软件加载TTL脚本图片

通过 Mcro 选择自己需要加载的ttl脚本即可。

  • TTPMACRO.EXE软件加载ttl脚本

在安装tera term软件时候,安装路径不仅有ttermpro.exe软件,还有ttpmacro.exe软件,打开ttpmacro.exe软件加载ttl脚本即可。图片

Part13ttermpro软件使用方法

13.1 中文显示乱码

如图所示,ttermpro软件连接虚拟机,显示中文有乱码:图片如下设置即可:

图片图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 自动化测试
    +关注

    关注

    0

    文章

    171

    浏览量

    26777
  • TTL
    TTL
    +关注

    关注

    6

    文章

    469

    浏览量

    69371
  • 终端
    +关注

    关注

    1

    文章

    998

    浏览量

    29597
  • 脚本
    +关注

    关注

    1

    文章

    372

    浏览量

    14635
  • 串口工具
    +关注

    关注

    1

    文章

    9

    浏览量

    7766
收藏 人收藏

    评论

    相关推荐

    【RT-Thread学习笔记】结合案例学习调试shell脚本

    【shell编程扫盲系列】结合真实案例学习如何调试shell脚本
    的头像 发表于 07-29 03:32 1819次阅读
    【RT-Thread<b class='flag-5'>学习</b>笔记】结合案例<b class='flag-5'>学习</b>调试shell<b class='flag-5'>脚本</b>

    嵌入式Linux入门(五、Shell脚本编程上:认识Shell脚本

    大家好,是矜辰所致,嵌入式 Linux入 门第五课,本课开始简单学习一下 Shell 脚本编程。
    的头像 发表于 07-13 16:10 1009次阅读
    嵌入式Linux入门(五、Shell<b class='flag-5'>脚本</b>编程上:认识Shell<b class='flag-5'>脚本</b>)

    通过Python脚本实现WIFI密码的自动猜解

    本文将记录学习下如何通过 Python 脚本实现 WIFI 密码的自动猜解。
    的头像 发表于 01-25 10:46 716次阅读
    通过Python<b class='flag-5'>脚本</b>实现WIFI密码的自动猜解

    shell脚本编程想学习的可以看看

    一本关于shell脚本编程的书籍,想学习的可以看看
    发表于 10-15 11:06

    Linux系统学习之路---脚本体会

    。方便别的使用与维护。就拿脚本的开头几行来说。做好功能,版本的信息,作者还有沟通的方式, 最重要的是,一些比较特殊的环境变量。 要说明。每个人的电脑环境都不一样。 这一点十分重。做好合理的注释说明信息
    发表于 01-28 20:51

    Perl 脚本语言学习是什么

    Perl 脚本语言学习是什么
    发表于 03-12 06:13

    什么是脚本

    什么是脚本脚本是什么意思,脚本错误是什么意思电子发烧友深入为大家讲解了脚本相关知识
    发表于 12-07 10:36 2613次阅读

    scripts【各类编程脚本

    scripts【各类编程脚本】,好东西,喜欢的朋友可以下载来学习
    发表于 02-18 16:29 0次下载

    TTL与COMS的区别

    电子专业单片机相关知识学习教材资料——TTL与COMS
    发表于 08-22 16:18 0次下载

    Linux Bash脚本进阶教程学习

    你可以在脚本头部使用set -o verbose和set -o xtrace来永久指定-v和-o。当在远程机器上执行脚本时,这样做非常有用,用它来输出远程信息。
    的头像 发表于 05-01 17:45 3502次阅读
    Linux Bash<b class='flag-5'>脚本</b>进阶教程<b class='flag-5'>学习</b>

    嵌入式和物联网的shell脚本学习指南之shell脚本入门免费下载

    本文档的主要内容详细技术的是嵌入式和物联网的shell脚本学习指南之shell脚本入门免费下载。
    发表于 09-11 17:15 20次下载
    嵌入式和物联网的shell<b class='flag-5'>脚本</b><b class='flag-5'>学习</b>指南之shell<b class='flag-5'>脚本</b>入门免费下载

    什么是脚本脚本程序学习

    脚本中编写VB脚本代码。可以象使用系统函数一样使用项目中完成的脚本。创建脚本时,确定其型号并定义传送参数。“Function”类型的脚本
    的头像 发表于 05-11 10:39 6083次阅读
    什么是<b class='flag-5'>脚本</b>?<b class='flag-5'>脚本</b>程序<b class='flag-5'>学习</b>

    什么是脚本?---脚本程序学习

    脚本中编写VB脚本代码。可以象使用系统函数一样使用项目中完成的脚本。创建脚本时,确定其型号并定义传送参数。“Function”类型的脚本
    的头像 发表于 06-12 15:39 3743次阅读
    什么是<b class='flag-5'>脚本</b>?---<b class='flag-5'>脚本</b>程序<b class='flag-5'>学习</b>

    不一样的WINCC---脚本程序学习

    脚本中编写VB脚本代码。可以象使用系统函数一样使用项目中完成的脚本。创建脚本时,确定其型号并定义传送参数。“Function”类型的脚本
    的头像 发表于 06-30 17:17 2500次阅读
    不一样的WINCC---<b class='flag-5'>脚本</b>程序<b class='flag-5'>学习</b>

    TTL电平学习笔记

    要实现输出电平在0/1之间变换,需要三极管的数量最少只需要一个,而TTL电路使用了4个三极管,用较多的器件去实现相同的功能,必定要有性能上的提升,否则这种电路设计就是一种浪费。对于TTL电路而言,使用成倍的器件需要换来的性能包括以下几点:
    的头像 发表于 09-21 17:03 484次阅读
    <b class='flag-5'>TTL</b>电平<b class='flag-5'>学习</b>笔记