Python代码没有正确读取串行数据

时间:2017-06-26 13:30:30

标签: python serialization

所以我正在编写一个程序来读取和写入串行端口的数据。设置所述端口,我知道它为其所处的不同状态发送的特定字节代码。但是,我的Python脚本应该读取串行数据并将其打印到屏幕上。

以下是端口的设置,以及我的ReadLine方法:

class SerialCommunicator:

    def __init__(self, *args, **kwargs):    
        self.port = serial.Serial("/dev/ttyUSB0")
        self.portSettings = {
            'baudrate' : 57600,
            'bytesize' : 8,
            'parity' : 'N',
            'stopbits' : 1,
            'timeout' : 0,
            'inter_byte_timeout' : None,
            'write_timeout' : None,
            'xonxoff' : False,
            'rtscts' : False,
            'dsrdtr' : False }
        self.port.apply_settings(self.portSettings)
        while True:
            output = self.ReadLine()
            if (output != ''):
                print(output)

    def ReadLine(self):
        readValue = ""
        isReading = True
        while isReading:
            currentRead = self.port.read()
            currentRead = currentRead.decode()
            readValue += currentRead
            if currentRead == '\r' or currentRead = '':
                isReading = False
                return readValue

因此,当我运行此代码时,输​​出我期待一个乱码。我期待串口上运行的两个输出字符串:

T12F8B0A2200F8

T1610FFA20

第二个输出始终正确显示。然而,第一个要么截断代码的头部,要么在中间切片,否则它的尾部会丢失。我需要代码正确完整,因为我使用代码来读取设备所处的状态。可能是我的问题?

编辑:对于那些好奇的人,是的,我试过调整波特率。但是,当波特率高于57600时,我根本没有输出数据。

1 个答案:

答案 0 :(得分:0)

事实证明我的问题在于我的timeout值。设置'timeout' : 1解决了我的问题:)