1. 程式人生 > >使用procomm plus執行串列埠指令碼

使用procomm plus執行串列埠指令碼

使用procomm plus執行串列埠指令碼

1 串列埠指令碼

有些串列埠工具(例如串列埠除錯助手)有定時傳送功能,但只能傳送一條固定的命令。我需要傳送幾百條命令,又懶得寫程式,就希望找一個可以執行串列埠指令碼的工具。然後我找到了procomm plus

procomm plus的功能很多。我只需要串列埠指令碼功能,所以沒有執行安裝程式,解壓後直接執行Programs目錄的PW5.EXE。在選單中選擇Options->System Options->Modem Connection...,在“Current Modem/Connection”的下拉列表中選擇要開啟的串列埠或modem。在主視窗下方可以直接點選、設定編碼格式、波特率。編碼格式可以選擇RAW ASCII。在主視窗可以直接敲AT命令,看到響應,和超機終端差不多。

在選單中選擇Tools->Scripts,就可以看到指令碼相關的選單,包括執行、編譯、編輯、錄製指令碼。procomm plus的腳本系統叫做ASPECT,功能看上去很強大,可以定義變數,有for、while 等流程控制,甚至包括接受使用者輸入的對話方塊。procomm plus中有完善的教程和幫助文件。

我當然不會先看文件。首先做的就是錄製一個指令碼,看看大概是什麼樣子,然後照貓畫虎編寫自己的指令碼。指令碼的原始檔是字尾為WAS的檔案。原始檔經過編譯才能執行,編譯產生的檔案字尾是wax。

如果讀者也是隻想用串列埠指令碼功能,建議不要安裝procomm plus,直接執行就可以了。安裝後,每次啟動會檢測所有modem,浪費時間。

2 指令碼示例

2.1 傳送大量命令

我要做的一個事情就是給一個modem打補丁,要傳送兩百多條命令。例如:

AT:PIB
AT:Pf800,7b5d,4dc,7b5f,4de,7b59,4d8,7b5b,4da
AT:Pf808,7b55,4d4,7b57,4d6,7b51,4d0,7b53,4d2
...

modem對這些命令的響應都是"\r\nOK\r\n"。通過錄制的指令碼,可以看到傳送命令並等待響應的過程可以用以下語句完成:

   transmit "AT:PIB^M"
   waitfor "K^M^J"

顯然transmit就是向串列埠寫。waitfor就是等待響應了。^M是回車符0D(就是\r)、^J是換行符0A(就是\n)。 waitfor語句在等待正常響應的最後3個字元。看懂這兩句後,編寫指令碼的過程就是對要傳送命令的簡單替換。 我常用的文字編輯器是我自己寫的

cnbook。在cnbook中將行首

^

替換成

   transmit "

將行尾

$

替換成

^M"\n   waitfor "K^M^J"

替換時要選上“正則表示式”。將替換後的文字放到

proc main
endproc

之間就可以了。完整的指令碼看上去是這樣:

proc main
   transmit "AT:PIB^M"
   waitfor "K^M^J"
   transmit "AT:Pf800,7b5d,4dc,7b5f,4de,7b59,4d8,7b5b,4da^M"
   waitfor "K^M^J"
   transmit "AT:Pf808,7b55,4d4,7b57,4d6,7b51,4d0,7b53,4d2^M"
   waitfor "K^M^J"
...
endproc

以後我需要打補丁,就是執行這兩百多條命令的時候,只要執行這個指令碼就可以了。

2.2 自動測試

我需要通過串列埠敲鍵測試一臺裝置。我錄製了一次測試過程,然後用for迴圈自動測試100次。指令碼看上去是這樣:

proc main
   integer Num                ; Integer variable to increment.

   for Num = 0 upto 100       ; Init variable and define loop.
	   transmit "o"
	   waitfor "wait ..."
	   transmit "1"
	   waitfor "wait ..."
	   transmit "0"
	   waitfor "wait ..."
	   transmit "0"
	   waitfor "wait ..."
	   transmit "0"
	   waitfor "xt_connected_enter^M^J"
	   transmit "p"
	   waitfor "xt_idle_enter^M^J"
...
   endfor
endproc

當然,在很多情況下,人工測試比自動測試更容易發現問題。不過,用串列埠指令碼作自動測試也可以作為一種輔助的手段。

3 結束語

procomm plus的功能還有很多,它的腳本系統ASPECT的功能也遠遠不止於此。不過目前我只用到這些。