[英]How to decode HEX and ASCII data in python?
import serial
from time import sleep
t = serial.Serial(
"/dev/serial0", 19200, parity=serial.PARITY_EVEN,
stopbits=serial.STOPBITES_ONE, timeout=0.5
)
cw = [0x01, 0x03, 0x00, 0x00, 0x03, 0x05, 0xCB]
t.write(serial.to_bytes(cw))
rx = t.read()
sleep(0.03)
data = t.inWaiting()
rx += t.read(rx)
print(rx)
這是我正在使用的代碼, rx
的 output 是b'\x01\x03\x06\x00\x07\x01,\x00\x00T\x80'
。
解碼格式為 01 03 06 + 電壓高字節 + 電壓低字節 + 電流高字節 + 電流低字節 + 狀態高 + 低 + crc + 奇偶校驗。
如何解碼電壓和電流? 我認為它是十六進制和ASCII格式。
根據使用的上下文,有幾種方法可以做到這一點。有 Python結構庫和from_bytes int
class 方法。
數據采用小端格式,因為高字節在低字節之前。 我還假設這些值可以簽名。
如何執行此操作的示例:
>>> rx = b'\x01\x03\x06\x00\x07\x01,\x00\x00T\x80'
>>> import struct
>>> voltage, current = struct.unpack('<3xhh4x', rx)
>>> print(voltage)
1792
>>> print(current)
11265
>>> voltage2 = int.from_bytes(rx[3:5], 'little', signed=True)
>>> current2 = int.from_bytes(rx[5:7], 'little', signed=True)
>>> print(voltage2)
1792
>>> print(current2)
11265
查看這些值,如果您期望大約 18 伏,這些值可能需要將小數點移動幾位。 例如
>>> voltage * 10**-2
17.92
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.