Modbus学习笔记

2023-10-27

Modbus通信协议

1.Modbus简介——来自维基百科
Modbus是一种串行通信协议,是Modicon于1979年,为使用可编程逻辑控制器(PLC)而发表的。Modbus是工业领域通信协议的业界标准,并且现在是工业电子设备之间相当常用的连接方式。Modbus比其他通信协议使用的更广泛的主要原因有:

  • 【1】公开发表并且无版税要求
  • 【2】相对容易的工业网络部署
  • 【3】对供应商来说,修改移动原生的位元或字节没有很多限制

Modbus官网:http://www.modbus.org

  1. PDU(协议数据单元)包括功能码和数据
  2. ADU(应用数据单元)包括地址域、功能码、数据、差错校验

术语:

  • Master: 主设备
  • Slave: 从设备
  • Client: 客户端
  • Server: 服务器端
  • ADU: 应用数据单元
  • PDU: 协议数据单元
  • MSB: 最高有效位
  • LSB: 最低有效位
  • MBAP: Modbus应用协议
  • PLC: 可编程逻辑控制器

一、Modbus开发环境:

  1. Modbus Poll
    下载地址:http://www.modbustools.com/
    Modbus主站设备仿真器,可以用于测试和调试Modbus从站设备,便于观察Modbus通信过程中的各种报文数据。
    该软件支持Modbus RTU、ASCII、TCP/IP等协议模式。
  2. Modbus Slave:
    下载地址:http://www.modbustools.com/
    用来模拟Modbus从设备的工具。它用于接收主设备的命令包,并回送数据包;可用于测试和调试Modbus主站设备,便于
    观察Modbus通信过程中的各种报文数据。
  3. Visual Serial Port Driver
    下载地址:http://www.eltima.com/
  4. Mthings
  5. Visual Studio 2019

二、Modbus协议概要:

Modbus协议是一种单主/多从的通信协议,其特点是在同一时间,总线上只能有一个主设备,但可以有一个或者多个(最多247个)从设备。

Modbus通信总是由主设备发起,当从设备没有收到来自主设备的请求时,不会主动发送数据。

从设备之间不能相互通信,主设备同时只能启动一个Modbus访问事务处理。

三、Modbus通信模式:

    1. 单播模式
    1. 广播模式

四、Modbus寄存器

四种寄存器:

  1. 线圈状态(Coil Status)
  2. 离散输入状态(Input Status)
  3. 保持寄存器(Holding Register)
  4. 输入寄存器(Input Register)
    在这里插入图片描述

五、Modbus功能码

分为两类:位操作和字操作。
位操作的最小单位为一位(bit),字操作的最小单位为两个字节。
在这里插入图片描述

  • 位操作指令:

    • 读线圈状态功能码 01
    • 读(离散)输入状态功能码 02
    • 写单个线圈功能码 05
    • 写多个线圈功能码 15
  • 字操作指令:

    • 读保持寄存器功能码 03
    • 读输入寄存器功能码 04
    • 写单个保持寄存器功能码 06
    • 写多个保持寄存器功能码 16

1. 读取线圈/离散量输出状态(0x01x) 位操作

该功能码用于读取从设备的线圈或离散量输出的状态,即各DO(Discrete Output)的ON/OFF状态。

发送报文
Tx:000-01 01 00 13 00 25 0C 14
从设备地址(01)+功能码(01)+起始地址(0013)+寄存器数(0025)+差错校验(0C 14)

接收报文:
Rx:001-01 01 05 53 6B 01 F4 1B 5E 71
从设备地址(01)+功能码(01)+数据域字节数(05)+数据(53 6B 01 F4 1B)+差错校验(5E 71)

2. 读取离散量输入值(0x02) 位操作

该功能码用于读取从设备的离散输入即DI(Discrete Input)的ON/OFF状态。

发送报文
Tx:008-03 02 00 64 00 14 38 38
从设备地址(03)+功能码(02)+起始地址(00 64)+寄存器数(00 14)+差错校验(38 38)

接收报文
Rx:009-03 02 03 13 E7 06 43 9B
从设备地址(03)+功能码(02)+数据域字节数(03)+数据(13 E7 06)+差错校验(43 9B)

注意一个寄存器代表一位 寄存器数为0x14,数据为3个字节

