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

news/2024/11/7 18:14:32/

调试代码

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)

运行结果:

E:\software\python\python.exe E:/projects/Forklift/Server/t1.py223422Process finished with exit code 0

解析

Client

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

c='01 10 00 57 00 02 04 42 03 68 00'

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

a='00 23 00 00 00 05 01 03 02 00 64 '

网络调试助手:

[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:

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。

代码

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

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)

运行结果

"D:\Program Files (x86)\Python310\python310.exe" E:/文档/Projects/Pycharm/forklift/data_address.py
Register Address: 005f
Data: 4110a000Process finished with exit code 0

这个函数会先找到 “0110” 的索引,然后根据索引位置提取寄存器地址和数据。
地址部分占用 4 个字符,数据部分从索引位置的第 10 个字符开始直到字符串的结束。


http://www.ppmy.cn/news/917854.html

相关文章

提高Djang查询速度的9种方法

引言 在Web应用程序中,数据库查询是一个关键的环节。优化数据库查询可以显著提高应用程序的性能和响应速度。Django作为一个高度可扩展的Web框架,提供了多种方式来优化数据库查询。本文将介绍一些常用的Django数据库查询优化技巧,从入门到精…

win10家庭版使用局域网文件分享

之前使用了一下功能,有几个地方需要注意一下。 1,需要分享的文件夹或者文件,需要右键设置共享性。 2,目标机器需要设置 网络和共享中心-更改高级共享设置来开启网络发现。 3,在控制面板-凭据管理器添加windows凭据&…

win10如何打开网上邻居

直接上一个简单有效的办法把 win R 命令里输入如下: explorer.exe ::{208D2C60-3AEA-1069-A2D7-08002B30309D} 就进去了

解决winxp网上邻居共享问题的方法有

解决winxp网上邻居共享问题的方法有: (1)安装NWlink IPX/SPX/NetBIOS Compatible Transport Protocol协议。 (2)开启guest账号:右击我的电脑/管理/用户有个guest,双击之去掉“账户已停用”前面的勾。 (3…

为什么计算机共享查看不了,为什么在网上邻居里看不到其他共享的电脑,

2004-10-19 我和楼上的同事共同用一根电话线上网(adsl),都能正常浏览网页,也能互相用ping拼通对方的IP地址,但就是不能在网上邻居里看到对方的电脑(只能看到自己的电脑,工作组设置是一样的),请高手指导. 能看到自己计算机,看不到网上邻居的问题 既然在网上邻居中能够看到自己的…

搜索邻近计算机打印机,WIN技巧:好事的“网上邻居” -电脑资料

“网上邻居”是局域网中文件共享和传输的重要工具,它有一些非常智能的功能, 1、擦除共享痕迹 凭借“网上邻居”的自动记忆功能,它会自作主张地将最近进行的共享访问连接保存下来,并自动显示在“网上居”窗口中,显然其他…

网上邻居

一、网上邻居的工作原理 网上邻居用的是NetBIOS,在Win95 OSR2(版本号4.00.950B)之前的Windows需要安装用于NetBIOS的NetBEUI协议,之后的绝大部分,只要安装TCP/IP协议就可以了,因为此时TCP/IP已经有自己的Ne…

网上邻居的资料共享

为什么要使用共享? 通常,我们把要供别人看的资料上传到网络。但是,也是有的情况,我们是不必要把资料上传到网络的 情况一:假如你的资料只需要在局域网内这些用户观看就可以了,而没有必要上传到网络。 情况…