我遇到了一个问题,我试图测量 python 中串行写入和串行读取之间的时间间隔。我在 Windows 上使用 python 3.8 和 USB-> RS485 适配器。本质上,代码如下:
def write_packet(self, packet, flush=True):
if flush:
self.clear_buffers()
self.ser.write(packet)
self.tx_time = time.time_ns()
紧随其后的是:
def read_packet(self):
first_byte = True
while True:
byte = self.ser.read(1)
# Check if the read timed out:
if byte == b'':
**(notify of timeout)**
if byte == b'\x00':
**(end of packet, decode and break)**
else:
if first_byte:
self.time_rx = time.time_ns()
first_byte = False
正如您可能看到的,我正在尝试捕获刚发送后到接收第一个字节之间的时间。之后我做了这样的事情来获得毫秒的时间:
time_diff_ms = (self.rx_time - self.tx_time)/1000000
我的问题是time_diff_ms的时间似乎很遥远。RS485 信号下方的示波器图像显示它应该读取大约 1 毫秒的时间,但脚本读取的值是 6 毫秒、11 毫秒等,几乎是随机值。
https://i.stack.imgur.com/eJFAJ.jpg
我也试过在 Linux 上运行脚本,但差别不大。我也在使用相当高的波特率 921600。