创客出手

目录

Modbus协议详解

Modbus是一种串行通信协议,它采用了主从架构的网络结构。在70年代,Modicon公司为了连接自己生产的可编程逻辑控制器(PLC),开发出了这一通信协议,即Modbus协议。随后该协议得到广泛应用,现已成为工业标准通信协议之一。

Modbus协议定义了串行通信中物理层和数据链路层的标准。在物理层,Modbus支持多种硬件接口,如RS-232、RS-485、RS-422、Ethernet等。这使得Modbus可以在不同的通信介质上进行数据传输。在数据链路层,Modbus定义了报文的格式以及通信过程。支持两种数据格式,一种是RTU格式,另一种是ASCII格式。

Modbus网络采用单主机多从站的结构。通信总线上只能有一个主站设备,可以有多达247个从站设备。主站可以向从站提出请求,从站负责处理请求并返回响应数据。这样就实现了主站与从站之间的通信。主站也可以广播消息给所有从站。

Modbus广泛应用于工业环境,特别是在工业自动化系统中,大量的智能装置使用Modbus进行连接和通信。这些设备包括PLC、传感器、人机界面等。相比其他通信协议,Modbus更加简单高效,也更加稳定可靠,已经成为工业控制系统不可或缺的通信标准。

Modbus协议

Modbus RTU

Modbus RTU格式用于串行通信,是Modbus中最常见的实现格式。Modbus RTU使用紧凑的二进制表示来传输协议数据。RTU格式在命令/数据之后使用循环冗余校验(CRC)来进行错误检查,以确保数据的可靠性。Modbus RTU报文必须连续传输,在字符间不能有暂停。Modbus报文由空闲(无信号)期间进行划分和分隔。

启始位 地址码 功能码 数据区 CRC校验 结束位
暂停>=28bit 8bit 8bit N*8bit 16bit 暂停>=28bit

Modbus ASCII

Modbus ASCII格式用于串行通信,它使用ASCII字符进行协议通信。ASCII格式使用纵向冗余校验(LRC)来进行错误检查。Modbus ASCII报文以开始符冒号(":")开头,以换行符(CR/LF)结尾进行划分。Modbus ASCII格式一般用于系统调试。

启始位 地址码 功能码 数据区 LRC校验 结束位
: 2字节 2字节 N字节 2字节 CR,LF

Modbus TCP/IP

Modbus TCP/IP是Modbus协议栈中面向TCP/IP网络通信的实现。Modbus TCP/IP把Modbus的ADU报文封装在TCP报文段内进行传输。而TCP/IP提供可靠的端到端连接,以及路由功能。因此Modbus TCP/IP能够实现跨网络的Modbus通信。Modbus TCP/IP连接由客户端通过指定服务器的IP地址和端口号建立。常用的端口号是502。连接建立后,客户端可以根据Modbus功能码发送请求,服务器返回响应数据。

事务ID 协议ID 长度 单位ID 功能码 数据区
2字节 2字节 2字节 1字节 1字节 n字节

工作模式

  • 主站查询 – 在Modbus网络中,只有主站设备有查询其他设备的权限。主站可以向从站发送查询请求,请求读取或写入数据。查询请求包含目标从站地址、功能码、数据地址等信息。这就是主站查询操作。
  • 从站响应 – 当从站收到主站的查询请求后,需要执行相应操作,并向主站返回响应。响应包含相同的地址、功能码字段,以及请求的数据或执行状态。这就是从站响应操作。
  • 广播 – 主站可以通过设置地址为0来实现广播通信,即向所有从站发送报文。从站不需要对广播报文进行响应。广播用于主站批量指令控制。

功能代码

Modbus协议定义了丰富的功能代码,用来表示不同的通信服务类型。各功能代码的定义如下:

功能代码 16进制 功能码 类型
FC01 0x01 读取从站线圈状态 单比特访问
FC02 0x02 读取从站输入端状态 单比特访问
FC05 0x05 写入从站线圈状态 单比特访问
FC15 0x15 批量写入从站线圈状态 单比特访问
FC03 0x03 读取从站保持寄存器内容 双字节访问
FC04 0x04 读取从站输入寄存器内容 双字节访问
FC06 0x06 写入从站寄存器数据 双字节访问
FC16 0x10 批量写入从站寄存器数据 双字节访问
FC22 0x16 读写多个寄存器:组合读取和写入多个从站寄存器数据 双字节访问
FC23 0x17 组合读取和写入从站线圈状态 双字节访问
FC24 0x18 读FIFO队列:读取从站FIFO队列中的数据 双字节访问
FC20 0x14 读存储器和输入寄存器的内容到文件 文件访问
FC21 0x15 写存储器或输出寄存器的内容从文件 文件访问
FC08 0x08 用于检查从站通信情况 诊断
FC11 0x0B 获取Modbus另外统计信息 诊断
FC12 0x0C 获取从站伺服参数:读取从站的伺服电机参数配置 诊断
FC17 0x11 获取从站的设备标识信息 诊断

