百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

Modbus初学者系列,第四章:modbus消息帧格式

liebian365 2024-10-22 15:34 21 浏览 0 评论

第四章:modbus消息帧格式

Modbus ASCII 或 RTU 模式仅适用于标准的 Modbus 协议串行网络,它定义了在这些网络上连续传输的消息段的每一个字节,以及决定怎样将信息打包成消息域和如何解码等功能。

RTU消息帧格式

RTU模式通过二进制格式传输数据,具有高效、可靠的特点

ASCII消息帧格式

当控制器设为在Modbus 网络上以ASCII模式通信时,在消息中每个8位(bit)的字节都将作为两个ASCII字符发送。这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误。

在ASCII模式下,消息以冒号(:)字符(ASCII码0x3A)开始,以回车换行符结束(ASCI码0x0D,0x0A)。消息帧的其他字段(域)可以使用的传输字符是十六进制的0··9,A··F。处于网络上的Modbus设备不断侦测“:”字符,当有一个冒号接收到时,每个设备进入解码阶段,并解码下一个字段(地址域)来判断是否是发给自己的。消息帧中的字符间发送的时间间隔最长不能超过1秒,否则接收的设备将认为发生传输错误。

地址域

所谓地址域,指的是Modbus 通信帧中的地址字段,其内容为从设备地址。Modbus消息帧的地址域包含2个字符(ASCII模式)或者1个字节(RTU模式)。

消息帧中可能的从设备地址是0~247(十进制),单个设备的实际地址范围是1~247。主设备通过将要联络的从设备的地址放入消息中的地址域来选通从设备。当从设备发送回应消息时,它把自己的地址放入回应的地址域中,以便主设备知道是哪一个设备做出回应。

地址0用作广播地址,以使所有的从设备都能认识。当Modbus协议用于更高级别的网络时,广播方式可能不被允许或以其他方式代替。

功能码域

功能码在Modbus协议中用于表示消息帧的功能。

功能码域由1个字节构成,因此其取值范围为1~255(十进制)。例如,常用的功能码有03、04、06、16等,其中03功能码的作用是读保持寄存器内容,04功能码的作用是读输入寄存器内容(输入寄存器和保持寄存器的区别可参考上一节的内容),06功能码的内容是预置单个保持寄存器,16功能码的内容则是预置多个保持寄存器。

从设备根据功能码执行对应的功能,执行完成后,正常情况下则在返回的响应消息帧中设置同样的功能码;如果出现异常,则在返回的消息帧中将功能码最高位(MSB)设置为1。据此,主设备可获知对应从设备的执行情况。

另外,对于主设备发送的功能码,则从设备根据具体配置来决定是否支持此功能码。如果不支持,则返回异常响应。

数据域

数据域与功能码紧密相关,存放功能码需要操作的具体数据。数据域以字节为单位,长度是可变的,对于有些功能码,数据域可以为空。

具体的功能码和数据域的构成及意义,可参考后续章节的内容,下面给出一个简单的例子。

RTU消息帧示例

以下是一个Modbus RTU请求消息帧的示例,假设主机请求从设备地址为1的设备读取保持寄存器(功能码03),起始地址为0,读取数量为2:

  • 设备地址:0x01
  • 功能码:0x03
  • 起始地址:0x0000(高字节0x00,低字节0x00)
  • 数量:0x0002(高字节0x00,低字节0x02)
  • CRC:假设计算得出的CRC为0xC40B

组成的RTU请求消息帧如下:

01 03 00 00 00 02 C4 0B

平时调试Modbus设备,或者学习Modbus协议,推荐一款Modbus主从站模拟器:

