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

news2024/11/14 18:30:08

历史

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.coloradmin.cn/o/1994091.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot项目搭建集成 redis/跨域/远程请求

目录 一,创建maven项目 1,左上角file > new > maven project 2,next 到 创建 Group id 和 Artifact id​编辑​编辑 二,配置springboot 1,配置pom文件, 2,创建启动类 3&#xff…

五段式S型算法笔记

设定已知:v0 vmax j; 减加速段:tm到tmax 加加速段:0到tm tm:中点时间 vm:中点速度 vmax:最大速度; j加速度的斜率 -j相反加速度的斜率 这个图首先说明&#xff…

大数据面试SQL(六):共同使用ip用户检测问题

文章目录 共同使用ip用户检测问题 一、题目 二、分析 三、SQL实战 四、样例数据参考 共同使用ip用户检测问题 一、题目 现有用户登录日志表,记录了每个用户登录的IP地址,请查询共同使用过3个及以上IP的用户对。 样例数据: 结果数据&…

NSSCTF练习记录:[SWPUCTF 2021 新生赛]jicao

题目: 这段PHP代码的意思是: 对index.php文件进行语法高亮显示,插入flag.php文件,变量id的值为POST传递的值,变量json的值为GET传递的json类型的值。当id值为wllmNB且json中含有键为“x”,值为“wllm”的时…

【Android】安卓四大组件之Service用法

文章目录 使用Handler更新UIService基本特点启动方式非绑定式服务使用步骤 绑定式服务步骤 生命周期非绑定式启动阶段结束阶段 绑定式启动阶段结束阶段 前台Service使用步骤结束结束Service本身降级为普通Service降级为普通Service 使用Handler更新UI 主线程创建Handler对象&a…

文件描述符中设置FD_CLOEXEC的用处

linux中&#xff0c;父进程fork出子进程&#xff0c;子进程本身会继承父进程的所有文件描述符。若子进程再调用exec系列函数转化为新的进程实体&#xff0c;其实父进程的描述符对其没有意义。此时文件上只需要设置FD_CLOEXEC即可。 下面是例子说明&#xff1a; #include <…

vue3、uniapp-vue3模块自动导入

没有使用插件 使用插件,模块自动导入 安装: npm i -D unplugin-auto-importvite.config.js (uniapp没有此文件,在项目根目录下创建) import { defineConfig } from "vite"; import uni from "dcloudio/vite-plugin-uni"; import AutoImport from &qu…

SpringBoot 自定义 Starter 实现

一、定义&#xff0c;什么是Starter SpringBoot Starter 是”一站式服务&#xff08;one-stop service&#xff09;“的依赖 Jar 包&#xff1a; 包含 Spring 以及相关技术&#xff08;比如Redis&#xff09;的所有依赖提供了自动配置的功能&#xff0c;开箱即用提供了良好的…

7. Kubernetes核心资源之Service服务实战

**service分类 : ** **ClusterIP : ** 默认类型&#xff0c;自动分配一个【仅集群内部】可以访问的虚拟IP **NodePort : ** 对外访问应用使用&#xff0c;在ClusterIP基础上为Service在每台机器上绑定一个端口&#xff0c;就可以通过: ipNodePort来访问该服务 **LoadBalanc…

[24年新算法]NRBO-XGBoost回归+交叉验证基于牛顿拉夫逊优化算法-XGBoost多变量回归预测

[24年新算法]NRBO-XGBoost回归交叉验证基于牛顿拉夫逊优化算法-XGBoost多变量回归预测 多输入单输出 程序已调试好&#xff0c;无需更改代码替换数据直接使用&#xff01;&#xff01;&#xff01;数据格式为excel格式&#xff01;如下。 中文注释清晰&#xff0c;图很丰富 …

2. C++的指针作用

目录 1.问题描述及分析 2.结论 不同类型所产生的指针在C语言中有什么作用&#xff1f;带着这个疑问&#xff0c;对C的指针进行简介。 1.问题描述及分析 在如下的一段代码中&#xff0c;分别有4个指针&#xff0c;这四个指针有什么不一样的地方么&#xff1f; class ZooAni…

Unity物理模块 之 ​2D刚体

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正​ 1.刚体是什么 在 Unity 中&#xff0c;刚体&#xff08;Rigidbody&#xff09; 是物理引擎中最基本的组件之一&#x…

Python 函数(2)

2、函数 2.1、函数传递列表 将列表传递给函数后&#xff0c;函数就能直接访问其内容。 下列为一个实例&#xff1a;将一个名字列表传递给一个名为greet_users()的函数&#xff0c;这个函数将会向列表中的每一个元素执行相应的信息。 def greet_users(name):for name in name…

1.2 C 语言开发环境 CLion 的安装(含 Windows 和 Mac )

目录 1 C 语言的由来 2 安装 MinGW 编译器 3 Windows 中安装 CLion 开发环境 3.1 安装 CLion 开发环境 3.2 运行试用 30 天 3.3 新建项目​ 3.​4 激活 3.5 汉化 4 Mac 中安装 Clion 开发环境 4.1 安装 CLion 开发环境 4.2 运行试用 30 天 4.3 新建项目 ​4.4 激活…

RuoYi-Vue源码阅读(三):用户相关模块

文章目录 1 用户角色权限信息 getInfo1.1 后端代码实现步骤1.1.1 获取用户角色权限信息1.1.2 获取用户的角色集合 1.2 前端代码实现步骤 2 获取用户路由信息 getRouters2.1 后端代码实现步骤2.1.1 获取菜单目录2.1.2 构建前端路由所需要的菜单 2.2 前端代码实现步骤 3 参考链接…

设计模式20-备忘录模式

设计模式20-备忘录 动机定义与结构定义结构 C代码推导优缺点应用场景总结备忘录模式和序列化备忘录模式1. **动机**2. **实现方式**3. **应用场景**4. **优点**5. **缺点** 序列化1. **动机**2. **实现方式**3. **应用场景**4. **优点**5. **缺点** 对比总结 动机 在软件构建过…

Redis相关面试题(二)

一、BIT中不同命令使用的场景 Sring Seesion会话业务缓存分布式锁&#xff1a;为了防止用户同时登录多个设备进行操作 Int 计数器限流全局唯一ID Hash 电商购物车 BitMap 用户签到 List 消息队列 ZSet 排行榜 二、什么是缓存击穿&#xff0c;缓存穿透&#xff0c;…

C++--类和对象(一)

C是一个面向对象的编程语言&#xff0c;而面向对象编程有四大特性&#xff1a;封装&#xff0c;抽象&#xff0c;继承&#xff0c;多态。类和对象就是对应其中的封装&#xff0c;在C中将数据和对数据的操作都封装在一个class&#xff08;类&#xff09;的结构体中。 目录 类的…

【C++二分查找】2187. 完成旅途的最少时间

本文涉及的基础知识点 C二分查找 LeetCode2187. 完成旅途的最少时间 给你一个数组 time &#xff0c;其中 time[i] 表示第 i 辆公交车完成 一趟旅途 所需要花费的时间。 每辆公交车可以 连续 完成多趟旅途&#xff0c;也就是说&#xff0c;一辆公交车当前旅途完成后&#xf…

TCP如何建立长连接

文章目录 TCP建立长连接长连接和短连接长连接的优势TCP KEEPALIVE 心跳包心跳检测步骤 断线重连断线重连函数实现 实例服务端客户端程序功能演示效果 TCP建立长连接 长连接和短连接 长连接是指不论TCP的客户端和服务器之间是否有数据传输&#xff0c;都保持建立的TCP连接&…