以上这些功能代码覆盖了Modbus通信的各种服务类型,实现了工业设备的远程监控和控制。

解释各种寄存器

线圈状态(Coil Status)

线圈状态寄存器表示设备或过程的开关状态,通常对应于继电器的输出。一个线圈状态寄存器可以表示一个开关量。读线圈状态可以获得开关状态,写线圈状态可以改变开关状态。

输入端状态(Input Status)

输入端状态寄存器对应设备或过程的开关量输入信号状态。可以理解为开关量输入。读输入状态用来获取二进制输入的状态。

保持寄存器(Holding Registers)

保持寄存器用于保存设备的参数、配置等数值信息。和线圈状态不同,保持寄存器存储的是16位的数值。读取保持寄存器可以获得参数数值,写入可以修改参数。

输入寄存器(Input Registers)

输入寄存器对应设备或过程的模拟量输入,也是16位数据。读取输入寄存器可以获得过程变量、模拟量输入接口的实时值。

比较保持寄存器(Holding Registers)和输入寄存器(Input Registers)

保持寄存器和输入寄存器的区别:

1、数据属性不同

保持寄存器中的数据通常是可配置可修改的,例如设备参数、控制设定值等。它可以被主站写入修改。

而输入寄存器中的数据通常是只读的,用于传输实时测量或监控数据,主站无法修改。

2、数据流向不同

保持寄存器主要用于主站向从站传输控制设定值。数据流向是从主站到从站。

输入寄存器主要用于从站上传监测数据至主站。数据流向是从从站到主站。

3、数据特点不同

保持寄存器中的数据可配置可变,偶尔改变。输入寄存器的数据通常是连续变化的实时数据。

4、应用场景不同

保持寄存器多用于参数配置,输入寄存器多用于过程监控。

数据结构

Modbus中的数据结构分为两部分:

PDU(Protocol Data Unit) 数据单元

PDU是Modbus报文中包含实际功能码及数据的部分。PDU包含功能码字段和数据字段:

  • 功能码字段:用于表示执行的动作,1字节。
  • 数据字段:extendable Max. 252 bytes。变量长度,包含数据地址,数量等参数。

ADU(Application Data Unit) 应用数据单元

ADU是完整的Modbus报文框架,在PDU的基础上,增加了地址域、错误检查等内容:

  • 地址域:包含从站地址,1字节。
  • PDU:功能码及数据。
  • CRC校验:RTU格式为2字节CRC,ASCII格式为LRC。
  • 帧头尾:ASCII格式有开始符和结束符。

通过PDU和ADU的组合,可以灵活表示不同的请求/响应报文。这种数据结构非常适合串行通信和主从模式,也是Modbus协议的一大特点。
file

常见应用

随着工业控制网络的发展,Modbus协议得到了越来越广泛的应用,主要体现在以下几个方面:

  1. 工业现场总线通信
    工业现场中的传感器、执行器、PLC、HMI等通过Modbus通信总线连接,构成现场级联通信。

  2. 工业自动化监控
    通过Modbus可实现对工业过程的远程监视与控制,构建自动化系统。

  3. 智能仪表仪表通信
    将智能电表、气表等通过Modbus与主站连接,实现数据采集。

  4. 物联网应用
    在物联网系统中,将各种传感器用Modbus连接,上传数据到云平台。

  5. 智能建筑系统
    建筑管理系统通过Modbus采集设备运行状态,实现智能控制。

  6. 新能源及微电网
    光伏、风电等新能源接入和微电网的监控管理。

综上所述,Modbus作为一种成熟稳定的工业通信协议,其应用领域非常广泛。随着工业互联网的快速发展,Modbus协议也将进一步推动工业系统的智能化。

更多关于 , 的文章
关注创客出手公众号

关注创客出手