主站下载地址:[Modbus主站模拟器](http://www.redisant.cn/mme)

从站下载地址:[Modbus从站模拟器](http://www.redisant.cn/mse)

相关推荐

“版本末期”了?下周平衡补丁!国服最强5套牌!上分首选

明天,酒馆战棋就将迎来大更新,也聊了很多天战棋相关的内容了,趁此机会,给兄弟们穿插一篇构筑模式的卡组推荐!老规矩,我们先来看10职业胜率。目前10职业胜率排名与一周前基本类似,没有太多的变化。平衡补丁...

VS2017 C++ 程序报错“error C2065:“M_PI”: 未声明的标识符"

首先,程序中头文件的选择,要选择头文件,在文件中是没有对M_PI的定义的。选择:项目——>”XXX属性"——>配置属性——>C/C++——>预处理器——>预处理器定义,...

东营交警实名曝光一批酒驾人员名单 88人受处罚

齐鲁网·闪电新闻5月24日讯酒后驾驶是对自己和他人生命安全极不负责的行为,为守护大家的平安出行路,东营交警一直将酒驾作为重点打击对象。5月23日,东营交警公布最新一批饮酒、醉酒名单。对以下驾驶人醉酒...

Qt界面——搭配QCustomPlot(qt platform)

这是我第一个使用QCustomPlot控件的上位机,通过串口精确的5ms发送一次数据,再将读取的数据绘制到图表中。界面方面,尝试卡片式设计,外加QSS简单的配了个色。QCustomPlot官网:Qt...

大话西游2分享赢取种族坐骑手办!PK趣闻录由你书写

老友相聚,仗剑江湖!《大话西游2》2021全民PK季4月激燃打响,各PK玩法鏖战齐开,零门槛参与热情高涨。PK季期间,不仅各种玩法奖励丰厚,参与PK趣闻录活动,投稿自己在PK季遇到的趣事,还有机会带走...

测试谷歌VS Code AI 编程插件 Gemini Code Assist

用ClaudeSonnet3.7的天气测试编码,让谷歌VSCodeAI编程插件GeminiCodeAssist自动编程。生成的文件在浏览器中的效果如下:(附源代码)VSCode...

顾爷想知道第4.5期 国服便利性到底需优化啥?

前段时间DNF国服推出了名为“阿拉德B计划”的系列改版计划,截至目前我们已经看到了两项实装。不过关于便利性上,国服似乎还有很多路要走。自从顾爷回归DNF以来,几乎每天都在跟我抱怨关于DNF里面各种各样...

掌握Visual Studio项目配置【基础篇】

1.前言VisualStudio是Windows上最常用的C++集成开发环境之一,简称VS。VS功能十分强大,对应的,其配置系统较为复杂。不管是对于初学者还是有一定开发经验的开发者来说,捋清楚VS...

还嫌LED驱动设计套路深?那就来看看这篇文章吧

随着LED在各个领域的不同应用需求,LED驱动电路也在不断进步和发展。本文从LED的特性入手,推导出适合LED的电源驱动类型,再进一步介绍各类LED驱动设计。设计必读:LED四个关键特性特性一:非线...

Visual Studio Community 2022(VS2022)安装图文方法

直接上步骤:1,首先可以下载安装一个VisualStudio安装器,叫做VisualStudioinstaller。这个安装文件很小,很快就安装完成了。2,打开VisualStudioins...

Qt添加MSVC构建套件的方法(qt添加c++11)

前言有些时候,在Windows下因为某些需求需要使用MSVC编译器对程序进行编译,假设我们安装Qt的时候又只是安装了MingW构建套件,那么此时我们该如何给现有的Qt添加一个MSVC构建套件呢?本文以...

Qt为什么站稳c++GUI的top1(qt c)

为什么现在QT越来越成为c++界面编程的第一选择,从事QT编程多年,在这之前做C++界面都是基于MFC。当时为什么会从MFC转到QT?主要原因是MFC开发界面想做得好看一些十分困难,引用第三方基于MF...

qt开发IDE应该选择VS还是qt creator

如果一个公司选择了qt来开发自己的产品,在面临IDE的选择时会出现vs或者qtcreator,选择qt的IDE需要结合产品需求、部署平台、项目定位、程序猿本身和公司战略,因为大的软件产品需要明确IDE...

Qt 5.14.2超详细安装教程,不会来打我

Qt简介Qt(官方发音[kju:t],音同cute)是一个跨平台的C++开库,主要用来开发图形用户界面(GraphicalUserInterface,GUI)程序。Qt是纯C++开...

Cygwin配置与使用(四)——VI字体和颜色的配置

简介:VI的操作模式,基本上VI可以分为三种状态,分别是命令模式(commandmode)、插入模式(Insertmode)和底行模式(lastlinemode),各模式的功能区分如下:1)...

取消回复欢迎 发表评论: