MODBUS规约与保文解析详细说明Word格式文档下载.docx
《MODBUS规约与保文解析详细说明Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《MODBUS规约与保文解析详细说明Word格式文档下载.docx(25页珍藏版)》请在冰豆网上搜索。
数据区
CRC16校验和
1字节
n字节
2字节
每帧报文包含4种类型的信息:
1.1.2.1从站号
从站号为1字节,取值范围为0~FFH.例外的,如果此值为0,则作为主站的广播信文标识.因此,物理上使用的从站号只能在01H~FFH之间(即1~255之间)。
1.1.2.2功能码
功能码为1字节,它被用来选择一个命令(读、写或回答校验是否正确等),有效功能码范围为1~255之间,本手册支持的功能码将在第2章中加以详述。
1.1.2.3数据区
数据区为n字节,它包含与功能码相关的一串十六进制数据。
2.1功能码概述
在本手册中,MODBUS使用如下的功能码:
功能码(十进制)
含义
01
读线圈状态
02
读输入状态
03
读保持型寄存器
04
读输入型寄存器
05
强制单个线圈
06
写单个寄存器
15
强制多个线圈
16
写多个寄存器
20
读变量
21
写变量
2.2功能码与数据分类
在本手册中,功能码与相应的数据的对应关系如下所示:
分类前缀
测点类型
读操作功能码
写操作功能码
测点地址范围
规约地址范围
0x
Q
05/15
0001~2048
0000~2047
M
0001~4096
3000~7095
1x
I
S
0001~1024
3000~4023
3x
AI
0000~1023
SOE
0001~0256
2020~4067
4x
AQ
06/16
0000~0255
R
1000~5095
Clock
10000~10004
6x
V
在MODBUS规约中,地址的起始编号为0。
如Q0005的规约地址为0004。
2.3功能码详解
2.3.101读线圈状态
1.描述
实现对从站中测点Q和M(分类前缀为0x)ON/OFF状态的读请求。
2.主站请求
请求信文定义读取测点的起始地址和数量。
起始规约地址为0:
Q1~Q2048的地址为0~2047;
M1~M4096的地址为3000~7095。
【示例】在从站17读Q20~Q56
字节
含义
示例(Hex)
1
从站地址
11
2
3
起始地址高8位
00
4
起始地址低8位
13
5
数据个数高8位
6
数据个数低8位
25
CRC16
-
3.从站响应
♦从站返回状态数据遵循:
起始地址的状态用数据首字节的最低位(LSB)表示,并遵循“低位向高位,低字节向高字节”按位持续存放。
♦返回的状态个数不是8的整数倍,则在最高字节的多余位补“0”。
♦状态表示:
1=ON;
0=OFF
【示例】上例的从站响应信文如下:
字节数
数据(Q27-20)
CD
数据(Q35-28)
6B
数据(Q43-36)
B2
7
数据(Q51-44)
0E
8
数据(Q56-52)
1B
示例中,
♦Q27-Q20的状态返回为CDH(11001101B),则CDH的最高位(MSB)为Q27的状态,最低位(LSB)为Q20的状态。
Q27-Q20的实际状态为ON-ON-OFF-OFF-ON-ON-OFF-ON。
♦最后1个字节1BH表示Q56-Q52的状态:
ON-ON-OFF-ON-ON。
该字节的最高3位补“0”。
2.3.202读输入状态
实现对从站中测点I和S(分类前缀为1x)ON/OFF状态的读请求。
I1~I2048的地址为0~2047;
S1~S1024的地址为3000~4023。
【示例】在从站17读I20~I56
数据(I27-20)
数据(I35-28)
数据(I43-36)
数据(I51-44)
数据(I56-52)
♦I27-I20的状态返回为CDH(11001101B),则CDH的最高位(MSB)为I27的状态,最低位(LSB)为I20的状态。
I27-I20的实际状态为ON-ON-OFF-OFF-ON-ON-OFF-ON。
♦最后1个字节1BH表示I56-I52的状态:
2.3.303读保持型寄存器
实现对从站中测点AQ、R和从站系统时间(分类前缀为4x)测值的读请求。
AQ1~AQ256的地址为0~255;
R1~R4096的地址为1000~5095;
系统时间的地址为10000~10004。
【示例】在从站17读AQ108~AQ110
“高字节在前,低字节在后”持续存放。
数据Hi(Q108)
数据Lo(Q108)
2B
数据Hi(Q109)
数据Lo(Q109)
数据Hi(Q110)
9
数据Lo(Q110)
64
♦Q108-Q110的测值返回为022BH、0000H、0064H。
4.读取系统时间
系统时间的地址为10000~10004。
【示例】在从站17读系统时间
27
10
【示例】从站响应信文如下:
0A
YearHi
07
YearLo
D2
Day
Month
09
HourHi
HourLo
0C
Second
Minute
0D
12
MsHi
MsLo
♦返回时间为:
2002(07D2H)年9(09H)月10(0AH)日12(0CH)时13(0DH)分14(0EH)秒258(0102H)毫秒。
2.3.404读输入型寄存器
实现对从站中测点AI、和SOE事件缓冲区(分类前缀为3x)测值的读请求。
AI1~AI1024的地址为0~1023;
SOE1~SOE256的地址为2020~4067。
【示例】在从站17读AI108~AI110
4.读取SOE事件
♦SOE事件缓冲区最多可存放256个SOE事件,超过256个事件时,用新事件覆盖最老的事件(如第257事件覆盖第1个事件,依此类推)。
♦SOE当前事件缓冲区空指针SOE_PTR为1个字,存放在S区中:
SOE_PTRbit0-bit15=S897-S912。
♦SOE_PTR可能取值=2021+N%256×
8
其中:
N为当前SOE事件个数;
2021为SOE事件缓冲区虚拟偏址首址,规约地址为2020;
8为SOE事件缓冲区中,相邻事件的地址间隔。
即为8个字。
【示例】从站17中,上次SOE_PTR值为2029(1个SOE事件),本次取值为2037(2个SOE事件),表明新产生1个SOE事件。
此时需读取第2个SOE事件,地址为2028,读取长度为8,信文如下:
EC
08
SOE性质
(1:
OFF→ON;
0:
ON→OFF)
SOE事件标识
Year(与2000的差)
Hour
0B
Day
MsHi(单位:
0.1ms)
MsLo(单位:
14
SOE测点号Hi
SOE测点号Lo
预留数据
17
18
19
♦SOE事件为:
2002年9月12日11时13分14秒25.8毫秒SOE2动作(OFF→ON)。
2.3.505强制单个线圈
实现对从站中单个测点Q或M(分类前缀为0x)强制为ON或OFF状态的写请求。
♦请求信文定义强制测点的地址和状态。
♦强制数据:
FF00H强制为ON;
0000H强制为OFF。
【示例】在从站17强制Q173为ON
AC
强制数据高8位
FF
强制数据低8位
正确时,从站将请求信文原信返回。
2.3.606写单个寄存器
实现对从站中单个测点AQ或R(分类前缀为4x)测值的写请求。
请求信文定义写测点的地址和值。
R1~R4096的地址为1000~5095。
【示例】在从站17强制R2=0003(R2地址为1001H)
E9
写值高8位
写值低8位
2.3.715强制多个线圈
实现同时对从站中多个测点Q或M(分类前缀为0x)强制ON或OFF的写请求。
♦请求信文定义强制测点的起始地址、数量、强制状态。
♦强制状态按位表示,遵循:
♦强制状态表示:
【示例】在从站17强制Q29~Q20为
OFF-ON-ON-ON-OFF-OFF-ON-ON-OFF-ON,则数据为CDH、01H
Bit:
1100110100000001
Q:
2726252423222120------2928
0F
强制个数高8位
强制个数低8位
强制数据字节数
强制数据字节1
强制数据字节2
正确,从站返回强制测点的起始地址、数量。
2.3.816写多个寄存器
实现对从站中多个测点AQ或R(分类前缀为4x)的写请求,设置从站系统时间。
请求信文定义请求写操作测点的起始地址、数量和值。
【示例】在从站17写R2~R3为000AH、0102H
写寄存器个数高8位
写寄存器个数低8位
写数据字节数
寄存器1数据高8位
寄存器1数据低8位
寄存器2数据高8位
寄存器2数据低8位
正确,从站返回写测点的起始地址、数量。
4.设置系统时间
【示例】设置从站17系统时间为:
2002(07D2H)年9(09H)月10(0AH)日12(0CH)时13(0DH)分14(0EH)秒0(0000H)毫秒。
14030FA0005445C6
1401000000B77EB9
1401000000B77EB9
ymxkll15
MODBUS报文解析(高字节在前低字节在后)
主站下发报文
1403400000205317代表从4000寄存器开始查询32个遥测(03)17是结束字符53是校验码0020是查询个数
1401000000203F17代表从0000寄存器开始查询32个遥信(01)从站地址是20(14H)
遥信返回报文140105CD6BB20E1BXX(校验)14是地址01是遥信(线圈状态)05是回的YX报文组数(每组报文十六进制转换成2进制每位表示一个线圈状态)。
第一个数据字节的LSB为查询中的寻址地址,
其他的线圈按顺序在该字节中由低位向高位排列,直至8个为止,
下一个字节也是从低位向高位排例
线圈27-20的状态用CDH表示,二进制值为11001101,该字
节的MCB为线圈27,LSB为20。
线圈从左(27)向右(20)状态分
别为ON-ON-OFF-OFF-ON-ON-OFF-ON,因此第一个字节中的线
圈从左到右应是27-20。
下一个字节的线圈应为35至28。
位数据
串行转输从低位到高位,即20…27,28…35。
最后一个数据字节中,56-52线圈的状态为1BH(或二进制
00011011),线圈56是左数第4位,线圈52是该字节的最低位,
所线圈56至52的状态分别为ON-ON-OFF-ON-ON注意3个剩余
位(至最高位的数)全部填0
5208报文实例
上行通道1☆↓↓1403400000205317
上行通道1★↓↓1403400000205317
上行通道1★↑↑1403400031002F002E002F000F07090709070C00000021002200250024002300210022000A0703070306FB06690093009600960415040C041300990025003B067C07083E2C(3100是第一个YC的值。
一共32个YC,最后一位是校验码。
两个字节一个量,高在前低在后)