首页 > 解决方案 > 使用pyserial读取串口十六进制字符串值时,无法得到正确的响应答案

问题描述

[Motor driver modbus protocol information][1]
[Our Motor driver electric scripts ][2]
[Device address and Register information ][3]

我知道我需要使用编码来传输我的十六进制字符串,我尝试了很多方法来获得正确的值但根本不正确。

例如:
当我向我的端口发送十六进制字符串(如 "03060000000149e8")时:
它应该响应"03 06 00 00 00 01 49 e8"我从可爱的串口助手那里得到的,但它只给了我"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

标签: pythonlinuxpyserial

解决方案


推荐阅读