Интервал измерения времени между последовательным Tx и Rx в Python - PullRequest
0 голосов
/ 13 февраля 2020

У меня проблема с попыткой измерить временной интервал между последовательной записью и последовательным чтением в python. Я использую python 3.8 и USB-> RS485 адаптер на windows. По сути, код выглядит следующим образом:

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 мс и т. Д. c., Почти случайные значения.

https://i.stack.imgur.com/eJFAJ.jpg

Я также пытался запустить скрипт на Linux, но особой разницы нет. Я также работаю с довольно высокими скоростями передачи 921600.

...