在Python中测量串行Tx和Rx之间的时间间隔
我遇到了一个问题,我试图在python中测量串行写入和串行读取之间的时间间隔。我在windows上使用Python3.8和USB->RS485适配器。基本上,守则如下:在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() 紧接着是:
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数据包,然后再发送任何东西到计算机(超时)。如果你想精确地测量像这样的东西,微控制器可能是最好的选择。