Modbus协议

一.起源

Modbus由Modicon公司于1979年开发,是一种工业现场总线协议标准。Modbus通信协议具有多个变种,其中有支持串口,以太网多个版本,其中最著名的是Modbus RTUModbus ASCIIModbus TCP三种。其中Modbus TCP是在施耐德收购Modicon后1997年发布的。

二.分类

  1. Modbus RTU:运行在串口上的协议,采用二进制表现形式以及紧凑的数据结构,通信效率较高,应用比较广泛

  2. Modbus ASCII:运行在串口上的协议,采用ASCII码进行传输,并且每个字节的开始和结束都有特殊字符作为标志,传输效率远远低于Modbus RTU,一般只有通讯量比较少时才会考虑

  3. Modbus TCP:Modbus TCP是基于以太网的变体,使用TCP/IP协议栈进行数据传输。它使用标准的以太网物理层和IP网络连接,可以通过以太网进行设备间的通信。

三.应用场景

Modbus协议是现在国内工业领域应用最多的协议,不只PLC设备,各种终端设备,比如水控机、水表、电表、工业秤、各种采集设备。

四.Modbus TCP协议

1.Modbus TCP特点

  1. 采用主从问答的通信,主机可以对应多个从机,可以特意问某个从机。不仅采集还要控制,有问必有答。

  2. 使用TCP/IP协议栈,能够实现可靠的数据传输,并支持通过路由器或者互联网对设备进行远程访问和控制。

  3. 支持高速通信,与Modbus RTU或Modbus ASCII等串行通信相比较,它的通信速度更快,可以实现更高的数据传输效率。

4.Modbus TCP端口号默认502

  1. 灵活性高,可以通过可编程控制器(PLC)或其他设备对不同种类的数据(如寄存器或线圈)进行读写。

总之,Modbus TCP是一种基于以太网的工业自动化控制系统通信协议,它具有高速通信、报文完整性和可靠性等特点。如果您还有其他问题,可以继续向我提问。

2.Modbus TCP组成

Modbus TCP协议包含三部分:报文头、功能码、数据

![2023-11-15T15:53:14.png][1]

报文头:7个字节 (byte)功能码:1个字节
Modbus TCP/IP协议最大数据帧长度为260字节

(1)MBAP报文头

![2023-11-15T15:54:23.png][2]

事务处理标识符:区分消息 ,一般主机怎么发,从机怎么回复。
协议标识符: 固定 00 00
长度:接下来的字节长度。
单元标识符:从机id
总结:报文头包含的内容个数、顺序都不可以调换

(2)寄存器(存储数据)
Modbus TCP使用不同类型的寄存器来存储和读取数据,包括离散量输入线圈输入寄存器保持寄存器

  1. 线圈寄存器(Coil Register)和离散量输入寄存器(Discrete Input Register)都属于位寄存器。每个寄存器占用1字节,用于存储开关状态(0或1)。线圈寄存器用于控制IO设备的输出状态,而离散量输入寄存器则用于读取输入信号。

  2. 输入寄存器(Input Register)和保持寄存器(Holding Register)属于字寄存器。每个寄存器占用2个字节,用于存储工业设备的值。保持寄存器可以读写,用于存储配置参数、控制命令或状态信息。而输入寄存器只支持读取,用于获取工业设备的输入数据,例如AD采集值或传感器读数。

总结而言,通过Modbus TCP协议可以通过不同类型的寄存器来读取和写入数据。线圈寄存器和离散量输入寄存器用于控制和读取开关量状态,而输入寄存器和保持寄存器用于读取和存储字节或字数据。对于每种寄存器类型,客户端可以使用相应的功能码进行读写操作。

(3)功能码
![2023-11-15T16:03:32.png][3]

寄存器PLC地址和寄存器的对应关系:
00001-09999 :线圈
10001-19999:离散量输入
30001-39999:输入寄存器
40001-49999:保持寄存器

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

五.Modbus RTU协议

1.与Modbus TCP的区别

![2023-11-15T16:11:48.png][4]

