Игнорировать данные, записанные на последовательный порт, до тех пор, пока они не будут прочитаны с помощью pyserial - PullRequest
0 голосов
/ 27 ноября 2018

У меня та же проблема, что и в этом посте, но решение не совсем работает, хотя и помогло.

Чтение последовательного порта - игнорировать часть данных, записанных в последовательный порт для некоторыхвремя

Тем не менее, я думаю, что у Фермера Джо была та же проблема с решением - данные иногда были разрезаны пополам, например:

b'2.36\r\n'
b'2.36\r\n'
b'2.36\r\n'
b'\n'
b'\r\n'
b'36\r\n'
b'2.36\r\n'
b'2.36\r\n'

, но окончательное решение былоникогда не отправлял!

1 Ответ

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

Я обнаружил простое, которое включает в себя закрытие и открытие порта при необходимости, а не очистку com-порта буферизованных данных, когда они должны быть прочитаны - это работает при прерывистом чтении.

serial.open()

while (serial.inWaiting()==0): #wait until there is data
    pass

valueRead = serial.readline()
serial.close()

Второйрешение было выбросить первое значение.Я обнаружил, что этот метод хорошо работает при чтении с необходимой частотой.Например, когда данные отправляются на ком-порт с частотой 1000 Гц, а порт считывается с частотой 0,1 Гц, 100 выборок считываются за период 1 с.

serial.flushInput()
serial.readline() #do not save this value - throw away

while (serial.inWaiting()==0): #wait until there is data
    pass

valueRead = serial.readline() #keep this value
...