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
; 循環10次
for i 110
sendln 'abc'
next
; 循環5次
for 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字符串
注意:
- 如果在strval字符串中間出現的trimchars,不會被移除,只會移除中間或者結尾出現的所有trimchars字符串。
- 如果strval字符串開頭或者結尾出現了trimchars字符串中一部分的字符,也會被移除。
- 如果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文章
194瀏覽量
26851 -
TTL
+關注
關注
6文章
493瀏覽量
69871 -
終端
+關注
關注
1文章
1079瀏覽量
29724 -
腳本
+關注
關注
1文章
382瀏覽量
14760 -
串口工具
+關注
關注
1文章
9瀏覽量
7817
發布評論請先 登錄
相關推薦
評論