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

Modbus通讯协议

Modbus通讯协议

Modbus协议是一种用于电子控制器之间的通信协议,‌它允许不同类型的设备之间进行通信,‌以便进行数据交换和控制。‌Modbus协议最初为可编程逻辑控制器(‌PLC)‌通信开发,‌现已广泛应用于工业自动化领域,‌包括但不限于工业控制、‌楼宇自动化、‌能源管理等领域。‌该协议支持多种通信接口和物理介质,‌包括串行(‌RS-232、‌RS-485等)‌、‌以太网以及无线通信等,‌使其能够适应各种不同的应用场景。‌

Modbus用来干什么?

Modbus协议就是用来进行通信的一种限制,客户端给服务器发送一条命令帧,服务器接收到命令帧后给客户端返回一条响应帧。 比如:客户端给服务器发送一条123,当服务器接收到的消息也就是123,如果遵守Modbus协议的话它可能就是其他意思,具体需要根据客户端发送的请求帧来判断。 (说白了就是通过modbus协议告诉服务器你要干什么)

Modbus 主/从技术

Modbus RTU 协议使用主/从技术在设备之间进行通信。这意味着,任何使用 Modbus RTU 协议的应用程序都将有一个 Modbus 主站和至少一个 Modbus 从站。Modbus Master 通常是一台运行软件的主机监控计算机,它将与一个或多个 Modbus Slave 设备进行通信。

Modbus 从设备是执行系统参数测量和控制系统中的开/关设备的设备。为了执行这些任务,主站向 Modbus 从站发送消息,请求执行特定任务。

Modbus RTU 协议使用格式化的消息在主机和从机之间进行通信。消息由系统 Master 发起并发送到 Slave 设备。然后,从站以请求的数据进行响应,或者确认它执行了请求的功能。所有进出主站的消息都包含一个两字节(16 位)CRC(循环冗余校验)校验和值,用于错误检查。如果将无效请求传输到 Modbus 从站,则会返回一个字节(8 位)错误代码值,说明请求错误的原因。

Modbus 主站消息包含几个重要的信息。每条消息都以接受消息的设备的从地址开始。接下来是要执行的功能编号(或命令)。后面是指定函数正确执行所需的任何数据。从地址是一个单字节(8 位)值,可用值范围在 0-247 之间。Modbus 功能号也是一个字节值,并且在协议中定义了许多标准化功能号。支持所请求功能所需的任何数据值的长度将是一个或多个字节。Modbus 从站响应消息将包含响应的从站地址、功能编号和主站请求的任何必要数据。

Modbus协议的主要特点:‌

灵活性:‌支持多种通信模式,‌如ASCII、‌RTU(‌串行通信)‌和TCP/IP(‌网络通信)‌,‌这使得Modbus协议能够适应不同的通信需求和数据传输方式。‌

主从架构:‌系统中有一个主节点(‌Master)‌和多个从节点(‌Slave)‌,‌主节点负责发起请求,‌从节点响应请求,‌这种架构使得Modbus协议非常适合于需要集中控制和分散监测的应用场景。‌

数据校验:‌为了确保数据传输的准确性,‌Modbus协议采用了数据校验机制,‌如奇偶校验、‌LRC校验和CRC校验等,‌以减少数据传输错误的可能性。‌

功能码:‌Modbus协议使用功能码(‌FC)‌来定义不同的操作类型,‌如读取寄存器值、‌写入寄存器值等,‌这些功能码使得主节点可以精确控制从节点的行为。‌

modbus通信的过程?

上位机需要选择合适的 Modbus 协议栈、配置 Modbus 通信参数、建立 Modbus 通信连接、发送 Modbus 命令帧、接收 Modbus 响应帧和关闭 Modbus 通信连接等步骤。
 

Modbus的三种协议

Modbus-RTU协议

Modbus RTU 协议是一种开放的串行协议,广泛应用于当今的工业监控设备中。该协议使用 RS-232 或 RS-485 串行接口进行通信,并得到市场上几乎所有商业 SCADA、HMI、OPC 服务器和数据采集软件程序的支持。因此,很容易将 Modbus 兼容设备集成到新的或现有的监控应用程序中,并具有即时的软件支持。