3. 读取保持寄存器值(0x03) 字操作

该功能码用于读取从设备保持寄存器的内容,不支持广播模式。

发送报文
Tx:020-03 03 00 C8 00 03 85 D7
从设备地址(03)+功能码(03)+起始地址(00 C8)+寄存器数(00 03)+差错校验(85 D7)

接收报文
Rx:021-03 03 06 03 53 01 F3 01 05 8C 76
从设备地址(03)+功能码(03)+数据域字节数(06)+数据(53 01 F3 01 05 8C)+差错校验(8C 76)

4. 读取输入寄存器值(0x04) 字操作

该功能码用于读取从设备输入寄存器的内容,不支持广播模式。

发送报文:
Tx:000-07 04 01 2C 00 03 70 58
从设备地址(07)+功能码(04)+起始地址(01 2C)+寄存器数(00 03)+差错校验(85 D7)

接收报文:
Rx:001-07 04 06 03 53 01 F3 01 05 FF 50
从设备地址(07)+功能码(04)+数据域字节数(06)+数据(03 53 01 F3 01 05)+差错校验(FF 50)

5. 写单个线圈或单个离散输出(0x05) 位操作

本功能码用于将单个线圈寄存器(或离散输入)设置为ON或OFF,该功能码支持广播模式,在广播模式下,所有从站设备的同一地址的值将被统一修改。

0xFF00表示ON状态,0x0000标识0FF状态

发送报文:
Tx:368-07 05 00 95 FF 00 9C 70
从设备地址(07)+功能码(05)+起始地址(00 95)+变更数据(FF00)+差错校验(9C 70)

接收报文:
Rx:369-07 05 00 95 FF 00 9C 70
从设备地址(07)+功能码(05)+起始地址(00 95)+变更数据(FF00)+差错校验(9C 70)

6. 写单个保持寄存器(0x06) 字操作

本功能码用于更新从设备的单个保持寄存器的值。该功能码支持广播模式,在广播模式下,所有从设备的同一地址的值将被统一修改。

发送报文:
Tx:387-03 06 00 95 04 B0 9B 70
从设备地址(03)+功能码(06)+起始地址(00 95)+变更数据(04 B0)+差错校验(9B 70)

接收报文:
Rx:388-03 06 00 95 04 B0 9B 70
从设备地址(03)+功能码(06)+起始地址(00 95)+变更数据(04 B0)+差错校验(9B 70)

8. 诊断功能(0x08)

该功能码仅用于串行链路,主要用于检测主设备和从设备之间的通信故障或检测从设备的各种内部故障,该功能码不支持广播。为了区别各诊断类型,查询报文中提供了2个字节的子功能码字段。
通常,在正常的响应报文中,从设备将原样回复功能码和子功能码。

未测试

9. 获取通信事件计数器(0x0B)

该功能码主要用于获取从设备通信计数器中的状态字和事件计数的值,本功能不支持广播模式。通过在通信报文之前和之后读取通信事件计数值,可以确定从设备是否正常处理报文。

未测试

10. 获取通信事件记录(0x0C)

该功能码主要用于从从设备获取状态字、事件计数、报文计数以及事件字节字段。

11. 写多个线圈(0x0F) 位操作

该功能码用于将连续的多个线圈或离散输出设置位ON/OFF状态,支持广播模式,在广播模式下,所有从站设备的同一地址的值将被统一修改。

本功能码中,起始地址字段由2各字节构成,取值范围为0x0000-0xFFFF;而寄存器数量字段由2个字节构成,取值范围为0x0001-0x07B0。

示例:从站设备为5,需要设置线圈地址20-30的状态:

1 1 0 1 0 0 0 1 0 0 0 0 0 1 0 1
线圈 27 26 25 24 23 22 21 20 30 29 28

写入数据从20-30,分为两个字节,0xD1(27-20),0x05(30-28)
Modbus起始地址比线圈起始地址20少1,也就是19,所以发送的报文如下:

发送报文:
Tx:458-05 0F 00 13 00 0B 02 D1 05 48 F4
从设备地址(05)+功能码(0F)+起始地址(00 13)+寄存器数(00 0B)+字节数(02)+变更数据(D1 05)+差错校验(9B 70)

