电子开发 | 基础入门 | 电路原理图 | 姊舰鍥惧疄渚� | PLC鍩虹   銆婂鏋滃枩娆㈡湰绔欙紝璇锋寜 Ctrl+D 鎵嬪姩鏀惰棌锛佹劅璋㈡偍鐨勬敮鎸併€�涓€璧峰涔犱竴璧疯繘姝ワ紝鐢靛瓙寮€鍙戠帇娆㈣繋鎮紒.

电子开发网

电子开发网电子设计 | 电子开发网Rss 2.0 会员中心 会员注册

鈽呯數璺叕寮忔墜鍐岋紝鏈€鏂扮増銆婄數瀛愮數璺叕寮忚绠楀櫒銆嬶紝鐢佃矾鍏紡鏌ヨ鎵嬪唽 鐢佃矾鍏紡璁$畻鍣ㄣ€愮數瀛愪粠涓氫汉鍛樺繀澶囨墜鍐屻€�
鈽嗗崄澶╁浼氬崟鐗囨満瀹炰緥100 c璇█ chm鏍煎紡銆傝祫鏂欏唴瀹硅缁嗭紝瑕嗙洊渚嬪瓙澶氾紝鍐呭骞裤€愮數瀛愪粠涓氫汉鍛樺繀澶囨墜鍐屻€�
搜索: 您现在的位置: 电子开发网 >> 电子开发 >> PLC基础入门教程 >> 正文

MODBUS RTU/TCP协议及常用功能码详解

作者:佚名    文章来源:本站原创    点击数:6371    更新时间:2023/4/9

一、简介

ModBus是Modicon公司为其PLC通讯而开发的一种通讯协议。如今Modicon公司已经被施耐德收购成为了施耐德旗下品牌。从1979年问世至今,已经成为工业通讯领域的业界标准。
ModBus具有两种串行传输模式,ASCII 和 RTU。它们定义了数据如何打包、解码的不同方式。支持 Modbus 协议的设备一般都支持 RTU 格式。通信双方必须同时支持上述模式中的一种。

二、寄存器类型

MODBUS寄存器分类

寄存器种类 读写状态 数据类型 功能码 PLC地址
线圈寄存器 读/写 位(bit) 01H(读单/多个位); 05H(写单个位); 0FH(写多个位) 00001-09999
离散输入寄存器 只读 位(bit) 02H (读单/多个位) 10001-19999
保持寄存器 读/写 字(byte) 03H(读); 06H(写单个字节); 0FH(写多个字节) 30001-39999
输入寄存器 只读 字(byte) 04H (读单/多个字) 40001-49999

线圈寄存器:实际上可以表示一个开关量,线圈操作位(bit)一个bit对应一个开关信号,即(0/false,1/true),每个byte字节就能代表8个的位的开关信号,线圈寄存器支持读和写,Modbus的功能码又能对线圈的单个或多个进行一个读取写入操作,其实就是在操作字节的位。实对应上面的功能码也就是:0x01 0x05 0x0f

离散输入寄存器:离散输入寄存器就相当于线圈寄存器的只读模式,功能跟上面基本一致,除了不能写入。所以功能码也简单就一个读的 0x02

保持寄存器:保持寄存器是对字节进行的操作,每两个字节对应一个寄存器,支持读取和写入。功能码有对应的三个:0x03 0x06 0x10

输入寄存器:,这个和保持寄存器类似,但是也是只支持读而不能写。一个寄存器地址是占据两个byte的空间,也就是16个位。对应的功能码也就一个 0x04

