2.1 TTL背景
所謂 TTL, 其實是 Tera Term Language 的縮寫, 也就是 Tera Term 的專用腳本語言. 那么 Tera Term(Wiki)是個什么東西呢? 其實就是個終端(Terminal), 也就是說跟什么 XSehll, SecureCRT, Putty 之類的東西差不多一個意思.
Tera Term 是日本人搞出來的東西. 其實僅僅就這個 Tera Term 來說我覺得一點并不好用, 完全比不上 Xshell. 不過關(guān)鍵就在于它有它自己的腳本語言 Tera Term Language 啊. 有了自己的腳本語言加持以后, 這個終端瞬間化身自動化利器, 可以提前設(shè)計好各種操作, 剩下的就讓終端自動運行好了.
Tera Term 這個東西本身我就不多介紹了, 只要到 Tera Term Open Source Project 下載安裝即可. 寫好的腳本雙擊以后是會自動調(diào)用這個工具的. 接下來的內(nèi)容將會介紹 TTL 的語法和使用.
TTL腳本是為tera term這個軟件服務(wù)的。tera term加載TTL腳本后,會自動運行腳本,然后執(zhí)行腳本里的命令。
2.2 為什么要學(xué)習(xí)TTL腳本
對于嵌入式開發(fā)人員來說,串口工具想必大家再熟悉不過。通常使用串口工具給開發(fā)板下發(fā)命令、接收log,亦或是連接遠(yuǎn)程終端,而這都需要我們手動控制。試想,下發(fā)一條命令可以手動,那下發(fā)1000條命令呢?
在嵌入式開發(fā)中,有這么一款廣泛使用的串口工具——Tera Term,其內(nèi)置TTL腳本語言,該語言語法豐富但又簡單易學(xué)。通過TTL腳本,即可實現(xiàn)串口工具自動化測試。當(dāng)然,其功能遠(yuǎn)不止于此,但凡會用到串口工具的地方,都可以通過TTL腳本來滿足自己自動化需求。例如自動連接遠(yuǎn)程終端、自動執(zhí)行遠(yuǎn)程終端腳本、分析串口工具中顯示的log、統(tǒng)計測試項是否成功等等。
2小時學(xué)會一個串口自動化腳本語言,半天即可熟練掌握,讓你更快速更高效地完成嵌入式項目開發(fā)。最少的時間掌握一個終生受益的技能,這會讓你變得比大多數(shù)嵌入式工程師更厲害。
Part3數(shù)據(jù)類型
TTL語言(TeraTerm Language)總共只有四種數(shù)據(jù)類型,分別為Integer、Character string、Integer Array、String Array。
Part4注釋
; 分號后面是注釋
; 分號開始的行是注釋行
var = 0 ; 這里分號右邊開始也算注釋
Part5 字面量
- 支持正數(shù)負(fù)數(shù), 不支持浮點數(shù)
123
-11 - $開始的數(shù)字是16進(jìn)制
$3a
$10F - 字符串’Hello, world’“I can’t do that”“漢字也支持”
- #開頭的是ASCII碼值字符, 也就是#后的數(shù)字查ASCII碼表對應(yīng)的是哪個字符就是哪個字符
#65 ; 文字 “A”
#$41 ; 文字 “A”
#13 ; CR 文字 - 字符串可以直接拼接
‘cat readme.txt’#13#10 ; 相當(dāng)于 “cat readme.txtrn”
‘a(chǎn)bc’#$0d#$0a’def’#$0d#$0a’ghi’
Part6 變量
變量包括用戶自定義變量和系統(tǒng)變量兩部分. 下面將分別介紹一下。
6.1 自定義變量
定義變量無需指定類型, 直接使用 變量名 = 值 的語法即可.
注意:賦值時候=右邊的“10”或’10’表示字符串,10才表示數(shù)字,例如cycle =“10”和cycle = 10是不一樣的,一個是字符串,一個是數(shù)字。
- 定義普通變量
_var = ‘valid’ ; 下劃線開始的變量名合法。
var = “valid” ; 使用雙引號也可以
var_1 = 1 ; 這是一個數(shù)字
var_2 = ‘str’ ; 這是一個字符串 - 定義數(shù)組及賦值
intdim a 3 ; int數(shù)組
a[0] = 1
a[1] = 2
a[2] = 3
strdim s 3 ; str數(shù)組
s[0] = ‘1’
s[1] = ‘2’
s[2] = ‘3’
6.2 系統(tǒng)變量
TTL 預(yù)置使用了一些系統(tǒng)變量, 寫腳本的時候注意不要占用。 閱讀腳本的時候要注意這些是系統(tǒng)變量, 是作為系統(tǒng)函數(shù)返回值而存在的。
常見:
inputstr ; waitln等函數(shù)的接收到的值存放于此
matchstr ; strmatch等函數(shù)的值存放于此
param1 ; 調(diào)用腳本時候傳入的第一個參數(shù)
params ; 調(diào)用腳本時候傳入的所有參數(shù)的數(shù)組
result ; waitln等函數(shù)執(zhí)行的結(jié)果code存放于此
timeout ; 超時時間
…
具體請查看 Tera Term 的幫助文件:https://ttssh2.osdn.jp/manual/4/en/macro/syntax/variables.html
如何查看系統(tǒng)變量?
TTl腳本中貌似沒有printf之類的函數(shù),可以直接輸出某個變量的值到底是多少。那如果寫代碼過程中想要看看其中某個變量的值是多少該怎么辦呢?
其實可以轉(zhuǎn)變思路,將想要打印的變量直接寫入文件中就可以了。
Part7流程控制
TTL 也支持基本的流程控制操作;
7.1 do, loop
; 循環(huán)10次
i = 10
dowhile i > 0
i = i - 1
loop
7.2 while, endwhile
; 循環(huán)10次
i = 10
while i > 0
i = i - 1
endwhile
7.3 until, enduntil
; 循環(huán)10次
i = 1
until i > 10
i = i + 1
enduntil
7.4 for, next
; 循環(huán)10次
for i 110
sendln 'abc'
next
; 循環(huán)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 可以定義一些子過程, 方便重復(fù)調(diào)用. 但是沒有返回值, 不能稱之為函數(shù)。
定義子過程首先要了解 label 標(biāo)簽
; 冒號開始的是標(biāo)簽
: I_am_a_label ; 這就是一個標(biāo)簽
可以這樣定義和調(diào)用子過程:
messagebox "I'm in main.""test"
; 跳轉(zhuǎn)到":sub"
call sub
messagebox "Now I'm in main""test"
end
; 子過程具體定義
:sub
messagebox "Now I'm in sub""test"
return ; 返回到主體
子過程以return返回。標(biāo)簽后面沒有return,說明不是子過程,只是標(biāo)簽。標(biāo)簽也建議用end結(jié)束。
Part9常見用法
下面介紹一些 TTL 腳本中的常見寫法。
9.1 連接服務(wù)器
使用 connect 命令, 而且有不少其他命令必須在連接服務(wù)器后才能使用:
connect ‘hostname:22 /ssh /2 /auth=password /user=username /passwd=password’
9.2 執(zhí)行給定命令
sendln date
; 向遠(yuǎn)端服務(wù)器上發(fā)送 date
命令以及 CR, 即執(zhí)行該命令
9.3 等待特定字符
wait ‘**’ ‘#’ ; 等待遠(yuǎn)端服務(wù)器屏幕上出現(xiàn) ** 或者 #. 未出現(xiàn)則一直等待. 該等待超時時間由系統(tǒng)變量 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 保存服務(wù)器操作日志
getdir logdir ; 獲取當(dāng)前腳本所在路徑
changedir logdir ; 調(diào)整日志文件夾路徑到當(dāng)前路徑
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里面的內(nèi)容包含到本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
如果文件不存在,則創(chuàng)建該文件并打開。
11.2 changedir
注意和setdir的區(qū)別,兩個命令都是改變路徑,那么到底有什么區(qū)別呢?
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的路徑區(qū)別,也不要擔(dān)心,在有的命令中,會用到路徑的時候,會講明是哪個路徑,如下:
11.3 filereadln
格式:filereadln
注意環(huán)境變量result的值:
如果當(dāng)讀取一行的時候發(fā)現(xiàn)指針已經(jīng)到達(dá)文件末尾,result被設(shè)置為1。而不是讀取了一行后發(fā)現(xiàn)在指針到達(dá)文件末尾,就返回1,切記??!
如果文件中僅僅包含一個新行,那么strvar的值是空的,result被置為0.
11.4 Strtrim
格式:strtrim
功能:刪除strval字符串中開頭和結(jié)尾出現(xiàn)的trimchars字符串
注意:
- 如果在strval字符串中間出現(xiàn)的trimchars,不會被移除,只會移除中間或者結(jié)尾出現(xiàn)的所有trimchars字符串。
- 如果strval字符串開頭或者結(jié)尾出現(xiàn)了trimchars字符串中一部分的字符,也會被移除。
- 如果strval字符串開頭或者結(jié)尾連續(xù)出現(xiàn)了幾個rimchars字符串,則都會被移除。
例子:
src = “YEE_ONLY YEE_ONLY verify YEE_ONLY test YEE_ONL YEE_ONLY”
strtrim src 'YEE_ONLY ’
messagebox src ‘result’顯示結(jié)果為: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軟件連接虛擬機,顯示中文有亂碼:如下設(shè)置即可:
-
自動化測試
+關(guān)注
關(guān)注
0文章
201瀏覽量
26884 -
TTL
+關(guān)注
關(guān)注
7文章
497瀏覽量
70061 -
終端
+關(guān)注
關(guān)注
1文章
1106瀏覽量
29799 -
腳本
+關(guān)注
關(guān)注
1文章
387瀏覽量
14811 -
串口工具
+關(guān)注
關(guān)注
1文章
9瀏覽量
7851
發(fā)布評論請先 登錄
相關(guān)推薦
評論