Серийное чтение Python занимает больше времени - PullRequest
0 голосов
/ 06 мая 2019

Я использую Xbee, подключенный к Raspberry pi3, API-mode = 2 и посылаю 29-байтовые данные из xbee через последовательный интерфейс и считываю (29 байт) через последовательный интерфейс, оба из которых работают хорошо, как показано в коде ниже:

ser=serial.Serial(PORT, BAUDRATE)
while True:
    #SEND DATA
    wrt_time = datetime.now().microsecond
    msg=[0x10,
         0x00,
         0x00,
         0x00,
         0x00,
         0x00,
         0x00,
         0x00,
         0xFF,
         0xFF,
         0xFF,
         0xFE,
         0x00,
         0xCC,
         0x66,
         0x00,
         0x00,
         0x01,
         0x00,
         0x03,
         0xFF,
         0x01,
         0x00,
         0x01,
         0x77,
         0x00,
         0x1D]
    ser.write(chr(0x7e)+
              chr(len(msg)//256)+
              chr(len(msg)%256))
    ser.write(''.join(chr(x) for x in msg))
    check=(0xFF - ( sum(msg) & 0xFF ))
    ser.write(chr(check))
    wrt_elapsed_time = datetime.now().microsecond - wrt_time
    print("write time: ", wrt_elapsed_time)

    read_time = datetime.now().microsecond
    data = ser.read(29)
    read_elapsed_time = datetime.now().microsecond - read_time
    print("read time: ", read_elapsed_time)
ser.close()

Я также измеряю время, необходимое для чтения и записи данных через последовательный порт. Время записи составляет ~ 700 мсек, а время чтения ~ 140000 мсек, что довольно много. Проблема в том, что ser.read занимает довольно много времени. Тот же код на C ++ занимает в 10 раз меньше времени, чем Python, поэтому я уверен, что это не проблема с оборудованием. У меня есть два вопроса: 1. По какой причине Python занимает больше времени? Имеет ли Python тот же UART, что и C / C ++, или есть другой, реализованный на более высоком уровне для Python? 2. Можно ли в любом случае сократить время, затрачиваемое на выполнение последовательного чтения?

1 Ответ

0 голосов
/ 08 мая 2019

Вы говорите msec (мс), но ваш код ссылается на microsecond (мкс).Обратите внимание, что запись будет быстрой, так как байты буферизуются, и 0,7 мс для записи и 140 мс для чтения звучат разумно.Ваше время чтения включает в себя время, когда Pi фактически записывает буферизованные байты в XBee, а затем последовательно читает 29-байтовый ответ.

Как всегда, я рекомендую 115200 бит / с вместо 9600 бит / с для подобных вещейТаким образом, вы сокращаете время, затрачиваемое на отправку байтов через последовательный интерфейс.Я также чувствую, что использование режима API 2 - это больше работы, чем использование режима API 1, но, возможно, это только мое личное предпочтение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...