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

调试代码

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.mzph.cn/news/4887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker操作

Docker操作 Docker基本操作 # 删除 docker 容器 docker rm 关键字(名字、容器ID) # 删除docker所有容器 docker ps -a -q | xargs docker rm docker rm -f $(docker ps -qa) # 删除 docker镜像 docker rmi 关键字(名字、容器ID&#xff…

内核态、用户态概念

一、MTU MTU概念 MTU(Maximum Transmission Unit,最大传输单元)是指在网络中传输的数据包的最大长度限制,它是一个重要的网络参数,影响着网络的可靠性、稳定性和性能。在TCP/IP协议栈中,MTU涉及到内核态和…

Pthreads程序实现任务队列

主线程启动用户指定数量的线程,这些线程进入条件等待状态。 主线程生成一些任务(一定计算量),每生成一个新的任务,就用条件变量唤醒一个线程,当这个唤醒线程执行完任务时,回到条件等待状态。 当…

ThreeJS打造自己的人物

hello,大家好,我是better,今天为大家分享如何使用Three打造属于自己的3D人物模型。 人物建模 当下有很多人物建模的网站,这里给大家分享的 Ready Player Me - Create a Full-Body 3D Avatar From a Photo 前往这个网址&#xff…

C#List转IList方法

最近工作中使用到了C#的List和IList。 这里参考百度上的资料&#xff0c;总结一下。 IList使用命名空间&#xff1a; using System.Collections; List<T>类:表示可通过索引访问的对象的强类型列表&#xff0c;提供用于对列表进行搜索、排序和操作的方法。 IList<T&…

​​Layui之用户管理实例(对数据的增删改查)

目录 ​编辑一、R工具介绍&#xff08;&#xff09; ​编辑二、数据表的增删改查 ​编辑2.1我们先得从查询数据库的语句入手 2.2优化dao类 2.4UserAction类 2.5前台的页面实现增删改查操作 2.6 userManage页面JS 2.7user新增、修改iframe层js 前言 上一篇我分享了…

试玩python的web框架 flask、fastapi、tornado、django

