电子开发网

电子开发网电子设计 | 电子开发网Rss 2.0 会员中心 会员注册
搜索: 您现在的位置: 电子开发网 >> 电子开发 >> PLC基础入门教程 >> 正文

MODBUS常用功能码学习及实例 modbus报文格式

作者:佚名    文章来源:本站原创    点击数:    更新时间:2022-08-30

Modbus常用功能码学习及实例

一.MODBUS寄存器种类说明

虽然MODBUS支持诸多功能码,但其中只涉及到四种寄存器:线圈寄存器、离散输入寄存器、保持寄存器、输入寄存器。
只要搞清楚寄存器的本质和功能码的联系,其实理解功能码就很简单。

寄存器种类 读写状态 位操作字操作 适用功能码
线圈寄存器 读/写 01H(读); 05H(写单个位); 0FH(写多个位)
离散输入寄存器 只读 02H
保持寄存器 读/写 03H(读); 06H(写单个字节); 0FH(写多个字节)
输入寄存器 只读 04H

线圈寄存器:可以类比为开关量,每个bit都对应一个信号的开关状态。所以一个字节可以同时控制8路的信号。比如控制外部8路io的高低。 线圈寄存器支持读也支持写,比如控制或者读取电磁阀的开关志状态。对应的功能码有:0x01 0x05 0x0f

离散输入寄存器:离散输入寄存器相当于线圈寄存器的只读模式,每个bit表示一个开关量,而他的开关量只能读取,不能够写入。只能通过外部设定改变输入状态,比如我可以读取外部按键的按下还是松开,但是控制不了按键。对应的功能码有:0x02

保持寄存器:寄存器的单位不再是bit而是两个byte,也就是可以存放具体的数据量的,并且是可读写的。比如我不到那可以读取传感器报警上限下限,也可以设置它的大小。对应的功能码有:0x03 0x06 0x10

输入寄存器:输入寄存器相当于保持寄存器的只读模式,也是只支持读而不能写。一个寄存器也是占据两个字节的空间。比如通过读取输入寄存器获取现在的模拟量采样值。对应的功能码有 0x04

二.MODBUS部分功能码

MODBUS支持很多功能码,但是在实际应用的时候常用的也就那么几个。

上面介绍了Modbus的四个寄存器种类:线圈寄存器、离散输入寄存器、保持寄存器、输入寄存器,从寄存器角度理解了对应功能码。下面列出常用功能码,具体如下:

功能码 名称 数据类型 作用
0x01 读线圈寄存器 取得一组逻辑线圈的当前状态(ON/OFF )
0x02 读离散输入寄存器 取得一组开关输入的当前状态(ON/OFF )
0x03 读保持寄存器 整型、浮点型、字符型 在一个或多个保持寄存器中取得当前的二进制值
0x04 读输入寄存器 整型、浮点型 在一个或多个输入寄存器中取得当前的二进制值
0x05 写单个线圈寄存器 强置一个逻辑线圈的通断状态
0x06 写单个保持寄存器 整型、浮点型、字符型 把具体二进值装入一个保持寄存器
0x0f 写多个线圈寄存器 强置一串连续逻辑线圈的通断
0x10 写多个保持寄存器 整型、浮点型、字符型 把具体的二进制值装入一串连续的保持寄存器
三.MODBUS功能码实例

1.功能码:01H 读线圈寄存器

1)功能:读从站线圈寄存器,位操作,可读单个或者多个
2)主机发送指令:
主机发送数据包括:从站地址+功能码+寄存器起始地址+寄存器数量+校验码
假设从站地址为0x01,线圈寄存器开始地址0x0021,结束地址0x002c,即寄存器地址范围为:0x0021~0x0032,总共读取12个连续线圈的状态值,则主机发送指令如下图所示:

从站地址 功能码 寄存器起始地址高8位 寄存器起始地址低8位 寄存器数量高8位 寄存器数低8位 CRC校验低8位 CRC校验高8位
0x01 0x01 0x00 0x21 0x00 0x0c 0xXX 0xXX

3)从站响应返回:
从站响应返回数据包括:从站地址+功能码+返回字节数+数据值+校验码
其中,返回数据值的每一位对应线圈状态,线圈状态为ON时,其值为1;状态为OFF时,其值为0;
【数据以小端的形式进行存储,即最低有效位存放于内存最低位地址(位于二进制的右侧)。每8个位组成一个字节,当线圈的数量不是8的倍数时,剩余的位数添0补位。】

从站地址 功能码 返回字节数 data1 data2 CRC校验低8位 CRC校验高8位
0x01 0x01 0x02 0xCB 0x0B 0xXX 0xXX

本例中读取12个线圈,12/8商1余4,因此需要2个字节存放应答数据,返回字节数为2。
字节1存放线圈编号21~28的数值(小端字节序,线圈28的值存放在bit7,线圈21的值存放在bit0);
字节2存放线圈编号29~32的数值,剩余位数添0补位;

上表中data1表示0x0021-0x0028的线圈状态,data1的最低位代表最低地址的线圈状态;
data1:0xCB=1100 1011,则data1线圈状态如下表所示:

线圈地址 功能码 0x28 0x27 0x26 0x25 0x24 0x23 0x22 0x21
数值 0x01 1 1 0 0 1 0 1 1

data2表示地址0x0030-0x0038的线圈状态,不够8位,字节高位填充为0。
data2:0x0B=0000 1011,则data2线圈状态如下表所示:

线圈地址 功能码 0x30 0x2f 0x2e 0x2d 0x2c 0x2b 0x2a 0x29
数值 0x01 0 0 0 0 1 0 1 1

2.功能码:02H 读离散输入寄存器

1)功能:读离散输入寄存器,位操作,可读单个或多个,类似功能码0X01,此处省略;

3.功能码:03H 读保持寄存器

1)功能:读从站保持寄存器,字节操作,可读单个或者多个;每个保持寄存器占2个字节(16位);
2)主机发送指令:
主机发送数据包括:从站地址+功能码+寄存器起始地址+寄存器数量+校验码
假设从站地址为0x03,保持寄存器开始地址为0x003B,结束地址0x003D,即寄存器地址范围为:0x003B~0x003D,总共读取3个保持寄存器的数据,则主机发送指令如下图所示:

从站地址 功能码 寄存器起始地址高8位 寄存器起始地址低8位 寄存器数量高8位 寄存器数量低8位 CRC校验低8位 CRC校验高8位
0x03 0x03 0x00 0x3B 0x00 0x03 0xXX 0xXX

3)从站响应返回:
从站响应返回数据包括:从站地址+功能码+返回字节数+数据值+校验码

从站地址 功能码 返回字节数 data1H data1L data2H data2L data3H data3L CRC校验低8位 CRC校验高8位
0x03 0x03 0x06 0x1B 0x0B 0x0A 0x01 0xC2 0xDB 0xXX 0xXX

本例中读取3个保持寄存器,每个保持寄存器占2个字节,因此需要6个字节存放应答数据,返回字节数为6。
0x003B~0x003D保持寄存器的数值如下图所示:

寄存器地址 0x003D 0x003C 0x003A
数值 0xC2 DB 0x0A 01 0x1B 0B

4.功能码:04H 读输入寄存器

1)功能:读输入寄存器,字节操作,可读单个或多个,类似功能码0X03,此处省略;

5.功能码:05H 写单个线圈寄存器

1)功能:对单个线圈进行写操作,位操作,只能写一个。写入0xFF00表示将线圈置为ON,写入0x0000表示将线圈置为OFF,其它值无效;
2)主机发送指令:
主机发送数据包括:从站地址+功能码+寄存器起始地址+数据值+校验码
假设从站地址为0x03,线圈寄存器起始地址为0x0032,要将其设置为ON,则主机发送指令如下表所示:

从站地址 功能码 寄存器起始地址高8位 寄存器起始地址低8位 dataH dataL CRC校验低8位 CRC校验高8位
0x03 0x05 0x00 0x32 0xff 0x00 0xXX 0xXX

3)从站响应返回:
从站应答数据包括:从站地址+功能码+寄存器地址+写入值+校验码
如果数据成功写入,则应答数据与请求数据一样,如下表所示:

从站地址 功能码 寄存器起始地址高8位 寄存器起始地址低8位 dataH dataL CRC校验低8位 CRC校验高8位
0x03 0x05 0x00 0x32 0xff 0x00 0xXX 0xXX

6.功能码:06H 写单个保持寄存器|

1)功能:对单个保持寄存器进行写操作,字节操作,只能写一个。
2)主机发送指令:
主机发送数据包括:从站地址+功能码+寄存器起始地址+数据值+校验码
假设从站地址为0x01,线圈寄存器起始地址为0x0048,写入数值为0x1234,则主机发送指令如下表所示:

从站地址 功能码 寄存器起始地址高8位 寄存器起始地址低8位 dataH dataL CRC校验低8位 CRC校验高8位
0x01 0x06 0x00 0x48 0x12 0x34 0xXX 0xXX

3)从站响应返回:
从站应答数据包括:从站地址+功能码+寄存器地址+写入值+校验码
如果数据成功写入,则应答数据与请求数据一样。

Tags:功能码,modbus  
责任编辑:admin
相关文章列表
手把手带你搞懂Modbus通信协议 报文格式详解
寄存器PLC地址与寄存器modbus协议地址 三菱FX系列西门子s7系列pl
Modbus协议基本知识 Modbus地址范围对应表
Modbus-RTU协议解析
Modbus如何远距离传输? Modbus物联网
Modbus和RS485的关系是什么?
Modbus RS485接线方法  modbus接线方法 终端电阻
MODBUS调试工具(modscan32)使用说明-MODBUS调试工具(modscan32)如
RS-485终端电阻怎么接?485终端电阻接法解析
modbus通讯 RS-485终端电阻的重要性
Modbus功能码详解 读取线圈、保持寄存器
modbus协议地址和常用功能码,modbus详解
Modbus功能码介绍
Modbus网关的概念/功能/作用/特点
Modbus-RTU通讯协议03功能码详解——小白一看就会的协议解析
西门子plc SMART200 通过Modbus读取温湿度传感器数据梯形图实例
实现PLC与多台变频器的MODBUS/RTU通信   MODBUS协议报文格式
MODBUS功能码实例  plc与仪表通信
西门子plc modbus地址详解
s7-200与计算机modbus通讯案例,西门子S7-200 Smart Modbus通信介
Modbus通讯协议简介
电力仪表怎么设置modbus ,电力-MODBUS_RTU通讯规约
MODBUS规约报文解析
modbus rtu六种功能码详细解析
ModBus通信协议
modbus通讯协议功能码一览_ModBus功能码定义
西门子200SMART主站轮询MODBUS通信指令案例_梯形图实例
在通信程序中,如何实现PLC与多台变频器的MODBUS/RTU通信?
MODBUS-RTU数据帧格式、报文实例
modbus读取保持寄存器实例
请文明参与讨论,禁止漫骂攻击,不要恶意评论、违禁词语。 昵称:
1分 2分 3分 4分 5分

还可以输入 200 个字
[ 查看全部 ] 网友评论
推荐文章
最新推荐
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 在线帮助 - 文章列表
返回顶部
刷新页面
下到页底
晶体管查询