Я использовал pySerial 3.4 в своем коде для извлечения данных из последовательного порта (точнее, устройства чтения/записи RFID-чипов). Мне нужно отправить команду читателю, а затем прочитать результаты с помощью считывателя.
По сути, я пишу 12-байтовую команду, а затем пытаюсь получить 24-байтовый вывод.
Мой вопрос: почему port.read(24) не может работать, но res = bytearray(24); port.readinto(res);сработало успешно?
Полный код прилагается:
import serial
ser = serial.Serial('COM5',9600,timeout=5,rtscts=True,inter_byte_timeout=5)
def compose_find(port):
port.write(bytes.fromhex('555500000003020405'))
port.flush()
return port.read(12)[6] == 0
def compose_read(port,sec_loc=0,block_loc=0,key='F'*12):
assert sec_loc in range(0,16),'sector location is from 0~15'
assert block_loc in range(0,4),'block location is from 0~3'
assert compose_find(port),'cannot read card!'
sec_loc = '0'+str(hex(sec_loc))[2:]
block_loc = '0'+str(hex(block_loc))[2:]
command = '55 55 00 00 00 0E 03 07 00 00 {} {} 60
{}'.format(sec_loc,block_loc,key).replace(' ','')
parity = str(hex(reduce(lambda x,y:x^y,bytes.fromhex(command))))[2:]
if len(parity) == 1: parity = '0'+parity
command += parity
print(command)
port.write(bytes.fromhex(command))
port.flush()
res = bytearray(24)
port.readinto(res)
return res
compose_read(port=ser,sec_loc=8,block_loc=2)
Подробнее здесь: https://stackoverflow.com/questions/511 ... d-readinto
PySerial: В чем разница между read() и readinto()? ⇐ Python
Программы на Python
-
Anonymous
1772523509
Anonymous
Я использовал pySerial 3.4 в своем коде для извлечения данных из последовательного порта (точнее, устройства чтения/записи RFID-чипов). Мне нужно отправить команду читателю, а затем прочитать результаты с помощью считывателя.
По сути, я пишу 12-байтовую команду, а затем пытаюсь получить 24-байтовый вывод.
Мой вопрос: почему port.read(24) не может работать, но res = bytearray(24); port.readinto(res);сработало успешно?
Полный код прилагается:
import serial
ser = serial.Serial('COM5',9600,timeout=5,rtscts=True,inter_byte_timeout=5)
def compose_find(port):
port.write(bytes.fromhex('555500000003020405'))
port.flush()
return port.read(12)[6] == 0
def compose_read(port,sec_loc=0,block_loc=0,key='F'*12):
assert sec_loc in range(0,16),'sector location is from 0~15'
assert block_loc in range(0,4),'block location is from 0~3'
assert compose_find(port),'cannot read card!'
sec_loc = '0'+str(hex(sec_loc))[2:]
block_loc = '0'+str(hex(block_loc))[2:]
command = '55 55 00 00 00 0E 03 07 00 00 {} {} 60
{}'.format(sec_loc,block_loc,key).replace(' ','')
parity = str(hex(reduce(lambda x,y:x^y,bytes.fromhex(command))))[2:]
if len(parity) == 1: parity = '0'+parity
command += parity
print(command)
port.write(bytes.fromhex(command))
port.flush()
res = bytearray(24)
port.readinto(res)
return res
compose_read(port=ser,sec_loc=8,block_loc=2)
Подробнее здесь: [url]https://stackoverflow.com/questions/51165158/pyserial-what-is-the-difference-between-read-and-readinto[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия