2016-04-21 44 views
0

我有一個tcl腳本來通過Cygwin中的Expect訪問串行端口。我注意到\r只是被忽略,導致串行控制檯無應答。「 r」在Cygwin的TCL期待中被忽略

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) 

請注意,類似的問題在Cygwin的加入-o igncr解決。但是,調用tcl腳本的問題仍然存在。

有什麼想法?

+0

你好。歡迎來到Stack Overflow。請環顧四周,參加[旅遊],並通讀[幫助中心]。你也可以閱讀關於[問]一個很好的問題。 – Sampada

回答

1

確切的事情你需要exp_send來模擬按下返回鍵可以改變; \r(回車)對於傳統的Unix系統來說是正確的,但在你的情況下可能並不正確,特別是因爲你最終會與串行線交談(這可能會增加它自己的一層複雜性)。完全有可能您需要發送\n(換行符)或\r\n(回車/換行符序列)。最簡單的事情是讓你試驗一下,看看有什麼作用。

不要忘記在使用它的所有地方改變它以改變它。

另外請注意,Tcl可以直接與串口線通信,併產生告訴使用已經打開的通道。這可能對你更好...

# 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 
+1

非常感謝。在替換訪問您的建議以使用[打開/ dev/ttyS0 r +]而不是plink.exe後,問題就不存在了。 –