Modbus通讯命令格式及功能码

发布日期:2022-12-05
Modbus通讯命令格式及功能码

电工优优今天要和大家分享的Modbus通讯命令格式及功能码相关信息,接下来我将从modbus通讯地址表,modbus通讯协议,modbus通讯协议功能码这几个方面来介绍。

Modbus通讯命令格式及功能码

1 命令格式

MODBUS 协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。特定总线或网络上的MODBUS 协议映射能够在应用数据单元(ADU)上引入一些附加域。通用Modbus帧如下图。

以下介绍常见功能码与PDU。

2常见的功能码

功能码(HEX)

名称

作用

01

读线圈状态

读离散输出位

02

读输入状态

读离散输入位

03

读保持寄存器

 

04

读输入寄存器

读16位寄存器,常用于读取整数或者浮点数

05

写单个线圈

写数据使线圈On/OFF

06

写单个寄存器

16位格式写数据

08

回路诊断

检测通讯端口

15

写多个线圈

写数据使多个线圈ON/OFF

16

写多个寄存器

16位格式写数据

功能码 01

01用于读数字量模块的输出状态。

请求指令的格式为:

模块地址

功能码

起始地址高字节

起始地址低字节

线圈个数

高字节

线圈个数

低字节

例:读模块第1~8个线圈(地址为00017~00024)00017为11h

请求指令:01 01 00 1100 08

响应指令的格式为:

模块地址

功能码

字节个数

数据

数据

例:线圈2与7 为ON,其他为OFF

响应为:01 01 0142

42h 即为二进制的0100 0010

功能码 02

02用于读数字量模块的输入状态。

请求指令的格式为:

模块地址

功能码

起始地址高字节

起始地址低字节

线圈个数

高字节

线圈个数

低字节

例:读模块第1~8个通道的输入(地址为00001~00008)

请求指令:01 02 00 0100 08

响应指令的格式为:

模块地址

功能码

字节个数

数据

数据

例:输入2与3 为ON,其他为OFF

响应为:01 02 01 60

60h 即为二进制的0110 0000

功能码 03/04

03/04用于读模块的寄存器的值。

请求指令的格式为:

模块地址

功能码

起始地址高字节

起始地址低字节

寄存器个数

高字节

寄存器个数

低字节

例:读模拟量输入第1~2个通道的输入(地址为40001~40002)

请求指令:01 04 0001 00 02

响应指令的格式为:

模块地址

功能码

字节个数

数据

数据

模拟量实际值与寄存器数据的对应关系:

若寄存器为16位。则最小值为0,最大值为FFFF,0对应量程最小值,FFFF对应量程最大值。假设量程为4~20mA,则0对应4mA,FFFF对应20mA

例:模拟量为0~10V,输入通道1的值为5V,通道2的值为6.5V

响应为:01 04 04 7F FF A6 65。 7FFF对应5V,A665对应6.5V。

(一个指令来回的字节数是6+2+3+2*8+2=29个字节)

功能码 05

05用于写线圈为ON/OFF。ON/OFF的状态用数据序列表示。FF 00hex表示为ON,00 00hex表示为OFF,FF FF hex表示 释放。

请求指令的格式为:

模块地址

功能码

起始地址高字节

起始地址低字节

强制数据的

高字节

强制数据的

低字节

例:设置线圈3(地址为00003)为ON

请求指令:01 05 0003 FF00

响应指令的格式为:

模块地址

功能码

起始地址高字节

起始地址低字节

设置数据的

高字节

设置数据的

低字节

响应指令为请求指令的重复。

功能码 06

06用于写单个寄存器的值。

请求指令的格式为:

模块地址

功能码

起始地址高字节

起始地址低字节

设置数据的

高字节

设置数据

低字节

例:设置寄存器40002的值为00 04 h

请求指令:01 06 0002 00 04

响应指令的格式为:

模块地址

功能码

起始地址高字节

起始地址低字节

设置数据的

高字节

设置数据

低字节

响应指令为请求指令的重复。

功能码 08

08用于诊断回路。发送的信息可以为任意长度,其最大值为数据缓冲器的长度减去8个字节。

请求指令的格式为:

模块地址

功能码

任意数据

例:

请求指令:01 08 0002 00 04

响应指令的格式为:

模块地址

功能码

任意数据

例:

响应为:01 08 0002 00 04

功能码 15(0Fh)

15用于设置线圈序列的值为ON/OFF

请求指令的格式为:

模块地址

功能码

起始地址高字节

起始地址低字节

线圈个数

高字节

线圈个数

低字节

字节数

设置数据的高字节

设置数据的低字节

例:设置10个线圈的值,起始地址为00017(11hex)

请求指令:01 0F 00 11 00 0A 02 CD 01。CD 01 等价于二进制的11001101 0000 0001。

响应指令的格式为:

模块地址

功能码

起始地址高字节

起始地址低字节

线圈个数的

高字节

线圈个数的

低字节

例:01 0F 00 11 00 0A

功能码 16(10h)

16用于设置多个保持寄存器的值

请求指令的格式为:

模块地址

功能码

起始地址高字节

起始地址低字节

寄存器个数的高字节

寄存器个数的低字节

字节数

数据

例:设置通道1(地址为40009)的值为100.0

请求指令:01 10 0009 00 02 04 42 C8 00 00。

响应指令的格式为:

模块地址

功能码

起始地址高字节

起始地址低字节

寄存器个数的高字节

寄存器个数的低字节

例:01 10 00 0900 02

以上就是"电工优优"为大家介绍的modbus通讯地址表的相关信息,想了解更多"Modbus通讯命令格式及功能码,modbus通讯地址表,modbus通讯协议,modbus通讯协议功能码"相关知识,请收藏电工无忧吧。