当前位置: 首页 > 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传输的速度更慢一些。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 迭代次数顺序的双重性
  • leetCode- - - 链表
  • 工业设备数据采集方案的设计实施与应用-天拓四方
  • Redis--缓存击穿、缓存穿透、缓存雪崩
  • 21-原理图的可读性的优化处理
  • 【DataKit系列】数据迁移-实例搭建步骤(二)
  • 使用GCC编译Notepad++的插件
  • 【Python数据处理】MatplotlibNumpyPandas常用API整理
  • MySQL学习(19):锁
  • CSS文本两端对齐
  • StringJoiner更优雅创建含分隔符的字符序列
  • k8s数据卷(volume)管理
  • 深度学习 - 数据存储形式对比(pkl/CSV/JSON等)
  • 设计模式的概念
  • qt-声明、宏
  • 30秒的PHP代码片段(1)数组 - Array
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • CSS魔法堂:Absolute Positioning就这个样
  • Cumulo 的 ClojureScript 模块已经成型
  • es6
  • Java方法详解
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Making An Indicator With Pure CSS
  • PAT A1050
  • Redis学习笔记 - pipline(流水线、管道)
  • session共享问题解决方案
  • Spring框架之我见(三)——IOC、AOP
  • ------- 计算机网络基础
  • 力扣(LeetCode)56
  • 聊聊flink的TableFactory
  • ​configparser --- 配置文件解析器​
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • #07【面试问题整理】嵌入式软件工程师
  • #每日一题合集#牛客JZ23-JZ33
  • (1)常见O(n^2)排序算法解析
  • (26)4.7 字符函数和字符串函数
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (三)终结任务
  • ./configure,make,make install的作用(转)
  • ./configure、make、make install 命令
  • .net 7 上传文件踩坑
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .Net 代码性能 - (1)
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .net反编译的九款神器
  • .NET委托:一个关于C#的睡前故事
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • @ModelAttribute使用详解
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • [ vulhub漏洞复现篇 ] Django SQL注入漏洞复现 CVE-2021-35042
  • [.NET 即时通信SignalR] 认识SignalR (一)