Как правильно писать и читать байты из порта? Получение нулевых или неправильных байтов - PullRequest
1 голос
/ 19 июня 2019

Я пытаюсь управлять циркулятором с помощью моего последовательного интерфейса, и после импорта Pyserial и открытия порта я пытаюсь записать и прочитать данные порта. Сначала я получил неверные данные и поэтому написал две строки для очистки ввода и вывода. Теперь я либо получаю нулевые данные, либо этот байт: b '? \ R \ n'.

Может, я что-то не так делаю с командами. Я не знаю, должен ли я справиться с кр или лф. (возврат каретки)

Пример команд:

Команда: 'R S1', кр Ответ: S1 + 0070.00 $

Это мой код. Я пытаюсь записать R S1 на порт и хочу прочитать порт впоследствии.

while(i <= 3):
    ser.write(b'R S1')
    print(i)
    contents = ser.readline()
    print(contents)
    i = i + 1

Я ожидаю результат текущей температуры, которая составляет 28,5 ° C.

1 Ответ

1 голос
/ 19 июня 2019

На основании команды, которую вы отправили, и если руководство вашего устройства имеет значение , то это Я бы предположил, что вам не хватает символа CR (возврат каретки) после отправки команды.

Попробуйте записать эту строку в порт:

ser.write(b'R S1\r')

Часть, в которой вы читаете, должна быть в порядке, вы уже читаете, пока не получите символы <CR><LF> (возврат каретки + перевод строки). Но вы также можете прочитать точное количество ожидаемых байтов, учитывая, что вы их знаете. В частности, для этой команды это будет 13 байтов:

contents=ser.read(13)
...