Modbus TCP通信笔记

news2024/11/20 6:20:27

目录

  • 1 Modbus TCP 数据协议
    • 1.1 数据格式
    • 1.2 报文头(MBAP头)
    • 1.3 功能码
    • 1.4 Modbus 地址映射到 CPU 地址
  • 2 Modbus TCP 通讯数据示例
    • 2.1 功能码01 读离散输出线圈
    • 2.2 功能码02 读离散输入线圈
    • 2.3 功能码03 读保持寄存器
    • 2.4 功能码04 读输入寄存器
    • 2.5 功能码05 写单个离散输出寄存器
    • 2.6 功能码06 写单个保持寄存器
    • 2.7 功能码15 写多个线圈寄存器
    • 2.8 功能码16 写多个保持寄存器
  • 3 西门子200Samrt 做服务器端编程示例
    • 3.1 调用库指令
    • 3.2 编程
  • 4 Modbus TCP通讯调试软件测试
    • 4.1 软件介绍
    • 4.2 软件使用说明
      • 4.2.1 连接PLC
      • 4.2.2 访问PLC
      • 4.2.3 其它说明

1 Modbus TCP 数据协议

1.1 数据格式

事务处理标识协议标识长度单元标识功能码起始地址数据
2字节2字节2字节1字节1字节2字节N字节

1.2 报文头(MBAP头)

其中,事务处理标识、协议标识符、长度和单元标识符统称为报文头(MBAP头)。

内容解释
事务处理标识可以理解为报文序列号,一般每次通信后就要加1,以区分不同的通信数据报文。
协议标识符00 00 表示Modbus TCP 协议
长度接下来数据长度,单位字节
单元标识符设备地址,一般为01

1.3 功能码

功能码描述说明MOUBUS地址
01读离散输出寄存器位操作00001 ~ 09999
02读离散输入寄存器位操作10001 ~ 19999
03读保持寄存器字操作40001 ~ 49999
04读输入寄存器字操作30001 ~ 39999
05写离散输出寄存器位操作00001 ~ 09999
06写保持寄存器字操作40001 ~ 49999
15写多线圈寄存器位操作00001 ~ 09999
16写多个保持寄存器字操作40001 ~ 49999

1.4 Modbus 地址映射到 CPU 地址

Modbus 地址CPU 地址
00001Q0.0
00002Q0.1
…………
10001I0.0
10002I0.1
…………
30001AIW0
30002AIW2
…………
40001Vx(保持寄存器起始地址)例:VW0
40002Vx+2 =(保持寄存器起始地址+2)例:VW2
…………

2 Modbus TCP 通讯数据示例

2.1 功能码01 读离散输出线圈

事务处理标识协议标识长度单元标识功能码起始地址数据长度
00 1100 0000 06010100 0000 08

注释:读取Q0.0地址开始的8个连续输出(即Q0.0-Q0.7)。

2.2 功能码02 读离散输入线圈

事务处理标识协议标识长度单元标识功能码起始地址数据长度
00 1500 0000 06010200 0000 08

注释:读取I0.0地址开始的8个连续输出(即I0.0-I0.7)。

2.3 功能码03 读保持寄存器

事务处理标识协议标识长度单元标识功能码起始地址数据长度
00 6600 0000 06010300 0000 02

注释:读取VW0地址开始的2个连续字空间(即vw0,vw2)。

2.4 功能码04 读输入寄存器

事务处理标识协议标识长度单元标识功能码起始地址数据长度
00 9700 0000 06010400 0000 02

注释:读取AIW0地址开始的2个连续字空间(即AIW0,AIW2)。

2.5 功能码05 写单个离散输出寄存器

事务处理标识协议标识长度单元标识功能码起始地址数据
00 C200 0000 06010500 00FF 00

注释:将地址00000的输出离散线圈置一(即让Q0.0置一)。

事务处理标识协议标识长度单元标识功能码起始地址数据
01 0A00 0000 06010500 0100 00

注释:将地址00001的输出离散线圈置一(即让Q0.1复位)。

2.6 功能码06 写单个保持寄存器

事务处理标识协议标识长度单元标识功能码起始地址数据
01 5e00 0000 06010600 0200 7b

注释:往地址VW4寄存器中写入数值0x007B(即十进制数123)。