文章目录 一、Flask入门案例 [官网](https://flask.net.cn/quickstart.html) [其它参考](https://zhuanlan.zhihu.com/p/104273184?utm_id0)二、FastAPI入门案例 [官网](https://fastapi.tiangolo.com/zh/) [w3cschool教程](https://www.w3cschool.cn/fastapi/fastapi-feature…

无涯教程-Javascript - 运算符

让无涯教程用一个简单的表达式 4 59 。这里的4和5称为操作数&#xff0c;" "称为运算符&#xff0c;JavaScript支持以下类型的运算符。 算术运算符比较运算符逻辑运算符赋值运算符三元)运算符 算术运算符 JavaScript支持以下算术运算符&#xff0c;假设变量A10&a…

[RocketMQ] Broker CommitLogDispatcher 异步构建ConsumeQueue和IndexFile源码解析 (十四)

CommitLogDispatcherBuildConsumeQueue: 异步构建ConsumerQueue。CommitLogDispatcherBuildIndex: 异步构建IndexFile。 文章目录 1.CommitLogDispatcherBuildConsumeQueue构建ConsumeQueue1.1 putMessagePositionInfo写入消息位置信息1.2 findConsumeQueue查找ConsumeQueue1.2…

go初识iris框架(二) - get,post请求和数据格式

继初步了解iris后 文章目录 获取url路径获取数据get请求post请求获取JSON数据格式JSON返回值获取XML数据格式XML返回值 获取url路径 package mainimport "github.com/kataras/iris/v12"func main(){app : iris.New()app.Get("/hello",func(ctx iris.Conte…

部分安卓端ncnn模型推理输出数据存在大量-nan和nan的问题

原文issue链接&#xff1a;部分安卓端ncnn模型推理输出数据存在大量-nan的问题 Issue #3607 Tencent/ncnn (github.com) 问题描述 onnx、ncnn模型在pc端推理输出结果正确且基本一致&#xff0c;在部分安卓设备上使用同一模型和输入的推理输出数据正常&#xff0c;另一部分安…

Redis报错-CROSSSLOT keys in request don‘t hash in the same slot

背景 问题涉及&#xff1a;spring security、spring session、redis 问题描述 springbootspringsecurityspringsessionantd 登录功能的时候&#xff0c;在源码中使用到了redis的rename命令&#xff08;如下图所示&#xff09; 在这里就会报错 CROSSSLOT keys in request d…

基于小波哈尔法(WHM)的一维非线性IVP测试问题的求解(Matlab代码实现)

&#x1f4a5;1 概述 小波哈尔法&#xff08;WHM&#xff09;是一种求解一维非线性初值问题&#xff08;IVP&#xff09;的数值方法。它基于小波分析的思想&#xff0c;通过将原始问题转化为小波空间中的线性问题&#xff0c;然后进行求解。以下是一维非线性IVP测试问题的求解…

MacOS 便笺Stickies数据恢复

在MacOS上&#xff0c;如果便笺数据丢了&#xff1a; 1、可以去时间机器备份的以下目录寻找&#xff0c;之前所有的便笺&#xff0c;都以rtfd文件的形式存在这下面。 最新备份/用户/Frank(这里是你的用户名)/Library/Containers/com.apple.Stickies/Data/Library/Stickies 2…

守护数智未来,开源网安受邀参加2023OWASP北京论坛

2023年7月14日&#xff0c;OWASP中国与网安加社区联合举办的“2023OWASP中国北京安全技术论坛”在北京圆满召开&#xff0c;开源网安受邀参加本次论坛并分享“软件供应链安全治理实践”。 本次“2023OWASP中国北京安全技术论坛”是OWASP中国北京地区年度重要活动之一&#xff…

【Hive实战】Hive的事务表

Hive Transactions 在升级到Hive 3之前&#xff0c;需要把在事务表上Major Compaction。主要是为了合并掉增量文件。更准确地说&#xff0c;自上次Major Compaction以来在其上执行过任何更新/删除/合并语句的任何分区都必须进行另一次Major Compaction。在 Hive 升级到 Hive 3 …

Vue+axios 使用CancelToken多次发送请求取消前面所有正在pendding的请求

需求&#xff1a; 项目中 折线图数据是循环调用的&#xff0c;此时勾选一个设备&#xff0c; 会出现多条线。 原因 折线图数据一进来接口循环在调用&#xff0c;勾选设备时&#xff0c;循环调用的接口有的处于pedding状态 &#xff0c;有的还在加载中&#xff0c;这就导致勾…

【PDFBox】PDFBox操作PDF文档之读取指定页面文本内容、读取所有页面文本内容、根据模板文件生成PDF文档

这篇文章&#xff0c;主要介绍PDFBox操作PDF文档之读取指定页面文本内容、读取所有页面文本内容、根据模板文件生成PDF文档。 目录 一、PDFBox操作文本 1.1、读取所有页面文本内容 1.2、读取指定页面文本内容 1.3、写入文本内容 1.4、替换文本内容 &#xff08;1&#xf…

如何在 Endless OS 上安装 ONLYOFFICE 桌面编辑器

ONLYOFFICE 桌面编辑器是一款基于依据 AGPL v.3 许可进行分发的开源办公套件。使用这款应用&#xff0c;您无需保持网络连接状态即可处理存储在计算机上的文档。本指南会向您介绍&#xff0c;如何在 Endless OS 上安装 ONLYOFFICE 桌面编辑器。 ONLYOFFICE 桌面版是什么 ONLYO…

Spring Boot进阶(55):SpringBoot之集成MongoDB及实战使用 | 超级详细,建议收藏

1. 前言&#x1f525; 前几期我们有介绍Mysql、Redis等数据库介绍及实战演示&#xff0c;对基本的数据存放有很好的共性&#xff0c;但是如果说遇到大面积的xml、Json、bson等格式文档数据存放&#xff0c;以上数据库并非是最优选择&#xff0c;最优选择是Mongodb数据库。 那么…