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

Modbus学习笔记

一 .线圈

  1. 基本概念

线圈是一个bool值,通常表示0是关闭1是开启,也可以理解它是二进制状态(0 或 1)

在实际应用场景中,线圈可以对应某个物理设备的启动或停止开关

  1. 线圈地址
    线圈在Modbus通信中的地址编号通常从1开始,称为线圈地址

  2. 输入线圈和输出线圈的区别

输入线圈只能被读取,不能写入或修改
输出线圈既可以读取也可以写入

输入线圈通常用来获取设备的状态,例如获取一个按钮的当前状态(按下或未按下)、获取一个传感器的二进制输出状态(检测到物体或未检测到物体)

输出线圈通常用来控制设备的状态,例如给设备设置一个输出线圈,用来启动一个阀门或关闭阀门

二、寄存器

  1. 基本概念
    寄存器的数据类型是16 位无符号整数(2 字节),但可以组合多个寄存器来存储更大的数据类型,适合存储复杂数据

  2. 保持寄存器和输入寄存器的区别

数据存储与用途
保持寄存器: 存储可以被外部修改的数据,通常是设备控制和参数设定。例如,设置一个设备的工作频率或设定温度值。

输入寄存器: 存储传感器或内部状态数据,这些数据是只读的,通常表示测量值或当前设备的状态。

属性保持寄存器输入寄存器
访问权限可读可写只读
用途配置参数、控制命令、操作设定传感器数据、设备状态
地址范围40001–4999930001–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 校验码)。

  1. 功能码与数据交互
    Modbus 协议定义了一系列功能码,用于不同类型的数据交互:
    读操作: 主设备可以通过功能码读取从设备的各种寄存器和输入状态。例如,读取保持寄存器(功能码 03)或输入寄存器(功能码 04)。
    写操作: 主设备可以通过功能码向从设备写入数据,例如写入单个保持寄存器(功能码 06)或写多个寄存器(功能码 16)。

  2. 常见的寄存器类型
    Modbus 协议中定义了不同类型的寄存器,主设备通过这些寄存器与从设备通信:
    线圈(Coils): 1 位数据,表示开/关状态,常用于控制设备的开关操作(可读写)。
    离散输入(Discrete Inputs): 1 位数据,表示设备的输入状态,如按钮状态(只读)。
    保持寄存器(Holding Registers): 16 位数据,常用于存储设备的可读写参数或配置值。
    输入寄存器(Input Registers): 16 位数据,表示设备测量值或状态(只读)。

  3. Modbus 工作流程
    步骤 1: 主设备发起请求:主设备通过网络发送请求帧,指定从设备地址、功能码、寄存器地址以及要执行的操作(如读取寄存器、写入寄存器等)。
    步骤 2: 从设备响应请求:收到请求后,从设备执行主设备要求的操作,返回包含请求结果的响应帧。如果有错误(如无效的功能码或寄存器地址),从设备将返回错误码。
    步骤 3: 错误处理:主设备接收到响应后,检查是否有错误发生,并处理响应数据。如果有错误或没有收到响应,则可以重试或执行错误处理。

  4. Modbus 通信示例
    假设主设备希望读取从设备的温度值,存储在从设备的输入寄存器中:
    请求: 主设备发送一个请求帧,使用功能码 04(读取输入寄存器),指定要读取的寄存器地址(例如地址 0)。
    响应: 从设备返回一个响应帧,包含温度值的具体数据。

  5. Modbus TCP/IP 传输层
    在 Modbus TCP/IP 协议中,Modbus 消息被封装在 TCP/IP 包中,通过以太网进行传输。主要特点是:
    无需设备地址:因为通过 IP 地址标识目标设备,因此不需要传统的从设备地址。
    更高的速度和带宽:基于以太网的 TCP/IP 网络比传统的串行 Modbus RTU 提供更快的传输速度和更大的带宽。
    Modbus 整体结构图:

主设备(Master) ←→ TCP/IP网络 ←→ 从设备1(Slave) 
                                ←→ 从设备2(Slave)
                                ←→ 从设备3(Slave)

主设备通过网络向多个从设备发送请求,从设备根据功能码返回响应。

  1. Modbus 的应用场景
    Modbus 通常用于以下场景:

工业自动化中的设备监控与控制(例如,PLC 与传感器或执行器的通信)。
智能电网、能源管理系统中,读取电表数据或监控设备状态。
大型机械设备或工厂中的过程监控和控制。

最后总结所有功能码

类型操作功能码 (十六进制)功能码 (十进制)描述
输出线圈读取0x011读取输出线圈状态
输出线圈写入单个0x055写入单个输出线圈
输出线圈批量写入0x0F15批量写入多个输出线圈状态
输入线圈读取0x022读取输入线圈状态
输入线圈写入不允许写入不允许写入不允许直接写入
保持寄存器读取0x033读取保持寄存器
保持寄存器写入单个0x066写入单个保持寄存器
保持寄存器批量写入0x1016批量写入多个保持寄存器
输入寄存器读取0x044读取输入寄存器
原文地址:https://blog.csdn.net/weixin_42469135/article/details/142879804
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/348792.html

相关文章:

  • 电脑电源要如何检测?
  • 国内外顶级的产品经理,他们都具备哪些能力?
  • neo4j部署保姆级教程
  • 雷池社区版配置遇到问题不要慌,查看本文解决
  • 天通智能平板|智能移动终端|三防|单兵|平板|智能三防手持终端
  • 在vue3中实现祖组件给后代组件传参,可以跨域几层。
  • 游戏服务端架构演进
  • 文件完整性监控:如何提高企业的数据安全性
  • centos7 Oracle 11g rac 静默安装(NFS配置共享存储)
  • Django一分钟:DRF生成OpenAPI接口文档
  • 金融衍生品中的风险对冲策略分析
  • 气动紧急切断阀安装说明
  • linux下查询网卡光纤模块sn序列号
  • <Linux> 信号量
  • 15.C++程序中的指针
  • 吴恩达深度学习笔记(3)--深度学习的实际应用
  • C#配置文件怎么自动更新到运行目录下
  • 从0开始学Python-day5
  • python作业四
  • 【微服务】网关 - Gateway(下)(day8)