2.7 功能码15 写多个线圈寄存器

事务处理标识协议标识长度单元标识功能码起始地址数据长度(位)字节数数据
01 5e00 0000 09010F00 0000 1002aa cb

注释:往地址QB0寄存器中写入数值0xaa,往地址QB1寄存器中写入数值0xcb。

数据长度位不满8的N倍,字节数也算N个。

2.8 功能码16 写多个保持寄存器

事务处理标识协议标识长度单元标识功能码起始地址数据长度(字)字节数数据
02 6800 0000 0B011000 0000 020400 7B 00 EA

注释:往地址VW0寄存器中写入数值0x007B,往地址VW2寄存器中写入数值0x00EA。

3 西门子200Samrt 做服务器端编程示例

3.1 调用库指令

在这里插入图片描述

3.2 编程

具体操作数值详见F1帮助文档。
在这里插入图片描述

4 Modbus TCP通讯调试软件测试

4.1 软件介绍

软件名称为:Modbus Poll
网络搜索自行下载,破解。
在这里插入图片描述
在这里插入图片描述

4.2 软件使用说明

4.2.1 连接PLC

依次点击ConnectionConnect…→弹出界面
按图指引自行修改,单击OK按钮。
在这里插入图片描述

4.2.2 访问PLC

单击图示指引图标
在这里插入图片描述
弹出界面,按需修改(图示以写单个保持寄存器为例),单击OK按钮。
在这里插入图片描述

双击数值处表格,在弹出的对话框中修改数值即可。
在这里插入图片描述

4.2.3 其它说明

软件在使用功能码05时,无法通过双击表格修改数据,只能设置为功能码01,然后通过双击表格修改数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/961779.html

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

相关文章

DevOps理念:开发与运维的融合

在现代软件开发领域,DevOps 不仅仅是一个流行的词汇,更是一种文化、一种哲学和一种方法论。DevOps 的核心理念是通过开发和运维之间的紧密合作,实现快速交付、高质量和持续创新。本文将深入探讨 DevOps 文化的重要性、原则以及如何在团队中实…

用Rust打印hello world!

步骤1 桌面新建1个名为 rustDemo 的文件夹(文件夹名字随便取) 步骤2 打开新建的文件夹,在地址输入栏输入 cmd 按回车键进入命令行窗口 步骤3 打开编译器,按 Ctrl S,保存文件到 rustDemo 文件夹中,保存的…

C++算法 —— 分治(1)快排

文章目录 1、颜色分类2、排序数组3、第k个最大的元素(快速选择)4、最小的k个数(快速选择) 分治,就是分而治之,把大问题划分成多个小问题,小问题再划分成更小的问题。像快排和归并排序就是分治思…

Linux网络编程 网络基础知识

目录 1.网络的历史和协议的分成 2.网络互联促成了TCP/IP协议的产生 3.网络的体系结构 4.TCP/IP协议族体系 5.网络各层的协议解释 6.网络的封包和拆包 7.网络预备知识 1.网络的历史和协议的分成 Internet-"冷战"的产物 1957年十月和十一月,前苏…

centOS下载与安装

1 下载centOS镜像 The CentOS Project 选择阿里云的镜像 2 下载虚拟机 Vmware workstation VMware - Delivering a Digital Foundation For Businesses 1 下载安装 centOs是一个操作系统,操作硬件的。所以需要有机器,可以使用虚拟机。 2 创建新的虚…

org.mockito:mockito-core 组件安全漏洞及健康度分析

组件简介 维护者mockito组织许可证类型MIT首次发布2008 年 4 月 29 日最新发布时间2023 年 8 月 27 日GitHub Star14159GitHub Fork2478依赖包24,748依赖存储库145,258 org.mockito:mockito-core是一个流行的 Java 模拟框架,它提供了一个简洁的 API 来创建和使用模拟…

【笔记】常用 js 函数

数组去重 Array.from(new Set()) 对象合并 Object.assign . 这里有个细节:当两个对象中含有key相同value不同时,会以 后面对象的key:value为准 保留小数点后几位 toFixed 注意: Number型,用该方法处理完,会…

Windows右键添加用 VSCODE 打开

