在Python中测量串行Tx和Rx之间的时间间隔

在Python中测量串行Tx和Rx之间的时间间隔,python,time,usb,rs485,Python,Time,Usb,Rs485,我遇到了一个问题,我试图在python中测量串行写入和串行读取之间的时间间隔。我在windows上使用Python3.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() 紧接着是:

我遇到了一个问题,我试图在python中测量串行写入和串行读取之间的时间间隔。我在windows上使用Python3.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
我的问题是时间差似乎太远了。下面的RS485信号范围图显示,它应该读取约1ms的时间,但脚本读取的值为6ms、11ms等,几乎是随机值


我也尝试过在Linux上运行脚本,但差别不大。我也在使用相当高的波特率921600。

Windows不是一个应用程序,您使用的是解释语言(Python),它也有一些延迟。我非常怀疑你会得到和示波器一样好的数值。哦,绝对的,Windows远非RTOS。我基本上是在开发一个工具来自动化测量时间间隔的过程。我认为这是可能的,因为我已经在Linux上对时间的分辨率进行了基准测试,我可以达到48ns的分辨率,尽管其他python方面的事情可能会阻止我获得合理的时间。如果没有,我将不得不寻找一个替代方案。有非常便宜的USB示波器。除了操作系统和Python解释器之外,您的USB-to-RS485适配器也可能会导致一些延迟。例如,它可能有一个(误导的)设计,它试图等到有足够的数据填满USB数据包,然后再发送任何东西到计算机(超时)。如果你想精确地测量像这样的东西,微控制器可能是最好的选择。