Форум сайта python.su
День добрый. Подскажите пожалуйста, в питоне не силен, но задача стоит.
Имеется автомобиль Honda протокол обмена данными с ECU автомобиля нестандартный, но его раскрыли и выложили вот Your text to link here… . Подключается все это дело к PC через COM-USB адаптер. дак вот вопрос. Как передать в com-порт команду типо 20 05 00 10 CB и т.д? И как потом обратно считать данные которые выдаст ECU. С чего начать.
Отредактировано MAGRA (Фев. 20, 2015 04:20:20)
Офлайн
Офлайн
py.user.next Спасибо, с этим разобрался! Теперь возник ещё вопрос. Когда я отправляю на порт строчку 20 05 10 10 CB, он его не понимает что это hex. Как сделать что бы com-порт понял меня правильно, типо что я хочу считать 16 байт из памяти.?
ser = serial.Serial('COM1', 9600, timeout=1)# open first serial port
print ser.name # check which port was really used
#time.sleep(1)
ser.write(“20 05 10 10 CB”)# write a string
print “20 05 10 10 CB”
ser.read()
Офлайн
Офлайн
Во втором питоне используй bytearray():
>>> b = bytearray([0x20, 0x05, 0x10, 0x10, 0xCB]) >>> b bytearray(b' \x05\x10\x10\xcb') >>> list(b) [32, 5, 16, 16, 203] >>>
>>> b = bytes([0x20, 0x05, 0x10, 0x10, 0xCB]) >>> b b' \x05\x10\x10\xcb' >>> list(b) [32, 5, 16, 16, 203] >>>
Офлайн
py.user.nextА в чем смысл для ТС использовать bytearray или bytes? Ему нужно просто передать правильный литерал. А ваша запись длиннее и похоже никакого полезного для данной задачи дополнительного функционала не дает.
Во втором питоне используй bytearray():
Офлайн
doza_andКогда он начнёт формировать команды, а делать это надо будет не руками, вот тогда это и станет заметно.
Ему нужно просто передать правильный литерал.
Отредактировано py.user.next (Фев. 23, 2015 18:07:12)
Офлайн
py.user.next Вроде получилось, комп ответил, только вот какк то странно его понял питон, написал “!!” команда была вот такая.
ser = serial.Serial('COM3', 9600, timeout=1)# open first serial port
print ser.name # check which port was really used
#time.sleep(1)
a = bytearray()
ser.write(a)# write a string
print ('20 05 00 10 CB')
ser.read()
print(ser.read())
>>> 20 05 00 10 CB
!!
Как сделать так, что бы он при приеме данных отображал их в виде 13 03 48 3….
Отредактировано MAGRA (Фев. 23, 2015 17:42:04)
Офлайн
Чтобы код передавать точно, используй теги кода. Если пишешь без тегов, движок форума преобразует символы.
такие
Отредактировано py.user.next (Фев. 23, 2015 18:11:42)
Офлайн
ser = serial.Serial('COM3', 9600, timeout=1)# open first serial port print ser.name # check which port was really used #time.sleep(1) a = bytearray([0x20, 0x05, 0x00, 0x10, 0x100-(0x20+0x05+0x00+0x10)]) ser.write(a)# write a string print ('20 05 00 10 CB') ser.read() print(ser.read())
Отредактировано MAGRA (Фев. 24, 2015 04:21:33)
Офлайн