在一般工业场景中,使用Modbus RTU的情况更常见一些。Modbus RTU是基于串行通信协议的一种形式,通常使用RS-232或RS-485等工业总线协议进行数据的收发。

与Modbus TCP不同,Modbus RTU没有报文头中的MBAP字段。而在尾部,Modbus RTU增加了两个CRC检验字节(CRC16),用于数据完整性的校验。这是因为在网络协议中,如TCP协议,已经包含了自带的校验机制,所以在Modbus TCP中不需要使用CRC校验码。

总体而言,Modbus RTU和Modbus TCP在使用方法上基本一致,只是在创建Modbus对象时有所不同。对于Modbus TCP,需要传入网络Socket信息;而对于Modbus RTU,则需要传入串口相关信息。

2.Modbus RTU特点

Modbus RTU也是主从问答协议,由主机发起,一问一答
Modbus RTU通过串口进行通信

设置串口参数:
设置串口参数时要求:
波特率为9600
8位数据位
1位停止位
无流控

3.Modbus RTU协议格式

Modbus RTU数据帧组成:地址码 功能码 数据 校验码
地址码:从机id
功能码:(同Modbus TCP)读:01 02 03 04 写单个:05 06 写多个:0f 10
数据:起始地址 数量 数据
校验码:2个字节,对地址码、功能码和数据进行校验,通过函数自动生成

4442874.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/327364.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构之树和二叉树

树和二叉树的定义和存储 二叉树的遍历 先序遍历 中序遍历 后序遍历 层次遍历 哈夫曼树

Packet Tracer - Layer 2 VLAN Security

Packet Tracer - 第二层VLAN安全配置任务 目标 在SW-1和SW-2之间建立新的冗余链路。在新连接的SW-1和SW-2之间的干线链路上启用中继并配置安全措施。创建一个新的管理VLAN(VLAN 20)并将一台管理PC连接到该VLAN。实施ACL以防止外部用户访问管理VLAN。 背…

Linux命令之服务器的网络配置hostname,sysctl,ifconfig,service,ifdown,ifup,route,ping的使用

1、查看当前主机名称,编辑配置文件修改主机名为你姓名拼音的首字母(如张三,则为zs) 2、查看本机网卡IP地址,编辑/etc/sysconfig/network-scripts/ifcfg-ens33,要求在一块物理网卡上绑定2个IP地址&#xff0…

测试阶段风险不容忽视!QA角色关键时刻揭露项目隐患!

项目有风险 今天下午15点,团队成员D向他的主管Z反馈他测试的项目有风险:项目在测试周期内,但在用例评审时发现有一处功能逻辑有争议,需要产品经理跟业务方确认,可能出现的情况有: 1.不变更需求&#xff0…

day2·算法-快乐数-有效三角形个数

今天又来更新啦,准备蓝桥杯的小伙伴可以和我一起来刷题,建议大家先看题,整理出思路,再看如何用简单的写法将思路构建出来,然后优化细节,找到解决某些例外出现的方法,从而成功解答这道题。 快乐…

leetcode 67. 二进制求和

