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

【嵌入式基础知识梳理#11】Modbus-RTU工业总线协议

一、协议的层级划分

        1. 硬件层协议,通常聚焦于解决电气和电平问题,用于解决0/1的可靠传输,通常有:

        (1)RS232

        (2)RS485总线 (串行差分、异步、半双工、主从由软件层决定)

        (3)CAN总线(串行差分、异步位同步、半双工、多主多从)

        (4)I2C总线(串行、同步、半双工、一主多从)

        (5)SPI总线(串行、同步、全双工、一主多从居多/具有多主多从模式)

        2. 软件层协议,解决实际应用场合的传输目的问题:

        (1)Modbus

        (2)CANopen

        (3)TCP/IP

        

        ModBus于1979年由莫迪康电气研发,后来被施耐德电气收购。Modbus提供脚本语言用于设备通讯。目前为止,Modbus就像汽车行业的CANopen,属于工业行业应用最广的协议。

        具体的七层协议上讲,Modbus属于应用层协议,定义了控制器能够认知和使用的消息结构,无论他们经过何种硬件网络通信。

        

二、Modbus的通信过程   

        (1)主从模式:无论何种硬件层协议,进入Modbus后强制一主多从

                   

        (2)忙机制判断:Modbus没有忙机制判断,需要进行其他软件仲裁

        (3)从机存储

        ModBus的从机存储区分为只读只写两种。

        存储的数据类型分为:布尔值/16为寄存器

        Modbus协议规定四个从机存储区,称为0 1 3 4区,03只读,14可读可写

区号名称读写地址范围
0区输出线圈可读可写布尔量00001-09999
1区输入触点只读布尔量10001-19999
3区输入寄存器只读寄存器30001-39999
4区保持寄存器可读可写寄存器40001-49999

        1. 输出线圈:通常以布尔值形式出现,用于电磁阀、灯光、继电器等的开关控制和回调

        2. 输入触点:通常以布尔值形式反馈,用于反馈外部设备的开关状态

        3. 输入寄存器:16位形式出现,表示以数字反馈某些状态

        4. 保持寄存器:16位形式出现,用数字形式实现控制和回调

        读写的方式为,数据起始地址+多少字节数据(+写入内容)

三、Modbus-RTU协议   

        Modbus-RTU是一种紧凑的,十六进制表示数据的方式。

        比如我们要发送66给从机,则总线上传输的数据为0x42

        在Modbus中,报文等价于数据帧。

        (1)Modbus报文

         Modbus的一个数据帧,也就是一个报文以以下形式出现。

从机地址功能码数据CRC/LRC
1 byte1 byteN bytes2 bytes

        1. 从机地址:每个从机都有一个字节的从机地址只有1-247能被识别,255意味广播

        2. 功能码:指示报文的具体功能

        3. 数据:由器件规定,比如要读取风压计的数据,则填入数据地址(子地址)和字节数

        4. 校验:CRC校验位

        (2)Modbus功能码

功能码功能说明
01H读取输出线圈
02H读取输入触点
03H读取保持寄存器
04H读取输入寄存器
05H写入单线圈
06H写入单保持寄存器
0FH写入多线圈
10H写入多保持寄存器

        其中,读取功能适用于线圈、触点、状态寄存器、保持寄存器

        而写入功能只适用于线圈和保持寄存器。

三、Modbus-RTU常用格式举例

        (1)主机读从机内容 

        主机发送报文:

从机地址功能码起始(高)起始(低)数量(高)数量(低)校验
0x010x030x000x010x000x010xD5 0xCA

          从机地址为0x01,功能吗0x03(查询寄存器信息),起始地址0x0001,数量读一个,还有CRC校验位,这个根据校验位之前的内容用工具算出来。

         从机发送报文:

从站地址功能码返回字节数寄存器内容(高)寄存器内容(低)校验
0x010x030x020x000x170xF8 0x4A

        从机功能码与主机保持一致,检验位由自动化设备负责。

        (2)主机写从机内容

        主机发送报文:

从站地址功能码数据地址(高)数据地址(低)数据(高)数据(低)校验
0x010x060x000x010x000x170x98 0x04

                功能吗0x06写入数据进寄存器,数据地址0x0001,写入数据高低位,校验码

        从机回复报文:

从站地址功能码数据地址(高)数据地址(低)数据(高)数据(低)校验
0x010x060x000x010x000x170x98 0x04

        主机写从机时,回复报文内容必须与发送内容一致,表示我接收到了。

总结

本章向大家分享了工控、运动控制领域常用的Modbus-RTU协议,如果想要实际上手在单片机上练习,建议买一些工控自动化设备与单片机进行通讯。

http://www.dtcms.com/a/336129.html

相关文章:

  • Spring IOC 学习笔记
  • Canny边缘检测
  • Python异步编程实战:爬虫案例
  • 【Python】-- 机器学习项目 - 基于KNN算法的鸢尾花分类
  • 【自动化运维神器Ansible】Playbook中的when条件判断:精细化控制任务执行
  • 【Linux系列】常见查看服务器 IP 的方法
  • Python 基本语法(二)
  • 数据结构初始知识
  • 利用标准IO实现寻找文件中字符出现最多次数
  • 问津集 #5:Crystal: A Unified Cache Storage System for Analytical Databases
  • 6-服务安全检测和防御技术
  • gitee SSH配置
  • 探索分子世界:结构、性质、反应与前沿进展
  • 编程算法实例-求一个整数的所有因数
  • 力扣 hot100 Day76
  • WPFC#超市管理系统(6)订单详情、顾客注册、商品销售排行查询和库存提示、LiveChat报表
  • 代码随想录刷题——字符串篇(四)
  • 深度学习之优化器
  • 自然语言处理NLP---预训练模型与 BERT
  • Python界面设计【QT-creator基础编程 - 01】如何让不同分辨率图像自动匹配graphicsView的窗口大小
  • Git 入门指南:核心概念与常用命令全解析
  • 「数据获取」《中国文化文物与旅游统计年鉴》(1996-2024)(获取方式看绑定的资源)
  • 链式前向星、vector存图
  • Kafka_Broker_副本基本信息
  • 【FreeRTOS】信号量与互斥量
  • LeetCode热题100--104. 二叉树的最大深度--简单
  • 给纯小白的Python操作 PDF 笔记
  • 【牛客刷题】BM63 跳台阶:三种解法深度解析(递归/DP动态规划/记忆化搜索)
  • Baumer高防护相机如何通过YoloV8深度学习模型实现工作设备状态的检测识别(C#代码UI界面版)
  • Shell脚本-流程控制语句基本语法结构