Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 10, 2021 14:43:15

Cukerman
Зарегистрирован: 2021-11-10
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

PySerial: Write не отправляет строку.

Добрый день. Помогите начинающему, необходимо отправить строку hex “33 98 50 56 09 09 09 11 21 00 00 6e ” в неизменом виде в порт. Как её коректно преобразовать?
Python 3.10 ругает так:

TypeError('unicode strings are not supported, please encode to bytes: {!r}'.format(seq))
TypeError: unicode strings are not supported, please encode to bytes: ‘33985056090909112100006e’


 import serial
ser = serial.Serial (port='COM1',baudrate=9600, parity=serial. PARITY_NONE, stopbits=serial. STOPBITS_ONE, bytesize=serial.EIGHTBITS,timeout=0)
dtr_string1 ="33 98 50 56 09 09 09 11 21 00 00 6e"
print(dtr_string1)  
s_string1 = dtr_string1.replace(" ", "")
print(s_string1)
ser.write(s_string1)
print(s_string1)
ser.close

Офлайн

#2 Ноя. 10, 2021 15:38:33

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

PySerial: Write не отправляет строку.

  
>>> text = '33 98 50 56 09 09 09 11 21 00 00 6e'
>>> 
>>> arr = bytearray.fromhex(text.replace(' ', ''))
>>> arr
bytearray(b'3\x98PV\t\t\t\x11!\x00\x00n')
>>> 
>>> arr[0], hex(arr[0])
(51, '0x33')
>>> arr[1], hex(arr[1])
(152, '0x98')
>>>



Офлайн

#3 Ноя. 10, 2021 16:10:20

Cukerman
Зарегистрирован: 2021-11-10
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

PySerial: Write не отправляет строку.

спасибо. НО в таком случае.

 ser.write(hex(arr[11]))
ошибка
raise TypeError('unicode strings are not supported, please encode to bytes: {!r}'.format(seq))
TypeError: unicode strings are not supported, please encode to bytes: ‘0x6e’
хотя print(hex(arr))
выводит >> 0x6e

Отредактировано Cukerman (Ноя. 10, 2021 16:10:37)

Офлайн

#4 Ноя. 10, 2021 18:49:58

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

PySerial: Write не отправляет строку.

  
ser.write(arr)



Офлайн

#5 Ноя. 11, 2021 16:16:41

Cukerman
Зарегистрирован: 2021-11-10
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

PySerial: Write не отправляет строку.

Спасибо, Работает! Осталось понять как переменную n в шестнадцатеричнном виде добавить в конец массива
#arr.extend(bytearray.fromhex(str(num)))
#arr.append(numH)

 >>> n = 11
>>> print (n)
11
>>> print (type(n))
<class 'int'>
>>> m=str(n)
>>> print (type(m))
<class 'str'>
>>> bytearray.fromhex(m)
bytearray(b'\x11')
>>> h=hex(n)
>>> print (type(h))
<class 'str'>
>>> print (h)
0xb
>>> bytearray.fromhex(h)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: non-hexadecimal number found in fromhex() arg at position 1

Офлайн

#6 Ноя. 11, 2021 17:14:50

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

PySerial: Write не отправляет строку.

Cukerman
Осталось понять как переменную n в шестнадцатеричнном виде добавить в конец массива
  
>>> arr = bytearray(b'3\x98PV\t\t\t\x11!\x00\x00n')
>>> 
>>> arr.append(0x11)
>>> arr.append(17)
>>> arr.extend(b'\x11')
>>> arr.extend([0x11])
>>> arr += b'\x11'
>>> arr += bytes([0x11])
>>> 
>>> arr
bytearray(b'3\x98PV\t\t\t\x11!\x00\x00n\x11\x11\x11\x11\x11\x11')
>>>



Офлайн

#7 Ноя. 12, 2021 07:41:00

Cukerman
Зарегистрирован: 2021-11-10
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

PySerial: Write не отправляет строку.

Спасибо, старший брат!
п.с. А я изобретал костыль для Питона, arr.append(17) сам конвертит как нужно.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version