Форум сайта python.su
Кто сталкивался подскажите пожалуйста как правильно передать команды в HEX формате в COM порт
с портом работаю с помощью PySerial:
Пишу в порт примерно так:
self.serial.write(cmnd)
а вот чему должна быть равна cmnd если надо передать следующее:
/?! 0x0D
0х06 051 0x0D
0x0A
0x01 R1 0x02 SNUMB() 0x03
и т.п. уже по разном пробовал но похоже что то делаю неправильно т.к. устройство до которого хочу
достучатся не отвечает, а фирменной утилите своей на эти команды отвечает.
То что 0x0D = ‘\n’ а 0x0A = ‘\r’ я знаю, но вот как остальное передать мне не понятно…
Офлайн
Должно быть что-то вроде:
data = "".join(map(char, [0x0D, 0х06, 0x51, 0x0D ... ]))
serial.write(data)
BuffBytes = ctypes.c_ubyte * WRITE_LEN
data = BuffBytes(*[0x0D, 0х06, 0x51, 0x0D ... ])
serial.write(data)
Офлайн
надо воспользоваться модулем struct
Офлайн
Kogrom
Спасибо! Так получилось:
data = "".join(map(chr, [0x0D]))
serial.write(data)
PooHПочитал про этот модуль, чем он мне может помочь для данной задачи не понял…
надо воспользоваться модулем struct
Офлайн
madlightИм можно преобразовывать типы данных питона в поток байт и наоборот.PooHПочитал про этот модуль, чем он мне может помочь для данной задачи не понял…
надо воспользоваться модулем struct
packet = [0x0D, 0х06, 0x51, 0x0D ... ]
pack('%dB' % len(packet), *packet)
Офлайн
пока проблему решил, на досуге попробую со struct поэксперементирую
Офлайн
PooHНе понял, почему? Возможно, PooH хотел сказать не надо, а можно. В документации по pySerial про write написано:
надо воспользоваться модулем struct
pySerialТо есть, строка будет совместима со старыми версиями, а в новых можно делать так как удобнее. Генерировать массив байтов с помощью ctypes мне удобно, так как читается проще, чем сокращения в struct. Вот что значит ‘%dB’? Без документации не разберёшься.
Write the string data to the port.
Changed in version 2.5: Accepts instances of bytes and bytearray when available (Python 2.6 and newer) and str otherwise.
Офлайн
KogromДа, действительно - можно.
Не понял, почему? Возможно, PooH хотел сказать не надо, а можно. В документации по pySerial про write написано:
KogromНу это кому что привычнее. Без документации то в обоих случаях не обойтись ;)
Генерировать массив байтов с помощью ctypes мне удобно, так как читается проще, чем сокращения в struct. Вот что значит ‘%dB’? Без документации не разберёшься.
Офлайн