物联网数据接入篇-应用层 Modbus(5)
ccwgpt 2025-07-09 11:16 3 浏览 0 评论
前四篇文章讲述的是TCP/IP 模型中的网络接口层、网络层、传输层、应用层一,这里到了第四层应用层二。由于协议比较多,就分开篇来介绍。这篇讲Modbus 协议,后面再讲 MQTT协议、CoAP 协议、OPC 框架。都是物联网常用的应用层协议。
第四层:应用层协议之二-物联网Modbus 协议
Modbus协议是一种请求/应答方式的交互过程,主机主动发起通讯请求,从机响应主机的请求,从机在没有收到主机的请求时,不会主动发送数据,从机之间不会进行通讯。
其中 Mod 是莫迪康公司,现在被施耐德电器收购。bus 是总线的意思,就是有一根主线,有主站和从站(主人和奴隶)。
Modbus 的分类
Modbus 属于应用层协议,他依赖于物理层、数据链路层和传输层来传输他的电流电压、数据帧、数据包。所以,按Modbus 所依赖的网络接口层协议的不同,可以分为以太网通信的 Modbus、串口通信的 Modbus、无线通信的 Modbus。串口通信的 Modbus包括依赖 RS232、RS485、RS422 等。
Modbus 按照他的传输模式,可以分为Modbus ASCII、Modbus RTU、Modbus TCP/IP。
Modbus 总线上所有的设备传输模式必须相同。Modbus RTU是一种紧凑的,采用二进制表示数据的方式。Modbus ASCII是一种人类可读的,冗长的表示方式。Modbus TCP/IP,基于 TCP/IP 的协议,用于通过以太网和互联网进行通信。你看看,Modbus RTU是直接通过物理层和数据链路层传递帧的,不依赖传输层和网络层。
Modbus 通信适用的设备
Modbus协议广泛应用在工业控制器、传感器、PLC、HMI、控制面板、驱动程序、动作控制、输入/输出设备等等。在基于串行链路和以太 TCP/IP 网络的 MODBUS 上可以进行相同通信。
一些网关允许在几种使用 MODBUS 协议的总线或网络之间进行通信。
Modbus 网络体系结构示例图:
Modbus 的通用帧格式
包括地址域、功能码、数据、差错校验。
主要包括:
- 地址域:1字节,即从机设备地址,通常1-247为有效地址,0为广播地址。
- 功能码:1字节,表明主机请求数据的类型。
- 数据:N字节,包含寄存器地址和寄存器数据等。
- 差错校验:对数据进行冗余校验的结果,CRC或LRC
Modbus RTU
RTU 格式是 Modbus 协议中最常用的串行通讯格式之一,数据以二进制方式进行传输,采用固定的数据帧长度,传输效率高,适用于高速通讯和较远距离的数据传输。
拓扑图:
Modbus RTU 通常基于 RS-485 串行通信链路,RS-485 总线布线规范规定其必须是总线式拓扑结构。在实际布线中,通常采用手牵手菊花链布线方式。1 和 2,2 和 3,3 和 4 这样连接。RS 232 只有一个主站一个从站。
帧格式:
01 03 00 00 00 02 C4 0B
01:地址
03:功能码
00 00:数据(寄存器地址)
00 02:数据(寄存器数量)
C4 0B:CRC 校验
起始标志(Start):通过传输中的 3.5 个字符间隔实现。
地址(Address):1 字节。
功能码(Function Code):1 字节。
数据(Data):可变长度(最多 252 字节)。
错误校验(CRC):2 字节(循环冗余校验)。
结束标志(End):通过传输中的 3.5 个字符间隔实现。
Modbus RTU 特点:
协议简洁:使用二进制格式传输数据,提高了通信效率。
可靠性高:通过循环冗余校验(CRC)来确保数据的完整性。
主从架构:一个主机可以控制多个从机。从机仅在接收到主机的请求后才会发送数据,避免了通信冲突。
易于调试和监控:提供了多种调试和监控工具,便于工程师进行现场维护和故障排除。
Modbus ASCII 数据帧
ASCII 格式是 Modbus 协议中另一种常用的串行通讯格式,数据以 ASCII 码的十六进制表示进行传输,数据帧长度较长,传输效率相对较低,适用于低速通讯和较短距离的数据传输。
Modbus ASCII 也是基于串口通信的。拓扑图见上面的 RTU。
:010300000002FArn
“:”起始标志
0000:数据(寄存器地址)
0002:数据(寄存器数量)
FA:LRC 校验
rn:结束标志
Modbus ASCII:
起始标志(Start):一个冒号 :
地址(Address):2 个 ASCII 字符(表示 1 字节的十六进制值)
功能码(Function Code):2 个 ASCII 字符(表示 1 字节的十六进制值)
数据(Data):每字节由 2 个 ASCII 字符表示(十六进制)
错误校验(LRC):2 个 ASCII 字符(表示 1 字节的十六进制值)
结束标志(End):CR LF(回车和换行)
Modbus TCP/IP
Modbus TCP 基于以太网通信,因此其网络拓扑结构更为灵活。从串行链路上一主多从的构造,演变为多客户端/多服务器端的构造模型。注意这里不是主站从站概念,而是客户端/服务器的概念。
客户端(Client):发起通信请求,控制和监视网络中的其他设备。
例子:HMI、PLC(作为控制器)、SCADA系统、工业计算机。
服务端(Server):响应客户端的请求,提供数据或执行指令。
例子:传感器、执行器、PLC(作为被控设备)、智能仪表。
拓扑图:
以太网通讯方式主要包括 Modbus TCP/IP 和 Modbus UDP/IP 两种。Modbus TCP/IP 是基于以太网的一种通讯方式,它将 Modbus 协议封装在 TCP/IP 协议栈中,通过以太网传输数据,采用基于连接的通讯方式,具有高速、稳定的特点。
Modbus UDP/IP 是基于 UDP/IP 协议的一种通讯方式,采用无连接的通讯方式,不保证数据的可靠性和顺序,适用于对实时性要求较高、对通讯效率要求较高的应用场景。帧格式:
起始标志(Start):无(由 TCP/IP 协议处理)
地址(Address):1 字节
功能码(Function Code):1 字节
数据(Data):可变长度
错误校验(CRC):在 Modbus TCP 头中由 TCP/IP 协议处理
结束标志(End):无(由 TCP/IP 协议处理)
Modbus 协议的功能码
Modbus 协议中,功能码用于指定请求的操作类型,例如读取或写入数据。每个功能码都有特定的含义和操作。以下是常见的 Modbus 功能码及其用途:
这里的线圈啊,寄存器都是个什么东西:
线圈 = 一个布尔量。寄存器 = word 操作。
现代 Modbus 设备,它们通常只映射到一块内存区域。在这个内存区域中,线圈表示位操作(bit),每个线圈对应一个布尔变量(0 或 1、开或关)。而寄存器则表示字操作(word),每个寄存器对应一个整型变量。当然,也可以通过多个寄存器的组合来表示浮点数以及其他复合数据结构。在 Modbus 协议中,一个字(word)的长度是 16 位,即 2 个字节,16 个比特。
Modbus 广播方式:单薄和广播
单播:
在单播模式下,从站地址必须唯一,地址范围为 1 到 247。主站通过特定地址访问指定的从站,发出一个请求数据帧。请求数据帧的功能可以是读取或写入数据。从站接收到请求后,进行相应的处理,并在完成后发送一个应答数据帧,表示读取或写入操作成功(又要注意 RS232 只能有一个从站)。获取数据需要轮询一下所有的从站。单播模式图:
广播:
在广播模式下,主站向所有从站发出请求数据帧,所有从站都会处理这条命令。对于广播请求,所有从站无需做出应答操作。通常,地址 0 表示广播地址。有例外情况哈。
Modbus 广播通常用于同时对多个从设备进行相同的操作,例如同时启动或停止多个从设备。
RS-232、RS-485、RS-422 对比表格:
Modbus RTU、Modbus ASCII、Modbus TCP/IP 对比表格:
应用
Modbus 是一个开源的库,可以用来在嵌入式系统上实现 Modbus 协议。它通常用于以下场景:
嵌入式系统:如 Arduino、ESP8266、Raspberry Pi 等微控制器和单板计算机。
工业自动化设备:如 PLC(可编程逻辑控制器)、传感器、执行器等。
家庭自动化系统:如智能家居设备和控制系统。
能源管理:电力系统中的数据采集和监控。
楼宇自控:用于空调、照明等系统的集成控制。
水处理:对水处理设备的运行状态进行监控和管理。
后记
这个系列,物联网协议进行到了尾声,这篇写 Mudbus,下面会写 MQTT、CoAP、OPC,都是重头戏。
参考文献
本文由 @跃曰 原创发布于人人都是产品经理。未经作者许可,禁止转载。
题图来自Unsplash,基于CC0协议。
该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务。
相关推荐
- 如何高效实现API接口的自动化测试?
-
实现API接口的自动化测试是一个多步骤的过程,涉及需求分析、测试用例设计、环境搭建、脚本编写、执行测试、结果分析和持续集成等多个环节。选择合适的工具和框架也是成功的关键。嘿,咱来聊聊实现API接口自动...
- 总结100+前端优质库,让你成为前端百事通
-
1年多时间,陆陆续续整理了一些常用且实用的开源项目,方便大家更高效地学习和工作.js相关库js常用工具类「lodash」一个一致性、模块化、高性能的JavaScript实用工具库。「xij...
- 混合开发到底怎么个混法?(混合开发rn)
-
引言最近几年混合开发越来越火,从PhoneGap到Cordova到Ionic,再到ReactNative,到Flutter。同时在搜索引擎中诸如IonicVSReactNativeRN和Weex+...
- 无所不能,将 Vue 渲染到嵌入式液晶屏
-
该文章转载自公众号@前端时刻,https://mp.weixin.qq.com/s/WDHW36zhfNFVFVv4jO2vrA前言之前看了雪碧大佬的将React渲染到嵌入式液晶屏觉得很有意思,R...
- 【直接收藏】前端 VUE 高阶面试题(一)
-
说说vue动态权限绑定渲染列表(权限列表渲染)首先请求服务器,获取当前用户的权限数据,比如请求this.$http.get("rights/list");获取到权限数据之后,在列表中...
- Vue采用虚拟DOM的目的是什么?(vue2 虚拟dom)
-
虚拟DOM更新其实效率并不像大家想象中的那么高,而且React官方也从来没说过虚拟DOM效率有多高,相反React虚拟DOM的实现也不是所有虚拟DOM产品中最好的。但是通过虚拟D...
- 什么是 JavaScript?(什么是党的旗帜)
-
本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注!作者|慕课网精英讲师然冬JavaScript(JS)是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。(MDN...
- Weex在内涵发现页中的工程实践(weex唯客交易所官网)
-
React-Native和Weex是目前最为火热的两个客户端跨平台解决方案。从去年2016年9月份开始,IES在抖音产品中应用了ReactNative,中途遇到了很多的问题,尤其是长列表的性能问题一...
- 新恒汇:公司主要业务包括智能卡业务、蚀刻引线框架业务以及物联网eSIM芯片封测业务
-
证券日报网讯新恒汇7月3日在互动平台回答投资者提问时表示,公司主要业务包括智能卡业务、蚀刻引线框架业务以及物联网eSIM芯片封测业务。具体请关注公司公告和公开披露信息。(编辑王雪儿)...
- “移”科普——什么是物联网?(移动设备物联网物联网应用实例)
-
物联网(InternetofThings,简称IoT)是指通过互联网将物理世界与数字世界相连接,实现物与物之间的智能互联的网络。它是一种新型的信息通信技术,通过传感器、嵌入式系统、网络技术等手段,...
- 如何自己搭建一个物联网平台?(自建物联网云平台)
-
自己搭建一个物联网(IoT)平台需要涉及多个关键步骤,包括硬件设备的选择、软件开发、网络通信、安全性设计以及数据管理。以下是搭建物联网平台的基本流程:1.确定物联网平台架构一个完整的物联网平台通常包...
- 物联网数据接入篇-应用层 Modbus(5)
-
前四篇文章讲述的是TCP/IP模型中的网络接口层、网络层、传输层、应用层一,这里到了第四层应用层二。由于协议比较多,就分开篇来介绍。这篇讲Modbus协议,后面再讲MQTT协议、CoAP协议、...
- 乐鑫ESP32-C5全面量产:行业首款双频Wi-Fi 6的RISC-V SoC
-
IT之家5月2日消息,乐鑫信息科技4月30日宣布,ESP32-C5现已全面进入量产。ESP32-C5宣称是行业首款2.4&5GHz双频Wi-Fi6的RISC-...
- Vue Shop Admin:强大而易用的后台管理系统模板
-
VueShopAdmin是一个基于Vue.js框架的后台管理系统模板。它具有简洁、易用和美观的特点,非常适合开发人员用于快速构建各种类型的管理系统。这个模板使用了最新的技术,如Vue3、V...
- 基于Prometheus的自动化巡检(prometheus自动发现详解)
-
!!大家好,我是乔克,一个爱折腾的运维工程,一个睡觉都被自己丑醒的云原生爱好者。作者:乔克公众号:运维开发故事道路千万条,安全第一条。操作不规范,运维两行泪。前言目前,大部分公司都采用Promet...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- JAVA集合框架 (47)
- mfc框架 (52)
- abb框架断路器 (48)
- ui自动化框架 (47)
- beego框架 (52)
- java框架spring (58)
- grpc框架 (55)
- ppt框架 (48)
- 内联框架 (52)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)