首页 > 解决方案 > 在 Python 中测量串行 Tx 和 Rx 之间的时间间隔

问题描述

我遇到了一个问题,我试图测量 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。

标签: pythontimeusbrs485

解决方案


推荐阅读