2016-11-29 31 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) 
相关问题