电工优优今天要和大家分享的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通讯协议功能码"相关知识,请收藏电工无忧吧。