首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对来自RS232串行端口的数据进行编码/解码

对来自RS232串行端口的数据进行编码/解码
EN

Stack Overflow用户
提问于 2020-03-24 07:55:11
回答 2查看 2.3K关注 0票数 1

这是我第一次不得不通过RS232串口连接设备来读/写数据,我被编码/解码过程卡住了。

我在Python3中使用"pyserial“库来做所有的事情。以下是我到目前为止所做的工作:

代码语言:javascript
运行
复制
import serial

ser = serial.Serial()
ser.port = '/dev/ttyUSB0'
ser.baudrate = 115200
ser.bytesize = serial.EIGHTBITS
ser.parity = serial.PARITY_NONE
ser.stopbits = serial.STOPBITS_ONE
ser.timeout = 3

ser.open()

device_write = ser.write(bytearray.fromhex('AA 55 00 00 07 00 12 19 00'))

device_read = ser.read_until()

连接/通信似乎正常工作。device_read的输出是

代码语言:javascript
运行
复制
b'M1830130A2IMU v3.2.9.1 26.04.19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0527641\x00\x00\x00IMHF R.1.0.0 10.28.2018 td:  6.500ms\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00'

这就是我被卡住的地方。我不知道该怎么解释这个。附件是数据表中的一张图像,它解释了输出应该代表什么。

数据表上写着“字节98到164中的字段是空的”。谁能告诉我需要做些什么才能将ser.read_until()的输出转换成一种“人类可读”的形式,并表示图像中的数据?我不需要有人为我写代码,但我甚至不确定从哪里开始。再说一次,这是我第一次这样做,所以我对发生的事情有点迷惑。

EN

Stack Overflow用户

发布于 2020-03-26 11:04:48

这不是一个答案,只是@ozangds的想法得到了充实(可能会省去你一些输入):

代码语言:javascript
运行
复制
def decode_bytes(data, start, stop):
    return data[start:stop+1].decode('ascii').rstrip('\x00')


device_read = b'M1830130A2IMU v3.2.9.1 26.04.19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0527641\x00\x00\x00IMHF R.1.0.0 10.28.2018 td:  6.500ms\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00'

ID_sn = decode_bytes(device_read, 0, 7)
ID_fw = decode_bytes(device_read, 8, 47)
Press_sens = device_read[48]
IMU_type = device_read[49]
IMU_sn = decode_bytes(device_read, 50, 57)
IMU_fw = decode_bytes(device_read, 58, 97)

label_fmt = '{:>10}: {!r}'
print(label_fmt.format('ID_sn', ID_sn))
print(label_fmt.format('ID_fw', ID_fw))
print(label_fmt.format('Press_sens', Press_sens))
print(label_fmt.format('IMU_type', IMU_type))
print(label_fmt.format('IMU_sn', IMU_sn))
print(label_fmt.format('IMU_fw', IMU_fw))

输出:

代码语言:javascript
运行
复制
     ID_sn: 'M1830130'
     ID_fw: 'A2IMU v3.2.9.1 26.04.19'
Press_sens: 2
  IMU_type: 5
    IMU_sn: '27641'
    IMU_fw: 'IMHF R.1.0.0 10.28.2018 td:  6.500ms'
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60823172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档