一、题目 二、解答 1.思路 1.1 思路1 转成2个二进制数字相加,之后再转回字符串 1.2 思路2 遍历字符串挨个相加: 补齐2个字符串到同样长度 while循环,如果指针>0不断循环如果a短,给字符串前插入(a长度-b长度&a…

万户 ezOFFICE ezflow_gd.jsp SQL注入漏洞复现

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息维护、客户服务、互动交流和日…

Linux系统使用超详细(十)~vi/vim命令①

vi/vim命令有很多,其实只有少数的用法对于我们日常工作中起到了很大帮助,但是既然我选择梳理Linux的学习笔记,那么一定全力把自己的理解和学习笔记的内容认真整理汇总,内容或许有错误,还请发现的C友们发现了及时指出。…

day-11 统计整数数目

注:无思路 参考答案 code class Solution {static final int N 23;static final int M 401;static final int MOD 1000000007;int[][] d;String num;int min_sum;int max_sum;public int count(String num1, String num2, int min_sum, int max_sum) {d new in…

通过生成mcs、bin文件将程序固化到FPGA

通过将程序固化到FPGA,可以做到断电不丢失程序,上电之后就自动启动程序的作用,整个固化步骤主要分为3步,一是修改约束文件,二是生成mcs或bin文件,三是将程序固化到开发板flash 1.修改约束文件 生成固化文…

远程开发之vscode端口转发

远程开发之vscode端口转发 涉及的软件forwarded port 通过端口转发,实现在本地电脑上访问远程服务器上的内网的服务。 涉及的软件 vscode、ssh forwarded port 在ports界面中的port字段,填需要转发的IP:PORT,即可转发远程服务器中的内网端…

多行SQL转成单行SQL

如下图所示 将以上多行SQL转成单行SQL 正则表达式如下 (?s)$[^a-zA-Z()0-9]*结果如下 灵活使用,也未必只能使用Sublime Text 提供了一个在线工具

STM32快速复制MX25L1606E系列Flash

去年做了一个使用RS485对PIC18F45K80系列单片机进行在线升级的程序,如果是小批量的出厂烧录程序和升级验证(出厂前肯定要测试单片机是否能正常读写Flash)是可以的,但是后来产品订单量很大,生产线的烧录及升级验证就很缓…

【C语言基础考研向】03混合运算和printf讲解

一.混合运算 类型强制转换场景 整型数进行除法运算时&#xff0c;如果运算结果为小数&#xff0c;那么存储浮点数时一定要进行强制类型转换&#xff0c;请看下面例子 #include <stdio.h> int main() {int i5;float fi/2; //这里做的整型运算printf("%f\n",f…

BIOS知识枝桠——RAID 磁盘阵列

文章目录 前言一、RAID介绍二、RAID等级分类1.RAID02.RAID13.RAID24.RAID3和RAID45.RAID5和RAID66.RAID77.RAID10 BIOS下组建RAID 前言 假设存在多块磁盘&#xff0c;如果不组建阵列&#xff0c;磁盘与磁盘之间是没有任何关系的。磁盘A和B&#xff0c;放在A中的文件与B磁盘没有…

布隆过滤器四种实现(Java,Guava,hutool,Redisson)

1.背景 为预防大量黑客故意发起非法的时间查询请求&#xff0c;造成缓存击穿&#xff0c;建议采用布隆过滤器的方法解决。布隆过滤器通过一个很长的二进制向量和一系列随机映射函数&#xff08;哈希函数&#xff09;来记录与识别某个数据是否在一个集合中。如果数据不在集合中…

msvcr100.dll丢失的6种解决方法

我们来了解一下msvcr100.dll是什么。msvcr100.dll是Microsoft Visual C 2010 Redistributable Package的一部分&#xff0c;它包含了许多运行在Windows操作系统上的应用程序所需的运行时组件。这些组件包括C标准库、MFC&#xff08;Microsoft Foundation Class&#xff09;库等…

vivado 添加现有IP文件、生成IP

添加现有IP文件 作为从AMD IP目录添加和自定义IP的替代方案&#xff0c;您可以直接添加XCI或XCIX文件。此过程不同于从按以下方式编目&#xff1a; •XCI或XCIX文件可能是早期版本&#xff0c;也可能是相同或完全自定义的版本AMD IP目录中发现的类似IP。 •XCI或XCIX文件可能…

meter报OOM错误,如何解决?

根据在之前的压测过程碰到的问题&#xff0c;今天稍微总结总结&#xff0c;以后方便自己查找。 一、单台Mac进行压测时候&#xff0c;压测客户端Jmeter启动超过2000个线程&#xff0c;Jmeter报OOM错误&#xff0c;如何解决&#xff1f; 解答&#xff1a;单台Mac配置内存为8G&…

log4j2漏洞综合利用_CVE-2021-44228_CNVD-2021-95919

1.漏洞利用 1.1.rmi 利用 1、在检测到目标存在 log4j2 漏洞后&#xff0c;确定漏洞参数&#xff0c;尝试接受目标 rmi 请求。 成功接收到请求。 出现 JRMIK 字样即代表可接受 RMI 请求。 2、漏洞利用。 使用JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar执行命令&#xff0…