1.安装VSCODE时 安装时会有个选项来添加,如下: ①将“通过code 打开“操作添加到windows资源管理器文件上下文菜单 ②将“通过code 打开”操作添加到windows资源管理器目录上下文菜单 说明:①②勾选上,可以对文件,目…

O2OA(翱途)开发平台 V8.1正式发布

尊敬的O2OA(翱途)平台合作伙伴、用户以及亲爱的开发小伙伴们,平台 V8.1版本已正式发布。正值8月的最后一周,我们以更安全、更高效、更好用的崭新面貌迎接9月的到来。 O2OA开发平台v8.1版本更注重于对系统级别的安全防护。其中重大的更新,是对…

Re44:数据集 GSM8K 和 论文 Training Verifiers to Solve Math Word Problems

诸神缄默不语-个人CSDN博文目录 论文全名:Training Verifiers to Solve Math Word Problems GSM8K数据集原始论文 OpenAI 2021年的工作,关注解决MWP问题(具体场景是小学(grade school)数学题)&#xff0c…

Java设计模式:四、行为型模式-09:模板模式

文章目录 一、定义:模板模式二、模拟场景:模板模式三、改善代码:模板模式3.0 引入依赖3.1 工程结构3.2 模板模式结构图3.3 爬取商品生成海报实现3.3.1 HTTP获取连接类3.3.2 定义执行顺序的抽象类3.3.3 当当爬取抽象实现类3.3.4 京东爬取抽象实…

java八股文面试[多线程]——synchronized锁升级详细流程

偏向锁 偏向锁是JDK6中的重要引进,因为HotSpot作者经过研究实践发现,在大多数情况下,锁不仅不存在多线程竞争,而且总是由同一线程多次获得,为了让线程获得锁的代价更低,引进了偏向锁。 偏向锁是在单线程执…

python3.11教程1:python基础语法、程序控制、函数

文章目录 一、Python简介1.1 为什么学习python1.2 python安装与配置1.3 python解释器1.4 命令行参数1.4.1 sys.argv变量1.4.2 -c和-m选项 1.5 解释器的运行环境1.5.1 编码格式1.5.2 编码声明 二、Python基础语法2.1 行结构2.2 变量(标识符)2.3 字节串2.4…

如何让照片动起来?几步操作轻松动起来

现在,许多人都喜欢在社交媒体上分享自己的照片。但是,有时单张静态照片可能无法完全表达出你想要表达的感觉。为了使你的照片更生动有趣,你可以使用一些简单的技巧使它们动起来。下面是几个简单的步骤。 步骤1:打开制作应用并导入…

图像融合去雾、近红外去雾、(近)红外和可见光数据集

今天给大家分享一篇发表在IEEE TMM上的去雾文章Joint Contrast Enhancement and Exposure Fusion for Real-World Image Dehazing 作者从对比度增强和曝光融合的视角来解决图像去雾问题,在真实场景上取得了较好的去雾效果。此外,作者将所提出的方法应用…

Json解析流程

一、拿到了题库 分析一下可以定义的 1、序号,用来区分题目数,每个题有唯一的序号 2、题目,就是下图的Q 3、预设的回答,下图的A 分析完我可以知道有三个字段,分别是int index、string Q、string A。 二、把字段丢到…

MongoDB 会丢数据吗? 在次补刀MongoDB 双机热备

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis ,Oracle ,Oceanbase 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请加微信号 liuaustin3 (…

git 查看当前分支最近一次提交的commit SHA

获取当前分支最近一次commit SHA (长度为40个16进制数字的字符)命令如下: git rev-parse HEAD 获取简写(短) commit SHA git rev-parse --short HEAD

灾备中的网络加密是什么?

什么是网络加密? 在网络设计之初,对网络安全的问题考虑的不周全,数据在链路上传输的时候都是明文传输的,稍微有点技术的人,都可以轻松的拿到网络上的数据流量,并进行查看。试想一下,如果我们为…

Revit SDK 介绍:DistanceToPanels 根据距离设置参数

前言 这个例子展示如何计算距离,并将距离的值设置为参数。 内容 选中球形,运行程序,会设置控制高度的参数,距离越远参数值越大。效果如下所示: 核心逻辑: 得到选中物体的位置遍历分割表面内部的 Panel…