帧结构:设备地址、功能码、数据和CRC校验字段。

常用功能码:Modbus-RTU协议定义了一系列常用的功能码,用于执行不同的操作,如读取保持寄存器、写入单个寄存器、写入多个寄存器等。

(1). 功能码-0x03读保持寄存器:该功能码用于从设备中读取一个或多个保持寄存器的值。
(2). 功能码-0x06写单个寄存器:该功能码用于向设备中写入一个保持寄存器的值。
(3). 功能码-0x10写多个寄存器:该功能码用于向设备中写入多个连续的保持寄存器的值。

Modbus-ASCII协议

Modbus-ASCII是一种基于ASCII码的Modbus通信协议。数据以ASCII字符形式传输,每个字节由两个ASCII字符表示。

帧形式:起始符号、设备地址、功能码、数据和LRC校验字段。

Modbus-TCP协议

Modbus TCP是Modbus协议的一种变体,它使用TCP/IP网络进行设备之间的通信。Modbus TCP协议帧与Modbus RTU或Modbus ASCII不同,因为它包含了TCP头部、IP头部以及可能的以太网头部。

Modbus TCP协议的帧结构如下:

modbus-tcp一般没有效验

(1). 事务处理标识:客户端生成的随机数,由服务器返回,可用于匹配请求和响应。

(2). 协议标识:在Modbus TCP中,该字段固定是00 00。

(3). 数据长度:请求或响应数据的长度,包括单元标识符、功能代码、数据和校验和,但不包括MBAP头。

(4). 单元标识符:在Modbus TCP中,一般设置为0或者连续的从设备地址。

(5). 功能代码:表示要执行的功能。

(6). 数据:根据功能代码不同,数据字段的长度也不同。

事务处理标识符协议标识数据长度单元标识符功能码数据字段
00 0100 0000 06010300 00 00 0A

本文部分借鉴与网络,如有侵权请联系删除!!!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • linux top
  • 蓝牙网关北京厂家_蓝牙网关型号价格介绍
  • 软件安全测试内容和方法大揭秘,湖南软件测评公司推荐
  • ubuntu22安装k8s-1.24.17
  • 07 Redis List类型操作与使用场景
  • 【Vulnhub靶场AI-WEB-1.0打靶教程】
  • MySQL——日期与时间类型
  • 1000W长连接,如何建立和维护?千万用户IM 架构设计
  • PHP苹果 V X iPhone微商i o s多分开V X语音转发密友朋友圈一键跟圈软件
  • C#中读写INI配置文件
  • 前端入门知识分享:HTML 页面中 head 标签之间的代码详解
  • Laravel API资源收集器:打造高效数据响应的秘诀
  • springboot智能健康管理平台-计算机毕业设计源码57256
  • 【系统架构设计师】二十二、嵌入式系统架构设计理论与实践③
  • 【Docker系列】Docker 中-d 和-it 的区别
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • (三)从jvm层面了解线程的启动和停止
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 30天自制操作系统-2
  • C语言笔记(第一章:C语言编程)
  • Docker容器管理
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • JAVA_NIO系列——Channel和Buffer详解
  • JS基础之数据类型、对象、原型、原型链、继承
  • Linux后台研发超实用命令总结
  • Material Design
  • Nodejs和JavaWeb协助开发
  • PAT A1092
  • Rancher如何对接Ceph-RBD块存储
  • TypeScript迭代器
  • 编写符合Python风格的对象
  • 模型微调
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 详解NodeJs流之一
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 译有关态射的一切
  • 阿里云服务器如何修改远程端口?
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • # Kafka_深入探秘者(2):kafka 生产者
  • # 飞书APP集成平台-数字化落地
  • # 数据结构
  • #{}和${}的区别?
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (C语言)字符分类函数
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转) Android中ViewStub组件使用
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .net core Redis 使用有序集合实现延迟队列
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .Net接口调试与案例
  • .NET微信公众号开发-2.0创建自定义菜单