言外之话:
当需要对保持寄存器操作时,不同的数据类型占据的字节长度其实是不一致的,一个寄存器地址占两个字节16位代表的只是一个单精度的数据。如C#的数据类型占据的长度如下
C# 数据类型和字节长度 
C# 数据类型和字节长度
所以在读取写入保持寄存器的时候不同类型需要读取不同长度的字节才能拿到对应类型的值,写入的时候同理。如(int类型读取2个数量为int的时候需要乘以2,也就是读取4个寄存器才能拿到两个int类型的数据

三、MODBUS常用功能码

功能码 名称 操作数据类型 作用描述 PLC地址
01H 读线圈寄存器 位(bit) 获得一组开关线圈的当前状态(ON/OFF ) 00001-09999
02H 读离散输入寄存器 位(bit) 获得一组开关线圈的当前状态(ON/OFF ) 10001-19999
03H 读保持寄存器 字(byte) 在一个或多个保持寄存器中取得当前的二进制值 30001-39999
04H 读输入寄存器 字(byte) 在一个或多个输入寄存器中取得当前的二进制值 40001-49999
05H 写单个线圈寄存器 位(bit) 设置一个单独的线圈状态(ON/OFF ) 00001-09999
06H 写单个保持寄存器 字(byte) 写单个保持寄存器,将两个字节写入到寄存器 40001-49999
0FH 写多个线圈寄存器 位(bit) 写多个线圈寄存器,可以设置多个bit开关状态 00001-09999
10H 写多个保持寄存器 字(byte) 写多个保持寄存器,将多个字节写入到寄存器 40001-49999

MODBUS通讯协议格式

读线圈寄存器——01H

从站发送读取格式:

从站地址 功能码 起始地址高位 起始地址低位 读取数量高位 读取数量低位 CRC高位 CRC低位
0x01 0x01 0x00 0x00 0x00 0x02 BD CB

主站返回读取格式:

从站地址 功能码 返回字节数 data1 CRC高位 CRC低位
0x01 0x01 0x01 0x00 51 88

解读:
发送格式:
从站地址:01
功能码:01
起始地址: 00 00
读取数量: 00 02
CRC校验:BD CB
接收格式:
从站地址:01
功能码:01
返回字节数: 01
Data数据: 00(一个byte有8个bit,读取两个bit返回会补成字节用一个byte返回读取两个bit就行)
CRC校验:BD CB

读离散输入状态——02H

从站发送读取格式:

从站地址 功能码 起始地址高位 起始地址低位 读取数量高位 读取数量低位 CRC高位 CRC低位
0x01 0x02 0x00 0x00 0x00 0x02 F9 CB

主站返回读取格式:

从站地址 功能码 返回字节数 data1 CRC高位 CRC低位
0x01 0x02 0x01 0x00 A1 88

读保持寄存器——03H

从站发送读取格式:

从站地址 功能码 起始地址高位 起始地址低位 读取数量高位 读取数量低位 CRC高位 CRC低位
0x01 0x03 0x00 0x00 0x00 0x02 C4 CB

主站返回读取格式:

从站地址 功能码 返回字节数 data1 data2 data3 data4 CRC高位 CRC低位
0x01 0x03 0x04 0x00 0x0A 0x00 0x00 0A 31

解析读取返回:

为啥读取是读取两个地址数量会返回四个byte字节?因为在保持寄存器里面两个字节才对应一个寄存器,你读取两个寄存器地址数量就需要四个字节来表示。
注意:在解析字节的时候数据的高低位顺序倒序后才能表示一个数据

读输入寄存器——04H

同读取保存寄存器一样的格式,同上

写单个线圈——05H

从站地址 功能码 起始地址高位 起始地址低位 data1 data2 CRC高位 CRC低位
0x01 0x05 0x00 0x00 0xFF 0x00 8C 3A

主站返回读取格式:

从站地址 功能码 起始地址高位 起始地址低位 写入数据高位 写入数据低位 CRC高位 CRC低位
0x01 0x05 0x00 0x00 0xFF 0x00 8C 3A

解析:
写入无误的话返回同发送指令一样;通断标志为FF00H表示写ON,0000H表示写OFF,

写单个保持寄存器——06H

将地址0的保存寄存器的数据设置为10(单精度)
从站地址 功能码 起始地址高位 起始地址低位 data1 data2 CRC高位 CRC低位
0x01 0x06 0x00 0x00 0x00 0x0A 09 CD

主站返回读取格式:
响应:同发送指令;

写多个线圈——0FH

从站地址 功能码 起始地址高位 起始地址低位 写入数量高位 写入数据低位 字节长度 data1 CRC高位 CRC低位
0x01 0x0F 0x00 0x00 0x00 0x02 0x01 0x03 9E 96

主站返回读取格式:
响应:

从站地址 功能码 起始地址高位 起始地址低位 写入数量高位 写入数据低位 CRC高位 CRC低位
0x01 0x0F 0x00 0x00 0x00 0x02 9E 96

返回数据格式不返回Data数据

详情:写入数量为2的线圈,其中data1数据0x03代表0000 0011 将连续两个线圈置为ON

写多个保持寄存器——10H

从站地址 功能码 起始地址高位 起始地址低位 写入数量高位 写入数据低位 字节长度 data1 data2 data3 data4 CRC高位 CRC低位
0x01 0x10 0x00 0x00 0x00 0x02 0x04 0x0C 0x02 0x12 0x45 9C 6C

主站返回读取格式:
响应:

从站地址 功能码 起始地址高位 起始地址低位 写入数量高位 写入数据低位 CRC高位 CRC低位
0x01 0x10 0x00 0x00 0x00 0x02 41 CB

返回数据格式不返回Data数据

详情:写入数量为2的线圈,其中data1,data2,data3,data4数据两个代表一个单精度数据
0C 02表示一个3074 ,12 45代表一个4677

MODBUS TCP通讯协议格式

ModbusTCP的数据帧可分为两部分:MBAP+PDU。

| 事务处理标识| 协议标识 | 字节长度 | 单元标识符 | 功能码 |起始地址H | 起始地址L |数量H | 数量L

事务处理标识 协议标识 字节长度 单元标识符 功能码 起始地址H 起始地址L 数量H 数量L
2字节 2字节 2字节 1字节 1字节 1字节 1字节 1字节 1字节

事务处理标识: 可以理解为报文的序列号,一般每次通信之后就要加1以区别不同的通信数据报文。
协议标识符: 00 00表示ModbusTCP协议。
字节长度: 表示接下来的数据长度,单位为字节
单元标识符: 可以理解为设备地址。

TCP跟RTU的协议格式其实基本上是一致的,只是TCP增加了报文头MBAP,取消了RTU的从站地址跟CRC校验


Tags:MODBUS通讯,功能码,TCP,RTU  
责任编辑:admin
相关文章列表
Modbus功能码04实例_20种PLC元件编号和Modbus编号地址对应表
影响人机界面与PLC通信速度的四个因素,关系PLC通讯速度几个方面
Modbus 的RTU、ASCII、TCP傻傻搞不清楚?一文全解读
modbus协议实例讲解,功能码和报文详解
分分钟玩转通讯!西门子plc的Modbus通讯MBUS_CTRL 、MBUS_MSG和M
学习s7-200之间的Modbus通讯_两个PLC互相通信,主站从站通讯
PLC控制伺服电机运动的完整案例(PLC设置伺服驱动参数)_ 丝杠运
MODBUS常用功能码
【ModBus】modbus之poll/slave工具使用教程(3)
modbus poll 使用教程  Modbus通讯
深度剖析西门子PLC的开放式TCP通信梯形图 TCP通讯
西门子S7-200通讯控制台达变频器,实例讲解Modbus RTU通讯
MODBUS协议用03功能码为什么既能读又能写寄存器地址?
MODBUS常用功能码学习及实例 modbus报文格式
Modbus功能码详解 读取线圈、保持寄存器
Modbus功能码介绍
Modbus-RTU通讯协议03功能码详解——小白一看就会的协议解析
MODBUS功能码实例  plc与仪表通信
modbus rtu六种功能码详细解析
modbus通讯协议功能码一览_ModBus功能码定义
Modbus协议——常用功能码详解
MODBUS协议整理——功能码简述 PLC地址和协议地址区别
西门子S7-200PLC通过Modbus库与智能仪表通讯
西门子S7-200CN与台达DVP14SS2之间的Modbus通讯连接mbus_msg
MODBUS RTU通讯协议在S7-200中的应用
PLC与变频器通讯方式,西门子S7-200与变频器之间的MODBUS通讯
请文明参与讨论,禁止漫骂攻击,不要恶意评论、违禁词语。 昵称:
1分 2分 3分 4分 5分

还可以输入 200 个字
[ 查看全部 ] 网友评论
    没有任何评论
推荐文章
鐢靛瓙寮€鍙戠綉锛氭眹闆嗙患鍚堝悇绫荤數瀛愬埗浣滀笌鐢佃矾鍥剧殑缃戠珯锛宲lc宸ユ帶鎶€鏈�,妯$數鏁扮數鐭ヨ瘑,鍗曠墖鏈篍DA绛夌瓑锛佽崯钀冪數璺浘缃戠珯绮惧崕锛屼负宸ョ▼甯堝垱閫犱环鍊笺€傛杩庡叧娉ㄥ井淇″叕浼楀彿锛氱數瀛愬紑鍙戠綉锛�
最新推荐
璧勬枡鍖呬笅杞�
 [闁告娲滄晶鏍嫉妤﹁法銈柡鍌︽嫹]闁告ぞ绀侀妵澶屸偓娑崇細缁变即宕¢弴鐘差暬闁哄牆鎼悿鍕瑹閿燂拷100 c閻犲浄鎷�
 [閺夌儐鍨▎銏㈢尵閿燂拷]濞戞挸顦宠ぐ绀烲C閻庢冻缂氱弧鍕鐠恒劍鍩傞弶鐑嗗灟濞嗩敩X-TR
 [闁活澀绲婚惌鐐鐠恒劍鍩傞悹浣瑰礃椤擄拷]LM324閺夆晜鍔栭弬锟�4~20mA閺夌儑鎷�1~5V闁汇垹鐏氱粊锟�
 [闁活澀绲婚惌鐐鐠恒劍鍩傞悹浣瑰礃椤擄拷]LM386濡炲湱绮悗顒佹媴閹捐顔婇柛蹇擃儔椤ユ捇寮ㄩ幆褋浜i柛锝冨妼鐢拷
 [闁活澀绲婚惌鐐鐠恒劍鍩傞悹浣瑰礃椤擄拷]936闁绘帒锕よぐ鎾偨娴e啰鐔呴柛妯煎枔閹﹪宕堕敓锟�
 [闁告娲滄晶鏍嫉妤﹁法銈柡鍌︽嫹]閻℃帒鎳庨敍鎰枖閵忥紕銈撮悹鐚存嫹+婵炴挴鏅涚€癸拷+闁硅翰鍎撮鐔兼儍閸曨偄绀�
 [闂侇偅姘ㄩ弫銈夋偨闂堟稓鎽嶉悹浣瑰礃椤撳憡娼娆愵偨]S7-200PLC闁汇劌瀚挒銏ゆ儑閻旀槒鎷ù鐙呮嫹 S7_2
 [閺夌儐鍨▎銏㈢尵閿燂拷]S7-200閹煎瓨鎸婚弸鍐╃鐠佸湱绀勯柛蹇g厜缁憋拷,STEP7
 [閺夌儐鍨▎銏㈢尵閿燂拷]ModbusPoll闁告粌顒爋dbusSalve闁稿骏鎷�
 [閺夌儐鍨▎銏㈢尵閿燂拷]STEP7婵☆垪鍓濈€氭瑩鏌岃箛鏂跨樄濞寸姰鍊曠花锟� Smart_
 [閺夌儐鍨▎銏㈢尵閿燂拷]Modbus閻犲鍟抽惁顖滃垝閸撗傜触 v1.024 缂備緤鎷�
 [閺夌儐鍨▎銏㈢尵閿燂拷]Modscan32闁告粌顒爋dsim32,modb
 [闁活澀绲婚惌鐐鐠恒劍鍩傞悹浣瑰礃椤擄拷]89c51闁稿繐顦遍悵娑㈠棘闁稖闆归柣顏嗗櫐缁辨獤rotues
 [闁活澀绲婚惌鐐鐠恒劍鍩傞悹浣瑰礃椤擄拷]濞戞挸娲ら崟楣冨储閸炴姰otues濞寸姾娉曞﹢锛勭矙鐎n亞纰嶆繝褎鍔楅悥锟�
 [闁活澀绲婚惌鐐鐠恒劍鍩傞悹浣瑰礃椤擄拷]51闁告娲滄晶鏍嫉閸濆嫬鍧婄紒瀣舵嫹 protues濞寸姾娉曞﹢锟�
鏈€鏂版枃绔�
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 在线帮助 - 文章列表
返回顶部
刷新页面
下到页底
晶体管查询