我正在尝试在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到串行适配器相互连接)。使用零调制解调器连接解决了这个问题。答案 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)