响应报文:
Rx:459-05 0F 00 13 00 0B E4 4D
从设备地址(05)+功能码(0F)+起始地址(00 13)+寄存器数(00 0B)+差错校验(E4 4D)

12. 写多个保持寄存器(0x10) 字操作

该功能码用于设置或写入从设备保持寄存器的多个连续的地址块(1-123个寄存器),支持广播模式,在广播模式下,所有从站设备的同一地址的值将被统一修改。

本功能码中,起始地址字段由2各字节构成,取值范围为0x0000-0xFFFF;而寄存器数量字段由2个字节构成,取值范围为0x0001-0x07B0。

示例:从站设备地址为5,需要将保持寄存器地址40020-40022设置为如下表所示的数值:

寄存器地址 设定值 寄存器地址 设定值
40020 0x0155 40022 0x0157
40021 0x0156

Modbus起始地址为19(0x13),比寄存器起始地址少1

发送报文:
Tx:462-05 10 00 13 00 03 06 01 55 01 56 01 57 B5 C1
从设备地址(05)+功能码(10)+起始地址(00 13)+寄存器数(00 03)+字节数(06)+变更数据(01 55 01 56 01 57)+差错校验(B5 C1)

响应报文:
Rx:463-05 10 00 13 00 03 70 49
从设备地址(05)+功能码(10)+起始地址(00 13)+寄存器数(00 03)+差错校验(70 49)

13. 报告从站ID(仅用于串行链路)

该功能码用于读取从站设备的ID、类型描述、当前状态及其他信息,不支持广播模式。

