Modbus-TCP数据问询解析-小记

调试代码

py 复制代码
a='00 23 00 00 00 05 01 03 02 00 64 '
a=a.replace(" ","")
a=len(a)
print(a)

b='3d650000000b011000570002044203a800'
print(len(b))

c='01 10 00 57 00 02 04 42 03 68 00'
c=c.replace(" ","")
c=len(c)
print(c)

运行结果:

py 复制代码
E:\software\python\python.exe E:/projects/Forklift/Server/t1.py

22

34

22

 

Process finished with exit code 0

解析

Client

这是使用网络调试助手,采用Modbus-TCP的方式,主动读取寄存器地址的问询指令:

py 复制代码
c='01 10 00 57 00 02 04 42 03 68 00'

这是主动问询得到的回复,其中程序充当Client,PLC一体机充当Server:

py 复制代码
a='00 23 00 00 00 05 01 03 02 00 64 '

网络调试助手:

py 复制代码
[2023-07-17 14:37:57.526]# SEND HEX>

00 3F 00 00 00 06 01 03 00 45 00 01


[2023-07-17 14:37:57.731]# RECV HEX>

00 3F 00 00 00 05 01 03 02 00 00

Server

这是被动接受得到的数据,其中程序充当Server,PLC一体机充当Server:

py 复制代码
b='3d650000000b011000570002044203a800'

结论

b='3d650000000b011000570002044203a800'

①前面6个字节是报文格式,不需要解析,即从"0110"开始解析

②0110 :其中01是从设备ID号;10是功能号,表示写多个寄存器

③0057 :表示寄存器地址

④0002 :表示寄存器的数量为2

⑤04:表示占用4个字节

⑥4203a800:寄存器的数据内容,这里需要转成单精度浮点型,用来表示电流、电压等信息

函数

需求:

数据解析:hex_data: 559f0000000b0110005f0002044110a000,

将数据解析后得到以下结果:

005f0002044110a000,其中005f为寄存器地址,

0002表示占用2个寄存器,

04表示占用4个字节,

剩下的4110a000表示数据,

设计一个函数,根据输入信息,得到寄存器地址、寄存器数据。

注意,有时候占用的寄存器数量是1,相应占用的字节数为2。

代码

根据要求进行修正的代码:

python 复制代码
def parse_hex_data(hex_data):
    start_index = hex_data.index("0110") + 4  # 获取数据起始位置

    register_address = hex_data[start_index:start_index+4]
    data = hex_data[start_index+10:]

    return register_address, data


# 示例用法
hex_data = "559f0000000b0110005f0002044110a000"
register_address, data = parse_hex_data(hex_data)

print("Register Address:", register_address)
print("Data:", data)

运行结果

py 复制代码
"D:\Program Files (x86)\Python310\python310.exe" E:/文档/Projects/Pycharm/forklift/data_address.py
Register Address: 005f
Data: 4110a000

Process finished with exit code 0

这个函数会先找到 "0110" 的索引,然后根据索引位置提取寄存器地址和数据。

地址部分占用 4 个字符,数据部分从索引位置的第 10 个字符开始直到字符串的结束。

相关推荐
宿州派大星35 分钟前
Python实战:PyQt5 + OpenCV + Dlib 打造AI桌面应用
人工智能·python·qt
碧海银沙音频科技研究院2 小时前
炬芯ATS3089X手表的HFP通话不自动路由到设备BT的问题解决
网络·人工智能·嵌入式硬件·算法
承渊政道2 小时前
【从零开始大模型开发与微调:基于PyTorch与ChatGLM】(开源大模型ChatGLM高级定制化应用实战)
人工智能·pytorch·python·llm·模型微调·glm
EasyDSS6 小时前
连锁扩张管控难?一套视频会议/直播/点播/集群对讲EasyDSS音视频云平台打通门店全流程数字化
网络·音视频·easydss
比兔代理8 小时前
游戏、直播、远程办公遇到动态IP怎么办?
网络
Lzg_na8 小时前
ARP 地址解析协议详解
网络·网络协议
Smoothcloud润云8 小时前
PyTorch大模型权重加载与启动耗时优化实战:定位磁盘、内存与显存瓶颈
人工智能·pytorch·python·深度学习·gpu算力
databook8 小时前
从循环到向量化:NumPy提速的7个关键思维
python·数据分析·numpy
北京盛世宏博9 小时前
通信异常深度排查:以太网温湿度设备 TCP 粘包、UDP 丢包根治方案
单片机·网络协议·tcp/ip·udp·以太网·传感器·温湿度
上海广测检测科技有限公司9 小时前
消费类智能联网设备安全分级国标征求意见要点解析:三级五维框架与跨境对标逻辑
网络·经验分享