MODBUS协议规范-中文版(免费下载)

MODBUS协议规范-中文版(免费下载)1.Modbus数据帧构成:地址域+功能码+数据+差错校验下面逐一解释各部分的具体含义:(1)地址域:即主站要访问的从站地址,其范围0~247(2)功能码:即主站想要从站执行什么动作。从大的方面看分为读(主站读取从站数据),写(主站向从站读取数据)(3)数据:如果主站的请求是读数据,那么该“数据”要包含的信息有:从哪里开始读数据+读多少数据。如果主站的请求是向从站写…

大家好,又见面了,我是你们的朋友全栈君。

MODBUS通讯之数据帧格式解读(文末可免费下载文档)

一.背景
之前在一个项目上用代码分别实现了Modbus主站和Modbus从站(:其实官方提供有现成的MODBUS从站库代码,并且支持大多数的嵌入式平台,如果项目比较急,把官方的库代码移植,剪裁一下就可以用了,但是我发现当你对MODBUS了解的比较熟悉之后,针对你自己特定的项目/产品完全可以自己实现更加精简,高效的代码),目前产品已经量产发布使用。现回过头来整理一下有关Modbus通讯的一些知识,打算把它写成一个系列博客,目前这是第一篇。
Modbus协议是一项应用层报文传输协议,包括ASCII、RTU、TCP三种报文类型。标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网接口,采用master/slave方式通信。本文主要介绍的是MODBUS-RTU。

二.MODBUS数据帧组成
首先我们要知道一帧正常的MODBUS数据帧包含的内容有:地址域 + 功能码 + 数据 + 差错校验
modbus数据帧

三.下面逐一解释MODBUS数据帧各部分的具体含义:

(1)地址域:即主站要访问的从站地址,其范围0~247

(2)功能码:即主站想要对从站进行何种操作。
从大的方面看分为(主站读取从站数据),(主站向从站读取数据)
再往细分就是具体读取从站哪块区域的数据,以及具体将数据写到从站的哪块区域。操作从站不同的数据区对应有不同的功能码,在文末《MODBUS协议规范》文档中有详细介绍

(3)数据:如果主站的请求是数据,那么该“数据”要包含的信息有: 从哪里开始读数据 + 读多少数据。 如果主站的请求是向从站数据,那么该“数据”要包含的信息有:从哪里开始写数据 + 写多少个字节数据 + 要写的具体数据

(4)差错校验:为了保证数据传输的正确性,Modbus协议会在数据帧最后面加上两个字节的差错校验

四.举实例详细说明主站和从站之间的数据帧交互过程
(1) 主站 请求读 从站数据:
在这里插入图片描述
主站向从站发送的实际请求数据帧:03 04 00 08 00 01 B0 3B (假设从站地址为03)
其中:
03:为主站要访问的域名(即从站地址,范围0~247)。
04:表示功能码。
00 08:从从站08这个地址开始读取数据。
00 01:即将读取数据的长度。
b0 3b:两个字节的校验数据。

从站接收到主站的请求数据帧之后实际的响应数据帧为:03 04 02 00 0A 40 F7
其中:
03:为从站地址即域名(即从站地址,范围0~247)。
04:表示功能码。
02:被读取数据长度(包含一个字节高8位数据,一个字节低8八位数据)
00 0A:被读取的具体数据
40 F7两个字节的校验数据

(2) 主站 请求写 从站数据:
在这里插入图片描述
主站向从站发送的实际请求数据帧:03 10 00 01 00 02 04 00 0A 01 02 99 88 (假设从站地址为03)
其中
03:为主站要访问的域名(即从站地址,范围0~247)。
10:功能码。
00 01:往从站01这个地址开始写数据。
00 02:寄存器数量。
04:一共写4个字节数据。
04 00 01 02:具体数据。
99 88:两个字节的校验数据。

从站接收到主站的请求数据帧之后实际的响应数据帧为:03 10 00 01 00 02 11 EA
其中
03:为从站地址即域名(即从站地址,范围0~247)。
10:功能码。
00 01:往从站01这个地址开始写数据。(原样返回/响应)
00 02:寄存器数量。(原样返回/响应)
11 EA两个字节的校验数据

以上我们介绍了Modbus数据帧 主站发送从站响应 这么一个“你来我往”的实际数据帧交互过程。下一篇我们将深入到硬件层(物理层)看下数据是如何以“字节”形式进行接收的。

五.资源获取
(1)freemodbus官方库代码下载地址
(2)MODBUS协议规范-中文版:提取码 mep3
(3) MODBUS上位机调试助手:提取码 qcji
(4)ModeBusRTU调试工具CRC16版: 提取码 jkc6

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159772.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql8分区表_MySQL 分区表[通俗易懂]

    mysql8分区表_MySQL 分区表[通俗易懂]MySQL分区就是将一个表分解为多个更小的表。从逻辑上讲,只有一个表或一个索引,但在物理上这个表或者索引可能由多个物理分区组成。每个分区在物理上都是独立的。MySQL数据库分区类型:Range分区:行数据基于属于一个给定连续区间的列值放入分区。List分区:和Range分区类似,只是List分区面向的是离散的值。Hash分区:根据用户自定义的表达式的返回值来进行分区,返回值不能为负数。Key分区:…

    2022年6月11日
    45
  • java.library.path_java的path的设置路径

    java.library.path_java的path的设置路径添加Handler:me.add(new ContextPathHandler(“ctx”)),然后在页面中就可以${ctx}来用代码如下:找不到代码写在哪里的,请在整个工程中搜索configHandlerconfig: /** *配置处理器 */ publicvoidconfigHandler(Handlersme){ me.add(newCont

    2025年12月3日
    5
  • 19号拌面[通俗易懂]

    19号拌面[通俗易懂]这几天在上地主要在一家叫19号拌面的餐厅吃饭,面条很硬,味道也一般,项目的洽谈了1天半,感觉很疲惫,昨天是12点睡的,今天还不知道是什么时候?明天必须给出2套解决方案出来,客户也很精明,让我们把所有可

    2022年7月1日
    24
  • 80c51流水灯程序汇编语言,stc89c51单片机流水灯程序.doc

    80c51流水灯程序汇编语言,stc89c51单片机流水灯程序.doc..51单片机流水灯程序程序一(用C语言编的最基础的程序)#include#includesbitD0=P1^0;//位定义,把P1口的第一个管脚定义为D0sbitD1=P1^1;//位定义,把P1口的第二个管脚定义为D1sbitD2=P1^2;//位定义,把P1口的第3个管脚定义为D2sbitD3=P1^3;//位定义,把P1口的第4个管脚定义为D3sbitD4=P1^4;//…

    2022年5月1日
    49
  • 基本的导航条的制作

    基本的导航条的制作1、垂直导航条的制作一想到导航菜单就会想到用 ulli无序列表来制作。因为他的语义非常接近条目性的内容。<ulclass="nav"><li><ahref="#">首  页</a></li><li><ahref="#">关于我

    2022年7月22日
    9
  • 26款 流媒体服务器开源软件「建议收藏」

    26款 流媒体服务器开源软件「建议收藏」26款流媒体服务器开源软件1Flash流媒体服务器Red52DarwinStreamingServer3流媒体服务器OpenStreamingServer4MPEG4IP5开源流媒体平台FreeCast6

    2022年5月6日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号