Запись Python через последовательный порт как шестнадцатеричный, а не ASCII - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь опросить данные с инструмента, который использует протокол ModBus через pyserial.Мне нужно знать, как предотвратить отправку команды pyserial в ascii.

Вот что я сделал:

  1. Используя RealTerm, я подключился к инструменту и отправилэту команду и нажмите «Отправить как числа»: 0x33 0x03 0x9D 0xA4 0x00 0x02 0xAE 0x56.Отправка этой строки как числа смогла правильно опросить данные: 33 03 04 BE CE 5C A8 94 99;например, «BE CE 5C A8» переводится в -0,4030, то есть в число, которое инструмент показывает на своем экране.

  2. Использование RealTerm и той же команды, если я нажму «Отправить»как ASCII ", опрошенные данные будут неверными: 30 F8 04 33 CC 44 A0 04 48 16 78 B0 04 85 DA, которые я не могу соотнести с числом, показанным на экране прибора.

  3. Возвращаясь к Python и pyserial, когда я попытался записать через последовательный порт, используя serial.write ("0x33 0x03 0x9D 0xA4 0x00 0x02 0xAE 0x56"), я получил те же данные, что и на шаге 2.

Поэтому мне кажется, что serial.write () отправляет команду как ASCII.Кто-нибудь знает, как я могу отправить эти данные аналогично RealTerm, шаг 1?

1 Ответ

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

Вы можете использовать байты или байтовый массив:

msg = bytes.fromhex("33 03 9D A4 00 02 AE 56")
serial.write(msg)
...