【问题标题】:pySerial can write, but not readpySerial 可以写,但不能读
【发布时间】:2021-12-02 02:23:41
【问题描述】:

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

【问题讨论】:

  • 您需要断言 DTR 还是 RTS?

标签: python serial-port pyserial


【解决方案1】:

出现这种问题的原因有很多,我首先想到的是你的序列号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)

【讨论】:

  • 尝试使用中间的串行电缆将两个 USB 转串行适配器再次连接到计算机。按照您对两个端口的建议指定所有值(端口名称和设置为 100 的超时除外)。写入一个串口,另一个仍然没有收到任何东西。问题不可能是与我的实验室设备不兼容的值。
【解决方案2】:

您可能遇到波特率问题,您应该声明如下内容:

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)

【讨论】:

  • 谢谢,但运行时我仍然没有得到任何输出。
  • 你检查过你的设备的波特率是多少?
  • 你还有什么可以用来测试你的 python 脚本(arduino、其他计算机等)吗?检查也在我的帖子中编辑...
【解决方案3】:

我在 Win10 系统上遇到过类似的问题。对我来说,这与硬件握手有关。 插入:

ser.rts = False
ser.dtr = False

在阅读 waitingstatus 之前可能会有所帮助(它对我有用)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多