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

Modbus协议介绍

Modbus是一种串行通信协议,由Modicon公司(现为施耐德电气)在1979年为可编程逻辑控制器(PLC)通信而开发。它是工业自动化领域最常用的通信协议之一,具有开放性、简单性和跨平台兼容性,广泛应用于工业设备、楼宇自动化、电力系统等场景。 Modbus协议还遵循主从协议,支持单主机,多从机,最多支持247个从机设备。

一、Modbus协议基础特性

1. 物理层与传输模式

   物理接口:支持串口(RS-232、RS-485)和以太网(Modbus TCP)。  

   传输模式:  

       ASCII模式:消息以ASCII字符形式传输,每个字节包含两个ASCII字符(如`0x1F`表示为`31 46`),适合低速率通信。  

       RTU模式:消息以二进制形式传输,每个字节直接编码数据,效率更高,是最常用的模式。  

   以太网扩展**:Modbus TCP基于TCP/IP协议,使用502端口,简化了网络部署。

2. 通信方式

   主从架构:一个主设备(Master)发起通信,多个从设备(Slave)响应,从设备地址范围为1~247。  

   请求-响应机制:主设备发送请求,从设备根据请求返回数据或执行操作。从机不会主动进行数据的发送,从机之间也不会有通讯过程。

3. 数据模型  

    Modbus将设备数据抽象为四种基本寄存器类型:  

二、Modbus协议数据帧格式

1. RTU模式数据帧  

   帧结构:  

     [从机地址(1B)] [功能码(1B)] [数据(0~252B)] [CRC校验(2B)]  

  功能码(Function Code):标识操作类型,常见功能码:  

2.TCP模式数据帧

   在RTU帧基础上增加MBAP(Modbus Application Protocol)头:  

     [事务标识符(2B)] [协议标识符(2B,固定0)] [长度(2B)] [从机地址(1B)] [功能码(1B)] [数据(nB)]  

     事务标识符**:用于匹配请求和响应,由主设备生成。

三、Modbus通信流程示例

1. 主设备读取从设备温度值(HR寄存器)

   请求:  

     主→从:[从机地址=1] [功能码=03] [起始地址=0x0001] [寄存器数量=1]  

   响应:  

     从→主:[从机地址=1] [功能码=03] [字节数=2] [温度值=0x012C(300)]  

     解析:温度值为300,假设分辨率为0.1℃,则实际温度为30.0℃。

示例指令:

请求:01 01 00 00 00 0A BC 0D

含义:从机设备地址(01)+ 功能码(01)+ 起始寄存器完整地址(00 00)+ 线圈数量(00 0A)+ CRC16校验码(BC 0D)

解释:从地址为1的从机读取寄存器开始地址为1,连续读10个线圈。

应答:01 01 02 FF 03 B8 0D

含义:从机设备地址(01)+ 功能码(01)+ 数据字节数(02) + 读取到的数据内容(FF 03)+ CRC16校验码(B8 0D)

解释:从地址为1的从机中读取到两个字节的数据,读出的内容是FF 03。

2. 主设备控制从设备继电器(Coil)

   请求(闭合继电器):  

     主→从:[从机地址=2] [功能码=05] [线圈地址=0x0002] [值=0xFF00(ON)]   

   响应(成功):  

     从→主:[从机地址=2] [功能码=05] [线圈地址=0x0002] [值=0xFF00]  

     

四、Modbus协议优缺点

优点:

1. 简单易用:协议设计简洁,实现成本低,适合嵌入式系统。  

2. 开放性:无专利限制,免费使用,支持多种硬件平台。  

3. 跨平台兼容性:从单片机到工业PC均可实现,支持多种物理层。  

4. 广泛支持:几乎所有工业设备都提供Modbus接口(PLC、传感器、驱动器等)。  

缺点

1. 安全性弱:无加密机制,不适合安全敏感场景(需通过VPN等外部手段增强)。  

2. 单主架构限制:同一网络中只能有一个主设备,扩展性有限。  

3. 效率问题:每次通信需等待响应,不适合高并发场景。  

4. 数据量限制:单次请求最多传输253字节数据,大数据量需分批传输。  

五、Modbus协议变种与扩展

1. Modbus RTU/ASCII:基于串口的原始协议,使用CRC校验。  

2. Modbus TCP:基于以太网,使用MBAP头代替CRC校验,性能更高。  

