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

[Modbus] Modbus协议开发-基本概念(一)

历史

ModBus官网是Modicon(Modicon早年已被施耐德收购)公司为其PLC通讯而开发的一种通讯协议。

概述

通过Modbus协议,控制器之间、或控制器经由网络(如以太网)可以和其它设备之间进行通信。

优点

免费、好用、成熟、网络上支持资料多,开发上手容易。

通讯技术

Modbus协议使用的是主从通讯技术,即由主设备主动查询和操作从设备。一般将主控设备方所使用的协议称为Modbus Master,从设备方使用的协议称为Modbus Slave。典型的主设备包括工控机和工业控制器等;典型的从设备如PLC可编程控制器等。

Modbus协议说明

Modbus协议的工作方式

响应方式:主站请求/从站应答的方式。
主站:每次通讯均由主站发送指令,发送方式可以是广播,也可以是向特定从站的单播(PearToPear);
从站:每次通讯主要是响应主站指令,并按要求应答,或报告异常。当主站不发送请求时,从站不会自己发出数据,并且从站之间不能直接通讯。

Modbus协议的数据传输模式

传输模式:使用串口传输,RTU、ASCII或TCP模式。
消息定义:主要确认消息、数据结构、命令与应答方式,且需要对数据进行校验。
校验方式:RTU模式采用16位CRC校验,ASCII模式采用LRC校验。
传输方式:通过以太网传输数据时,一般使用TCP协议,因为TCP协议是一个面向连接的可靠协议,所以在该模式下不校验。

三种通讯模式(依据传输介质分类)

Modbus可使用串口和网口(含光纤)方式进行传输。
串口通讯:RTU、ASCII。串口通讯(Serial Communication),是指外设和计算机间,通过数据信号线、地线等,按位进行传输数据的一种通讯方式。
网口(含光纤):TCP属于网口(以太网通讯),通常是RJ45接口,即日常的网线作为承载物。

串口的样子

在这里插入图片描述
使用Modbus通信的所有设备都必须选择相同的传输模式和串口参数,否则通信无法成功。
好比A说印度语,B说汉语,两人很难交流成功。
常用的参数如下:

  1. 波特率:通讯速率
  2. 数据位:衡量通信中实际数据位
  3. 停止位:用于表示单个包的最后一位
  4. 校验位:通信中的验错方式。奇校验(ODD)、偶校验(EVEN),1校验(MARK) 、 0校验(SPACE),无校验(NONE)。

ModbusRTU

数据包的开始与结束

完整报文的识别:在ModbusRTU协议中,通过每次通信的时间间隔来判断一帧报文的开始和结束,协议规定的时间为3.5个字符周期。在一帧报文开始前,必须有大于3.5个字符周期的空闲时间,一帧报文结束后,也必须要有3.5个字符周期的空闲时间,否则就会出现粘包的请况。3.5个字符周期是一个具体时间,与波特率有关,开发时需要注意。
异常报文的识别:整个报文帧必须以连续的字符流发送。如果两个字符之间的空闲间隔大于 1.5 个字符时间,则报文帧被认为不完整应该被接收节点丢弃。
报文分割情况:
在这里插入图片描述

CRC循环冗余校验

在 RTU 模式包含一个对全部报文内容执行的,基于循环冗余校验 (CRC - Cyclical Redundancy Checking) 算法的错误检验域。CRC域检验整个报文的内容。不管报文有无奇偶校验,均执行此检验。CRC的值具体情况如下:
1)16位,由两个8字节组成;
2)在报文包的最后部分,字节由低到高;
3)由发送设备计算。接收设备在接收报文时需重新计算CRC的值,并将计算结果与实际接报文中的CRC值进行对比,如果两值不等,则被视为错误。

在串行链路中的报文格式

从站地址(1 byte)+功能码(1 byte)+数据区(N bytes)+校验码(2 bytes)
在这里插入图片描述

  1. 从站地址(子节点地址):1byte,索引功能
  2. 功能代码:1byte,标识读写功能
  3. 具体数据:1byte/N bytes通信所传输的数据
  4. CRC校验:2bytes,判断接收的数据在传输过程中是否有损失

读取输出/保持寄存器

在这里插入图片描述

ModbusTCP

报文帧

MBAP+PDU
在这里插入图片描述

MBAP

MBAP为报文头,长度为7字节
在这里插入图片描述

PDU

在这里插入图片描述

ModbusASCII

报文帧

在这里插入图片描述

数据包的开始与结束

并非依靠时间间隔判定帧的起始,而是依靠特定字符做数据包的起始判定,结束也是通过特定字符判定。从图中可知起始的判断是’:’字符,结束的判断是字符是windows系统下的回车换行。数据的最大长度被扩容到2*252的长度,相比rtu模式能传输相同的数据量,但ascii传输的速度更慢一些。

http://www.lryc.cn/news/418913.html

相关文章:

  • 爬虫代理的使用:提升爬虫效率
  • 【gcc】基于gpt和python的流程和延迟梯度分析
  • 前端CSS总结
  • Linux/C 高级——指针函数
  • GRU门控循环单元【数学+图解】
  • 代码随想录算法训练营第六十一天|Bellman_ford 队列优化算法(又名SPFA)、bellman_ford之判断负权回路
  • ArrayList集合源码解读(二)已完结
  • 光伏逆变器、MPPT、PCS储能变流器、BMU、BCU、BDU和液冷机组
  • OpenHarmony编译
  • C语言典型例题30
  • springMVC @RestControllerAdvice注解使用方式
  • HarmonyOS鸿蒙开发岗位面试中关于组件的问题总结
  • Unity 在Editor下保存对Text组件的文本的修改
  • mysql 日志爆满,删除日志文件,定时清理日志
  • MySQL学习(19):锁
  • 【出海日记】关于 KD ,数据工具的陷阱
  • 【k8s集群部署篇】在openEuler环境下部署多master高可用kubernetes集群详细教程(V1.30版本)
  • 数据结构:链表经典算法OJ题
  • 【线性代数】【二】2.2 极大线性无关组与向量空间的基
  • OD C卷 - CPU算力分配
  • matlab实现红绿灯识别
  • base64 转 pdf
  • vue2项目微信小程序的tabs切换效果
  • WPF动画的使用
  • 跑腿代购app系统源码开发及功能分析
  • mysql数据库:字符串函数
  • C语言实现游戏2048(超详细!!!超易懂!!!)
  • MATLAB代码检查工具PolySpace
  • FPGA设计之跨时钟域(CDC)设计篇(5)----同步FIFO的两种设计方法(计数器法/高位扩展法 | 手撕代码)
  • 快速掌握Vue:基础命令详解