pySerial可以写,但不能读

时间:2018-03-21 14:21:47

标签: python serial-port pyserial

我正在尝试在Windows 10计算机(Python 3.6.4,32位)上使用pySerial从一些实验室设备读取串行数据,这些设备通常会将其数据记录到串行ASCII打印机。使用USB转串口适配器连接。

如果我将计算机连接到打印机,我可以使用serial.write()打印,所以我知道我的适配器正在工作。但是,当我将计算机连接到实验室设备并尝试使用以下代码读取数据时,我什么都没得到:

import serial
ser = serial.Serial('COM5')
while True:
    if ser.in_waiting != 0:
        datastring = ser.read(size=ser.in_waiting)
        print(str(datastring))

我知道实验室设备在运行代码时正在传输。还尝试使用适配器之间的串行电缆将两个USB转串口适配器连接到计算机,并将数据从一个串口发送到另一个串口。再一次,我可以毫无问题地写,但是另一个端口什么也没收到。

编辑:我发现有硬件问题。我已经使用标准串行电缆将实验室设备连接到我的USB到串行适配器(并且,出于测试目的,将两个USB到串行适配器相互连接)。使用零调制解调器连接解决了这个问题。

2 个答案:

答案 0 :(得分:0)

您可能遇到波特率问题,您应该声明一些类似的内容:

import serial
ser = serial.Serial('COM5', 9600, timeout=None) #<- 9600 is the baud rate

while True:
    data = ser.readline()
    print(data)

编辑

While True:
    bytesToRead = ser.inWaiting()
    data=ser.read(bytesToRead)
    print(data)

答案 1 :(得分:0)

导致此类问题的原因有很多,我想到的第一件事就是您的序列号为timeout,并且在收到任何内容之前关闭连接:

ser = serial.Serial('COM5', timeout=None)

您可以检查的其他值如下:

ser = serial.Serial('COM5', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False)