3. Modbus PLUS:施耐德电气 proprietary 版本,支持多主架构,速率更高(1Mbps)。  

4. Modbus UDP:基于UDP协议,轻量但不可靠,适合实时性要求高的场景。  

5. Modbus over TLS:在TCP基础上增加TLS加密,提升安全性(如工业物联网场景)。  

六、Modbus应用场景

1. 工业自动化:PLC与传感器/执行器通信,如生产线监控、机器人控制。  

2. 楼宇自动化:HVAC系统、电梯控制、照明管理。  

3. 电力系统:电表数据采集、变电站监控、分布式能源管理。  

4. 智能交通:充电桩与电网通信、交通信号灯控制。  

5. 物联网(IoT):边缘设备与云端平台数据传输(通过网关转换协议)。  

七、Modbus实现注意事项

1. 错误处理:需处理超时、CRC校验失败、异常响应(功能码+0x80)等情况。  

2. 通信参数配置:主从设备波特率、奇偶校验、停止位必须一致。  

3. 网络拓扑:RS-485网络需注意终端电阻匹配、总线长度限制(通常≤1200米)。  

4. 性能优化:合理批量读取数据,减少请求次数;避免长耗时操作阻塞通信。  

、CRC16校验参考代码

//CRC校验

void CRC_Checkout_16(uint8_t *p_data,uint32_t data_len,uint8_t *data_crc) {

  uint16_t wcrc = 0xFFFF;

  uint8_t temp;

  uint32_t i=0,j=0;

  for(i=0;i<data_len;i++)

  {

    temp = *p_data & 0X00FF;

    p_data++;

    wcrc = wcrc^temp;

    for(j=0;j<8;j++)

    {

      if(wcrc & 0X0001)

      {

       wcrc>>=1;

        wcrc^=0XA001;

      }

      else

      {

        wcrc>>=1;

      }

     }

   }

  temp=wcrc;

  data_crc[0]=wcrc;

   data_crc[1]=wcrc>>8;

 return ;

  }

http://www.xdnf.cn/news/398863.html

相关文章:

  • springboot旅游小程序-计算机毕业设计源码76696
  • Unity ML-Agents实战指南:构建多技能游戏AI训练系统
  • 在Ubuntu系统下编译OpenCV 4.8源码
  • react-diff-viewer 如何实现语法高亮
  • 一小时学会Docker使用!
  • 树莓派4基于Debian GNU/Linux 12 (Bookworm)开启VNC,使用MobaXterm连接VNC出现黑屏/灰屏问题
  • 笔记本电脑升级实战手册【扩展篇1】:flash id查询硬盘颗粒
  • 十四、继承与组合(Inheritance Composition)
  • 【Linux网络编程】HTTPS协议原理
  • 杨校老师项目之基于SSM与JSP的鲜花销售系统-【成品设计含文档】
  • node版本.node版本、npm版本和pnpm版本对应
  • 深入理解目标检测中的关键指标及其计算方法
  • 深度 |国产操作系统“破茧而出”:鸿蒙电脑填补自主生态空白
  • WebRTC实时音视频通话技术EasyRTC嵌入式音视频通信SDK,助力智慧物流打造实时高效的物流管理体系
  • Linux服务器管理面板新选择:mdserver-web深度解析与使用指南
  • 容器化-Docker-私有仓库Harbor
  • 【Web前端开发】CSS基础
  • 69、微服务保姆教程(十二)容器化与云原生
  • python打卡day22
  • MySQL 8.0安装(压缩包方式)
  • QMK键盘固件中LED锁定指示灯的配置与使用详解(实操部分+拓展)
  • 如何让rabbitmq保存服务断开重连?保证高可用?
  • 付费专栏·Python潮流周刊电子书合集(epub、pdf、markdown)下载
  • 基于微信小程序的城市特色旅游推荐应用的设计与实现
  • DVWA靶场保姆级通关教程--07SQL注入下
  • 机器学习第七讲:概率统计 → 预测可能性,下雨概率70%就是典型应用
  • 药物抓取准确率97.3%!YOLO-EASB+IAFFGA-Net:如何让智能药房机器人靠视觉算法征服杂乱场景?
  • 搭建大数据学习的平台
  • 服务网格的“解剖学” - 控制平面与数据平面
  • 支付宝API-SKD-GO版