2016-11-29 28 views
0

我嘗試向硬件發送一個命令並想要返回結果。我確信當我發送如下命令時:echo "read" > /dev/ttyS0,命令將被執行。抓住反饋時出現問題。爲此,我想使用這個腳本:在bash腳本中從/ dev/ttyS0讀取時出現奇怪的結果

#!/bin/bash 

echo "READ" > /dev/ttyS0 

#stty -F /dev/ttyS0 9600 
stty -F /dev/ttyS0 raw 
stty -F /dev/ttyS0 -echo 

STR="result " 

while read -r -s -t 1 -n 1 c && [[ $c != '>' ]] 
do 
    STR+=$c 
done < /dev/ttyS0 

echo $STR 

結果應該是這樣的。

Level 0 
001,001, 002,002;> 

但是當我執行腳本時,有時我得到正確的結果,但大多數時候我沒有得到任何回報。

+1

也許超時時間太短?檢查「讀取」命令返回的內容。如果代碼超過128,則超時。 – pkalinow

+0

'read -r -t 20 -d'>'STR chepner

+0

超時並不是問題,較短的建議也不起作用。 – kyromoto

回答

0

我解決了這個腳本的問題:

import serial 

ser = serial.Serial(
     port='/dev/ttyS0', 
     baudrate=9600, 
     parity=serial.PARITY_NONE, 
     stopbits=serial.STOPBITS_ONE, 
     bytesize=serial.EIGHTBITS, 
     timeout=1 
    ) 

    str="" 
    c="" 
    ser.write("terminal off\r\n") 
    ser.readline(); 
    ser.write("read\r\n") 

    while (len(str) < 2 or c != ">"): 
     c = ser.readline() 
     str += c  

    ser.close() 

    print(str) 
相關問題