六、Modbus开发库(C#):

  1. NModbus
  2. EasyModbusTCP
  3. pymodbus
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Modbus学习笔记 的相关文章

  • 国产开源新标杆!20B大模型,性能媲美Llama2-70B,单卡可推理

    明敏 发自 凹非寺量子位 公众号 QbitAI 国产新标杆 免费可商用的200亿参数大模型 来了 书生 浦语大模型 InternLM 20B版本正式发布 一举刷新国内新一代大模型开源纪录 它由上海人工智能实验室 上海AI实验室 与商汤科技联
  • MySQL入门---超详细安装及基本使用教程

    数据库技术和数据库系统 数据库技术和数据库系统已经成为计算机信息系统的核心技术和重要基础 gt gt MySQL简介 MySQL是一款单进程多线程 支持多用户 基于客户机 服务器 Client Server C S 的关系数据库管理系统 是
  • 怎么使用blender

    Blender是一款开源3D建模和动画软件 可以用来制作三维图像 动画 游戏 音频和视频 要使用Blender 需要先下载并安装该软件 安装完成后 打开Blender 您会看到一个3D空间 包含一个默认的立方体 可以通过鼠标和键盘来对立方体

随机推荐

  • strdup函数的用法

    函数名 strdup 功 能 将串拷贝到新建的位置处 用 法 char strdup char str 这个函数在linux的man手册里解释为 The strdup function returns a pointer toa new s
  • 推荐系统实战5——EasyRec 在DSSM召回模型中添加负采样构建CTR点击平台

    推荐系统实战5 EasyRec 在DSSM召回模型中添加负采样构建CTR点击平台 学习前言 EasyRec仓库地址 DSSM实现思路 一 DSSM整体结构解析 二 网络结构解析 1 Embedding层的构建 2 网络层的构建 3 相似度计
  • 【毕业设计】深度学习验证码识别算法研究与实现 - python 机器视觉

    文章目录 0 简介 1 数据收集 2 识别过程 3 网络构建 4 数据读取 5 模型训练 6 加入Dropout层 7 数据增强 8 迁移学习 9 结果 9 最后 0 简介 Hi 大家好 这里是丹成学长的毕设系列文章 对毕设有任何疑问都可以
  • 测试老鸟总结,性能测试需求分析-性能必要性,一篇打通...

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • java中Optional使用方法

    Optional是Java 8中提供的一个容器类 用来装载可能为空的引用 在使用Optional时 不需要检查null 可以避免NullPointerException 1 创建Optional实例 Optional可以通过工厂方法of o
  • Linux下PostgreSQL主备环境搭建和切换

    1 概念 数据库热备 数据库热备是指为主数据库的创建 维护和监控一个或多个备用数据库 它们时刻处于开机状态 同主机保持同步 当主机失灵时 可以随时启用热备数据库来代替 以保护数据不受故障 灾难 错误和崩溃的影响 流复制 streaming
  • ubuntu基于docker搭建hadoop集群【史上最详细】

    1 安装docker ubuntu 18 04安装 docker 2 拉取 ubuntu镜像 如果不指定版本号的话 默认拉取最新的ubuntu版本 docker pull ubuntu 3 创建容器 1 查看已拉取的镜像 docker im
  • 统信UOS桌面操作系统安装教程

    配置推荐 CPU 频率 2GHz 及更高的处理器 内存 推荐配置 4GB 以上 最低配置 2GB 硬盘 至少 64GB 的空闲硬盘 https www uniontech com next product desktop system ed
  • Linux系统:安装python3

    目录 一 python函数输出 1 print 函数输出 二 实验 1 安装python3 一 python函数输出 1 print 函数输出 1 概念 在Python中 使用内置的print 函数可以将结果输出到IDLE或者标准控制台上
  • 人工智能-知识图谱的进阶一

    第一部分 概论 本文主要分为三个部分 第一个部分介绍我们为什么需要知识图谱 第二个部分介绍知识图谱的相关概念及其形式化表示 最后 作一个简单的总结 并介绍该专栏后续文章会涉及的内容 一 看到的不仅仅是字符串 当你看见下面这一串文本你会联想到
  • config:fail,invalid signature

    微信开发调用JS SDK某些页面报config fail invalid signature 注意 是某些页面才会报这个错误 导致 wx config 失败 百思不得解 看了几遍文档 确认url是页面完整的url 请在当前页面alert l
  • ffprobe查看多媒体流音视频详情

    ffprobe查看多媒体流音视频详情 ffprobe是一个简单的多媒体流解析器 可以查看多媒体流音视频详情 1 ffprobe简介 ffprobe从多媒体流中收集信息 并以人机可读的方式进行打印 例如 它可以用来检查多媒体流使用的容器的格式
  • JavaScript实现简单文本编辑功能

    核心属性 方法 contentEditable html属性 用来设置 或 返回元素的内容是否可以被编辑 语法 p p HTMLElementObject contentEditable true false HTMLElementObje
  • MybatisPlus-条件查询方式及多条件构建查询(亲测)

    一 条件查询方式 取消Spring日志打印 取消SpringBoot和MyBatisPlus的log打印 二 多条件构建查询 格式一 常规格式 格式二 链式编程格式 格式三 lambda格式 推荐 格式四 lambda格式 推荐 并且 an
  • Android Jetpack介绍

    1 文档背景 本文是Jetpack介绍系列文档的开篇 是对Jetpack整体的介绍 后续会对其中的各个组件分别单独说明 2 官方简介 Jetpack 是一套库 工具和指南 可帮助开发者更轻松地编写优质应用 使用这些组件 可帮助开发者遵循最佳
  • Java学习(超详细)一

    目录 1 初识Java 1 1 Java简介 1 1 1 什么是程序 1 1 2 Java的产生 1 1 3 Java技术平台 1 1 4 生活中的程序 1 1 5 计算机中的程序 1 1 6 为什么学习Java 1 2 Java环境JDK
  • 使用NDIS驱动监测以太网络活动

    转载自 http blog csdn net ddtpower article details 656687 本论文提供了NDIS的基本的理解 应用程序如何与驱动程序交互 发挥驱动程序最佳性能 本论文也说明了使用例子驱动 PACKET SY
  • Windos 安装子系统

    前言 参考文章 https blog csdn net moshowgame article details 109039727 WIN10的所有非精简版的系统 都已经内置Linux内核 可以直接打开一个PC应用一样使用Ubuntu子系统
  • 第68步 时间序列建模实战:ARIMA建模(Matlab)

    基于WIN10的64位系统演示 一 写在前面 这一期 我们使用Matlab进行SARIMA模型的构建 不同样 这里使用另一个数据 采用 PLoS One 2015年一篇题目为 Comparison of Two Hybrid Models
  • Modbus学习笔记

    Modbus通信协议 1 Modbus简介 来自维基百科 Modbus是一种串行通信协议 是Modicon于1979年 为使用可编程逻辑控制器 PLC 而发表的 Modbus是工业领域通信协议的业界标准 并且现在是工业电子设备之间相当常用的