Чтение и запись в UART pyserial с использованием функции тайм-аута - PullRequest
0 голосов
/ 01 ноября 2018

Я написал сценарий py-serial UART, который выглядит следующим образом.

import serial
import time

try:
     ser = serial.Serial(
     #port='/dev/ttyAMA0',
     port='/dev/ttyUSB1',
     baudrate = 9600,
     parity=serial.PARITY_NONE,
     stopbits=serial.STOPBITS_ONE,
     bytesize=serial.EIGHTBITS,
     timeout=2
    )
    print ('Connection is open : ',str(ser.isOpen()))
except Exception as e:
    print ("Something got wrong: ", e)


ser.write(b'hello..')

и сценарий, аналогичный получателю.

что я хочу это: предположим, тайм-аут = 5

ser.write(b'Helloo...')
ser.flush()
ser.readline()

другой скрипт читает его и отправляет ответ только через последовательный порт. эта строка чтения должна ожидать максимум этого тайм-аута, если она получила ответ через 2 секунды, то она не должна ждать 5 секунд.

Но с использованием этого тайм-аута он ждет 2 секунды, даже если данные получены в секунду.

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

Не удалось найти эту функцию, пожалуйста, помогите.

1 Ответ

0 голосов
/ 02 ноября 2018

нашел способ для этого:

pyserial имеет эту встроенную функциональность, например:

ser.read_until(b'#') #just specify EOL here

Это сломается, если это (#) будет найдено. если нет, будет ждать тайм-аут и вернуться в конце.

Вы также можете использовать отдельные таймауты для чтения и записи:

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