[Motor driver modbus protocol information][1]
[Our Motor driver electric scripts ][2]
[Device address and Register information ][3]
Я знаю, что мне нужно использовать кодирование для передачи моей строки hex , я пробую так много способов получить правильное значение, но не совсем.
Например:
Когда я отправляю шестнадцатеричную строку (например, "03060000000149e8"
) на мой порт:
Она должна ответить "03 06 00 00 00 01 49 e8"
, котораяЯ получил от cutecom помощника по последовательному порту, но он дал мне "0310000152ff"
.
Понятия не имею, не могли бы вы помочь мне это исправить?Спасибо.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import serial
import time
import binascii
import struct
s=serial.Serial('/dev/ttyUSB0',19200,bytesize=8, parity='O', stopbits=1,timeout=None, xonxoff=0)#
message_bytes = "03060000000149e8".decode('hex'
# print str(message_bytes)
s.write(message_bytes)
s.flushInput()
s.flushOutput()
time.sleep(0.1)
# print s.read(1)
# print bytes(s.read(15))#.encode('hex')
# print binascii.hexlify(s.read(15))
serial_data =''
while s.inWaiting() > 0:
c=s.read(1)
# or c=ser.read(1).decode('latin1')
serial_data += c
s.flushOutput()
print hex(int(c.encode('hex'),16))
# w = struct.unpack("h", c)[0]
# print w
# print binascii.hexlify(c)
# print int(c,16)
print serial_data.encode('hex')
print binascii.hexlify(serial_data.replace('\n',''))#.decode('hex')
# message_bytes_2='03060002ff9c6871'.decode("hex")
# # kk="\x01\x06\x00\x02\x03\xE8\x28\xB4"
# s.write(message_bytes_2)
# time.sleep(0.01)
#
# print s.read(15).encode('hex')
# s.reset_output_buffer()
# message_bytes_2='030300000002c5e9'.decode("hex")
# # kk="\x01\x06\x00\x02\x03\xE8\x28\xB4"
# print s.write(message_bytes_2)
# time.sleep(0.1)
#
s.close()
[1]: https://i.stack.imgur.com/wkXkv.png
[2]: https://i.stack.imgur.com/lkdWK.png
[3]: https://i.stack.imgur.com/ClSjN.png