Подтвердить последовательное чтение - PullRequest
1 голос
/ 24 марта 2019

В настоящее время я пытаюсь прочитать последовательный порт, и данные иногда "повреждены".

Я ожидаю, что такие данные

['CPS', '0', 'CPM', '11', 'uSv/hr', '0.06', 'SLOW']

Первое чтение после открытия последовательного порта всегда

['\x00']

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

['CPS', '0', 'CPM', '21', 'uSv/hr', '\x000.11', 'SLOW']

Я уже пытался убедиться в правильности показаний это, довольно некрасиво, проверка состояния:

serialData = serialConnection.readline()
serialData = "".join(serialData.split())
serialList = serialData.split(",")
if (len(serialList) < 7 or serialList[5][0] == "\\"
    or serialList[0] != "CPS" or serialList[2] != "CPM"):
    uSvH = 0.1
else:
    uSvH = float(serialList[5])

Итак, я проверяю, правильный ли размер прочитанных данных (семь записей), первая запись всегда должна быть CPS, и когда вместо числа с плавающей точкой принимается \ x *, для чтения устанавливается значение по умолчанию.

Но почему-то происходит сбой, когда происходит искаженное чтение

Есть ли лучший способ санации показаний или проверки правильности полученных данных?

1 Ответ

0 голосов
/ 25 марта 2019

Похоже, я думал слишком сложно.Простая попытка кроме оператора завершила работу.

 if(len(serialList) == 7):
    try:
        uSvH = float(serialList[5])
    except ValueError:
        uSvH = 0.1
if (len(serialList) < 7 or serialList[0] != "CPS" or serialList[2] != "CPM"):
    uSvH = 0.1

Теперь скрипт пропускает некоторые случайные чтения.

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