Python записывает данные через последовательный порт на Vellemank8090 - PullRequest
1 голос
/ 20 сентября 2019

всем,

Я пытаюсь управлять реле с релейной платы через Python и написать следующий код.К сожалению, я всегда получаю ошибку.Может кто-нибудь сказать мне, что я делаю не так?Для строительства я связал документацию (см. Вторую ссылку).Я также нашел другой пост, где кто-то пытается прочитать данные с платы реле (см. Первую ссылку).Но код не работает для меня тоже.

С наилучшими пожеланиями до

Переведено с www.DeepL.com/Translator

Полезная информация

Еще один пост отstackoverflow о считанных данных с Velleman K8090

Документация для платы реле USB (K8090) Вот документация для платы реле USB (Velleman K8090).

Мой код

import serial

ser = serial.Serial()
ser.baudrate = 19200
ser.port = 'COM4'
ser.data_bits = 8
ser.parity = 'N'
ser.stop_bits = 1
ser.flow_control = 'N'

ser.open()
print(ser.is_open)

print(str(bytearray([0x04, 0x11, 0x01, 0x00, 0x00, (((~(0x04 + 0x11 + 0x01 + 0x00 + 0x00)) + 0x01) & 0xff), 0x0f])))
data = str(bytearray([0x04, 0x11, 0x01, 0x00, 0x00, (((~(0x04 + 0x11 + 0x01 + 0x00 + 0x00)) + 0x01) & 0xff), 0x0f]))
ser.write(data)

ser.close()
print(ser.is_open)

Вывод:

True bytearray (b '\ x04 \ x11 \ x01 \ x00 \ x00 \ xea \ x0f') Traceback (последний вызов был последним): файл "C: \ Users \ twinters \ Desktop \ K8090_V2.py", строка 16, в файле ser.write (данные), файл "C: \ Users \ twinters \ AppData \ Local \ Programs\ Python \ Python37-32 \ lib \ site-packages \ serial \ serialwin32.py ", строка 308, в файле write data = to_bytes (data) Файл" C: \ Users \ twinters \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ serial \ serialutil.py ", строка 63, в to_bytes поднять TypeError ('строки Unicode не поддерживаются, пожалуйста, закодируйте в байты: {! R}'. Format (seq)) TypeError: строки Unicodeне суппортПожалуйста, закодируйте в байтах: "bytearray (b '\ x04 \ x11 \ x01 \ x00 \ x00 \ xea \ x0f')"

1 Ответ

0 голосов
/ 20 сентября 2019

В Python 3 str создает строку Unicode (это отличается от Python 2.7).Вы, вероятно, хотите вместо этого bytes.Как это:

data = bytes(bytearray([0x04, 0x11, 0x01, 0x00, 0x00, (((~(0x04 + 0x11 + 0x01 + 0x00 + 0x00)) + 0x01) & 0xff), 0x0f]))
...