我正在尝试通过pySerial发送十六进制命令来与监视器进行控制/通信。
我可以很好地向监视器发送命令,并且监视器可以毫无问题地响应它们。当我尝试从监视器接收到打开或关闭的确认时,我仅收到响应的一部分。始终一致,只要从监视器返回0x11,响应打印就会终止,并将其前面的十六进制值丢弃。
例如:
实时回报:0xAA 0xFF 0x00 0x03 0x41 0x11 0x01 0x55
我的代码返回:0xAA 0xFF 0x00 0x03 0x11
(有时它最后返回0x01U。)
我尝试使用xonxoff都设置为False和True的方式接收此数据。我还测试并更改了serial.Serial()的所有其他参数。当我通过诸如RealTerm之类的终端应用程序进行通信时,将收到命令并打印完整响应。我目前将serial.Serial()设置为与RealTerm中一直使用的参数完全相同的参数。任何人都可以对此有所了解吗?
在阅读完论坛后,我尝试将xonxoff设置为“ True”和“ False”,但均未成功
搜寻了一种完全忽略0x11
的方法,以便获得最终的HEX值(我真正关心的唯一HEX值)。
在各个论坛中四处查看,看是否需要缓冲区,但也无法正常工作。
确保波特率,奇偶校验等均与RealTerm中当前可用的所有设置匹配
import serial
from serial import SerialException
from time import sleep
ser = serial.Serial('COM3', baudrate=9600, xonxoff=False, timeout=3.0, rtscts=False, dsrdtr=False, bytesize = serial.EIGHTBITS, parity=serial.PARITY_NONE, write_timeout=None, stopbits=serial.STOPBITS_ONE, exclusive=None)
ser.isOpen()
command = b'\xAA\x11\x00\x00\x11'
ser.write(command)
s = ser.readline(8)
print(s)
我需要完整的十六进制返回值才能显示。如果没有其他问题,则仅输入最后一个十六进制值。在我描述的示例中,该值为0x55。
提前谢谢!