我有一个tcl脚本通过Cygwin中的Expect访问串口。我注意到\r
被忽略导致串口控制台没有回复。
spawn ./plink.exe -serial COM$priuart -sercfg 115200,8,n,1,N
set id $spawn_id
set timeout 30
log_user 1
exp_send -i $id "\r"
expect -i $id -re ".*>" {exp_send -i $id "sys rev\r"}
expect -i $id -re ".*>" {set temp $expect_out(buffer)
请注意,通过添加-o igncr
,Cygwin解决了类似的问题。但是,调用tcl脚本仍然存在问题。
有什么想法吗?
答案 0 :(得分:1)
exp_send
模拟按下 Return 键所需的确切内容可能会有所不同; \r
(回车)对于经典的Unix系统来说是正确的,但在你的情况下可能不正确,特别是因为你最终谈到串行线(它可以添加自己的复杂层) )。您完全有可能需要发送\n
(换行符)或\r\n
(回车符/换行符序列)。最简单的方法是让你进行实验,看看哪些方法有效。
在更改内容时,不要忘记在所有使用它的地方进行更改。
还要注意,Tcl可以直接与串行线通信,并且spawn告诉使用已经打开的通道。这对你来说可能更好......
# The name *is* magical, especially for larger port numbers
set channel [open \\\\.\\com$priuart r+]
fconfigure -mode 115200,n,8,1 -buffering none
spawn -open $channel