当前位置: 首页 > news >正文

Modbus TCP通信笔记

目录

  • 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.lryc.cn/news/153712.html

相关文章:

  • CIM和websockt-实现实时消息通信:双人聊天和消息列表展示
  • useLayoutEffect和useEffect有什么作用?
  • django中配置使用websocket终极解决方案
  • 敦煌网、Jumia等跨境电商平台怎么测评(补单)留评?
  • uni-app之android离线打包
  • 【传输层】TCP -- 三次握手四次挥手 | 可靠性与提高性能策略
  • 前端将UTC时间格式转化为本地时间格式~~uniapp写法
  • 说说Kappa架构
  • 项目介绍:《Online ChatRoom》网页聊天室 — Spring Boot、MyBatis、MySQL和WebSocket的奇妙融合
  • Vue3 学习 组合式API setup语法糖 响应式 指令 DIFF(一)
  • 一文轻松入门DeepSort
  • 关于linux openssl的自签证书认证与nginx配置
  • Mybatis--关联关系映射
  • Golang基本的网络编程
  • Postgresql的一个bug_涉及归档和pg_wal
  • 轻量、便捷、高效—经纬恒润AETP助力车载以太网测试
  • 【跟小嘉学 Rust 编程】二十四、内联汇编(inline assembly)
  • 综合实训-------成绩管理系统 V1.1
  • 13.108.Spark 优化、Spark优化与hive的区别、SparkSQL启动参数调优、四川任务优化实践:执行效率提升50%以上
  • 大模型综述论文笔记6-15
  • 树的介绍(C语言版)
  • Android studio实现圆形进度条
  • 基于Halcon的喷码识别方法
  • 【Sword系列】Vulnhub靶机HACKADEMIC: RTB1 writeup
  • idea使用maven时的java.lang.IllegalArgumentException: Malformed \uxxxx encoding问题解决
  • linux深入理解多进程间通信
  • 使用自定义注解+aop实现公共字段的填充
  • Unity 安卓(Android)端AVProVideo插件播放不了视频,屏幕一闪一闪的
  • 无涯教程-JavaScript - DMIN函数
  • GaussDB数据库SQL系列-层次递归查询