Modbus学习笔记
一 .线圈
- 基本概念
线圈是一个bool值,通常表示0是关闭1是开启,也可以理解它是二进制状态(0 或 1)
在实际应用场景中,线圈可以对应某个物理设备的启动或停止开关
-
线圈地址
线圈在Modbus通信中的地址编号通常从1开始,称为线圈地址 -
输入线圈和输出线圈的区别
输入线圈只能被读取,不能写入或修改
输出线圈既可以读取也可以写入
输入线圈通常用来获取设备的状态,例如获取一个按钮的当前状态(按下或未按下)、获取一个传感器的二进制输出状态(检测到物体或未检测到物体)
输出线圈通常用来控制设备的状态,例如给设备设置一个输出线圈,用来启动一个阀门或关闭阀门
二、寄存器
-
基本概念
寄存器的数据类型是16 位无符号整数(2 字节),但可以组合多个寄存器来存储更大的数据类型,适合存储复杂数据 -
保持寄存器和输入寄存器的区别
数据存储与用途
保持寄存器: 存储可以被外部修改的数据,通常是设备控制和参数设定。例如,设置一个设备的工作频率或设定温度值。
输入寄存器: 存储传感器或内部状态数据,这些数据是只读的,通常表示测量值或当前设备的状态。
属性 | 保持寄存器 | 输入寄存器 |
---|---|---|
访问权限 | 可读可写 | 只读 |
用途 | 配置参数、控制命令、操作设定 | 传感器数据、设备状态 |
地址范围 | 40001–49999 | 30001–39999 |
数据类型 | 16 位无符号整数(可组合成更大类型) | 16 位无符号整数(可组合成更大类型) |
典型应用 | 设置设备参数(如设定点、控制命令) | 获取设备状态或传感器测量值 |
应用场景示例:
- 保持寄存器: 一个泵系统的控制设备中,您可以通过保持寄存器修改泵的流量设定值或电机的速度设定。
- 输入寄存器: 一个温度传感器设备中,您可以通过输入寄存器读取当前的温度读数。
三、modbus整体工作原理
Modbus 是一种广泛应用的通信协议,通常用于工业自动化系统中设备之间的数据传输。它采用主从架构,支持多种物理接口(如 Modbus TCP/IP、Modbus RTU 和 Modbus ASCII),其中 Modbus TCP/IP 是基于以太网的变种。
Modbus 协议的核心工作原理包括以下几个方面:
-
主从架构
主设备(Master): 主设备是发起通信的实体,负责向从设备发送请求,指示读取或写入数据。主设备控制所有的通信活动。
从设备(Slave): 从设备是响应主设备请求的实体,通常是传感器、执行器或控制器。从设备不主动发起通信,只在收到请求后做出回应。
在一个网络中,通常只有一个主设备和多个从设备。 -
数据通信
请求-响应模型: 主设备发送请求,从设备在接收到请求后根据要求执行相应操作,并返回响应。整个通信过程依赖于这个请求-响应机制。
唯一标识: 每个从设备都有一个唯一的地址编号,主设备通过该编号发送指令到具体的从设备。
数据帧: 通信通过数据帧进行传输,数据帧包含地址、功能码、数据和错误校验码。 -
数据帧结构
Modbus 的数据帧格式由以下部分组成:
从设备地址: 表示要通信的从设备的唯一标识。
功能码: 指示主设备希望从设备执行的操作,例如读取寄存器或写入寄存器。常见功能码包括: -
01 读取线圈状态
-
02 读取离散输入
-
03 读取保持寄存器
-
04 读取输入寄存器
-
05 写单个线圈
-
06 写单个保持寄存器
数据域: 包含具体的操作数据。例如,若请求读取多个寄存器,数据域中将包含要读取的起始寄存器地址及寄存器数量。
错误校验码: 用于确保数据帧在传输过程中没有错误(如 CRC 校验码)。
-
功能码与数据交互
Modbus 协议定义了一系列功能码,用于不同类型的数据交互:
读操作: 主设备可以通过功能码读取从设备的各种寄存器和输入状态。例如,读取保持寄存器(功能码 03)或输入寄存器(功能码 04)。
写操作: 主设备可以通过功能码向从设备写入数据,例如写入单个保持寄存器(功能码 06)或写多个寄存器(功能码 16)。 -
常见的寄存器类型
Modbus 协议中定义了不同类型的寄存器,主设备通过这些寄存器与从设备通信:
线圈(Coils): 1 位数据,表示开/关状态,常用于控制设备的开关操作(可读写)。
离散输入(Discrete Inputs): 1 位数据,表示设备的输入状态,如按钮状态(只读)。
保持寄存器(Holding Registers): 16 位数据,常用于存储设备的可读写参数或配置值。
输入寄存器(Input Registers): 16 位数据,表示设备测量值或状态(只读)。 -
Modbus 工作流程
步骤 1: 主设备发起请求:主设备通过网络发送请求帧,指定从设备地址、功能码、寄存器地址以及要执行的操作(如读取寄存器、写入寄存器等)。
步骤 2: 从设备响应请求:收到请求后,从设备执行主设备要求的操作,返回包含请求结果的响应帧。如果有错误(如无效的功能码或寄存器地址),从设备将返回错误码。
步骤 3: 错误处理:主设备接收到响应后,检查是否有错误发生,并处理响应数据。如果有错误或没有收到响应,则可以重试或执行错误处理。 -
Modbus 通信示例
假设主设备希望读取从设备的温度值,存储在从设备的输入寄存器中:
请求: 主设备发送一个请求帧,使用功能码 04(读取输入寄存器),指定要读取的寄存器地址(例如地址 0)。
响应: 从设备返回一个响应帧,包含温度值的具体数据。 -
Modbus TCP/IP 传输层
在 Modbus TCP/IP 协议中,Modbus 消息被封装在 TCP/IP 包中,通过以太网进行传输。主要特点是:
无需设备地址:因为通过 IP 地址标识目标设备,因此不需要传统的从设备地址。
更高的速度和带宽:基于以太网的 TCP/IP 网络比传统的串行 Modbus RTU 提供更快的传输速度和更大的带宽。
Modbus 整体结构图:
主设备(Master) ←→ TCP/IP网络 ←→ 从设备1(Slave)
←→ 从设备2(Slave)
←→ 从设备3(Slave)
主设备通过网络向多个从设备发送请求,从设备根据功能码返回响应。
- Modbus 的应用场景
Modbus 通常用于以下场景:
工业自动化中的设备监控与控制(例如,PLC 与传感器或执行器的通信)。
智能电网、能源管理系统中,读取电表数据或监控设备状态。
大型机械设备或工厂中的过程监控和控制。
最后总结所有功能码
类型 | 操作 | 功能码 (十六进制) | 功能码 (十进制) | 描述 |
---|---|---|---|---|
输出线圈 | 读取 | 0x01 | 1 | 读取输出线圈状态 |
输出线圈 | 写入单个 | 0x05 | 5 | 写入单个输出线圈 |
输出线圈 | 批量写入 | 0x0F | 15 | 批量写入多个输出线圈状态 |
输入线圈 | 读取 | 0x02 | 2 | 读取输入线圈状态 |
输入线圈 | 写入 | 不允许写入 | 不允许写入 | 不允许直接写入 |
保持寄存器 | 读取 | 0x03 | 3 | 读取保持寄存器 |
保持寄存器 | 写入单个 | 0x06 | 6 | 写入单个保持寄存器 |
保持寄存器 | 批量写入 | 0x10 | 16 | 批量写入多个保持寄存器 |
输入寄存器 | 读取 | 0x04 | 4 | 读取输入寄存器 |
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/348792.html 如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!