我在这里有这个简短的代码片段,工作正常,但我有摆脱硬编码部分的问题。PySerial超时和回调
ser = serial.Serial()
ser.baudrate = 38400
ser.port = '/dev/ttyUSB0'
ser.parity = serial.PARITY_EVEN
ser.timeout = 1
ser.open()
ser.flushInput()
ser.write(command) #command here is a simple request for data to my device
msg = ser.read(200)
ser.close()
虽然这工作正常,我遇到的问题是这样的。根据注册的内容,返回消息的长度可以从8字节到近200字节。通过使用超时,如果它没有收到200字节,我会阻止我的读取命令停顿。我也不知道返回消息的长度,因此我不能动态更改ser.read。此外,在传输结束时没有不变的结束符或常量字符以在while循环中锁定。
有没有一个更稳定/动态的方式来做到这一点?如果请求太长,我可能会耗尽时间,或者如果没有完整的数据传输,我可能会破坏读取缓冲区。另一方面,增加定时器意味着我的请求速率会减慢(但是增加读取缓冲区没有问题)。
发送响应的设备会一次发送答复,还是会在数据中出现时间差?真的,通过串行链路发送数据的设备应该提供某种分组。 – quamrana