有些串口工具(例如串口调试助手)有定时发送功能,但只能发送一条固定的命令。我需要发送几百条命令,又懒得写程序,就希望找一个可以执行串口脚本的工具。然后我找到了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,浪费时间。
我要做的一个事情就是给一个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个字符。看懂这两句后,编写脚本的过程就是对要发送命令的简单替换。 文本编辑器中将行首
^
替换成
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
以后我需要打补丁,就是执行这两百多条命令的时候,只要执行这个脚本就可以了。
我需要通过串口敲键测试一台设备。我录制了一次测试过程,然后用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
当然,在很多情况下,人工测试比自动测试更容易发现问题。不过,用串口脚本作自动测试也可以作为一种辅助的手段。
procomm plus的功能还有很多,它的脚本系统ASPECT的功能也远远不止于此。不过目前我只用到这些。