您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > MODBUS规约与报文解析详细说明
回答请求MODBUS协议一般说明1.1.1交换特点MODBUS是一种主/从规约,它允许读或写一个或多个字(16位)操作,但任何情况下都不支持字节的读/写。信息交换是以主站采取主动实现的,即由主站启动交换。除广播命令外,所有的一个完整交换由下行和上行两个报文组成:·下行报文:主站发出的一个请求·上行报文:从站发回的一个回答主站设备m1设备m2······设备mn·········设备1设备1设备1设备0设备0设备0从站1从站2从站n图1.1一般信息交换图请求主站设备m1设备m2······设备mn·········设备1设备1设备1设备0设备0设备0从站1从站2从站n图1.2广播方式信息交换图自主站发出的请求,一般情况下,只可发送到某一指定的从站(由请求帧第一个字节中规定的从站号码来辨认),如图1.1所示。在广播方式下(从站号码为0),此请求则发送到全部从站,当然,规约规定广播命令必须是写命令,并且从站也不发送回答,如图1.2所示。1.1.2报文格式所有交换的RTU类型报文(帧),无论上/下行,具有相同的结构:从站号功能码数据区CRC16校验和1字节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功能码与数据分类在本手册中,功能码与相应的数据的对应关系如下所示:在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从站地址112功能码013起始地址高8位004起始地址低8位135数据个数高8位006数据个数低8位25CRC16--3.从站响应从站返回状态数据遵循:起始地址的状态用数据首字节的最低位分类前缀测点类型读操作功能码写操作功能码测点地址范围规约地址范围0xQ0105/150001~20480000~2047M0105/150001~40963000~70951xI020001~20480000~2047S020001~10243000~40233xAI040001~10240000~1023SOE040001~02562020~40674xAQ0306/160001~02560000~0255R0306/160001~40961000~5095Clock031610000~100046xV2021(LSB)表示,并遵循“低位向高位,低字节向高字节”按位持续存放。返回的状态个数不是8的整数倍,则在最高字节的多余位补“0”。状态表示:1=ON;0=OFF【示例】上例的从站响应信文如下:字节含义示例(Hex)1从站地址112功能码013字节数054数据(Q27-20)CD5数据(Q35-28)6B6数据(Q43-36)B27数据(Q51-44)0E8数据(Q56-52)1BCRC16--示例中,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读输入状态1.描述实现对从站中测点I和S(分类前缀为1x)ON/OFF状态的读请求。2.主站请求请求信文定义读取测点的起始地址和数量。起始规约地址为0:I1~I2048的地址为0~2047;S1~S1024的地址为3000~4023。【示例】在从站17读I20~I56字节含义示例(Hex)1从站地址112功能码023起始地址高8位004起始地址低8位135数据个数高8位006数据个数低8位25CRC16--3.从站响应从站返回状态数据遵循:起始地址的状态用数据首字节的最低位(LSB)表示,并遵循“低位向高位,低字节向高字节”按位持续存放。返回的状态个数不是8的整数倍,则在最高字节的多余位补“0”。状态表示:1=ON;0=OFF【示例】上例的从站响应信文如下:字节含义示例(Hex)1从站地址112功能码023字节数054数据(I27-20)CD5数据(I35-28)6B6数据(I43-36)B27数据(I51-44)0E8数据(I56-52)1BCRC16--示例中,I27-I20的状态返回为CDH(11001101B),则CDH的最高位(MSB)为I27的状态,最低位(LSB)为I20的状态。I27-I20的实际状态为ON-ON-OFF-OFF-ON-ON-OFF-ON。最后1个字节1BH表示I56-I52的状态:ON-ON-OFF-ON-ON。该字节的最高3位补“0”。2.3.303读保持型寄存器1.描述实现对从站中测点AQ、R和从站系统时间(分类前缀为4x)测值的读请求。2.主站请求请求信文定义读取测点的起始地址和数量。起始规约地址为0:AQ1~AQ256的地址为0~255;R1~R4096的地址为1000~5095;系统时间的地址为10000~10004。【示例】在从站17读AQ108~AQ110字节含义示例(Hex)1从站地址112功能码03字节含义示例(Hex)3起始地址高8位004起始地址低8位6B5数据个数高8位006数据个数低8位03CRC16--3.从站响应从站返回状态数据遵循:“高字节在前,低字节在后”持续存放。【示例】上例的从站响应信文如下:字节含义示例(Hex)1从站地址112功能码033字节数064数据Hi(Q108)025数据Lo(Q108)2B6数据Hi(Q109)007数据Lo(Q109)008数据Hi(Q110)009数据Lo(Q110)64CRC16--示例中,Q108-Q110的测值返回为022BH、0000H、0064H。4.读取系统时间系统时间的地址为10000~10004。【示例】在从站17读系统时间字节含义示例(Hex)1从站地址112功能码033起始地址高8位274起始地址低8位105数据个数高8位006数据个数低8位05CRC16--【示例】从站响应信文如下:字节含义示例(Hex)1从站地址112功能码033字节数0A4YearHi075YearLoD26Day0A7Month098HourHi009HourLo0C10Second0E11Minute0D12MsHi0113MsLo02CRC16--示例中,返回时间为:2002(07D2H)年9(09H)月10(0AH)日12(0CH)时13(0DH)分14(0EH)秒258(0102H)毫秒。2.3.404读输入型寄存器1.描述实现对从站中测点AI、和SOE事件缓冲区(分类前缀为3x)测值的读请求。2.主站请求请求信文定义读取测点的起始地址和数量。起始规约地址为0:AI1~AI1024的地址为0~1023;SOE1~SOE256的地址为2020~4067。【示例】在从站17读AI108~AI110字节含义示例(Hex)1从站地址112功能码043起始地址高8位004起始地址低8位6B5数据个数高8位006数据个数低8位03CRC16--3.从站响应从站返回状态数据遵循:“高字节在前,低字节在后”持续存放。【示例】上例的从站响应信文如下:字节含义示例(Hex)1从站地址112功能码043字节数064数据Hi(Q108)025数据Lo(Q108)2B6数据Hi(Q109)007数据Lo(Q109)008数据Hi(Q110)009数据Lo(Q110)64CRC16--示例中,Q108-Q110的测值返回为022BH、0000H、0064H。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,信文如下:字节含义示例(Hex)1从站地址112功能码043起始地址高8位074起始地址低8位EC5数据个数高8位006数据个数低8位08CRC16--【示例】从站响应信文如下:字节含义示例(Hex)1从站地址112功能码043字节数104SOE性质(1:OFF→ON;0:ON→OFF)015SOE事件标识016Month097Year(与2000的差)028Hour0B9Day0C10Second0E11Minute0D12MsHi(单位:0.1ms)0113MsLo(单位:0.1ms)0214SOE测点号Hi0015SOE测点号Lo0216预留数据0017预留数据0118预留数据0019预留数据00CRC16--示例中,SOE事件为:2002年9月12日11时13分14秒25.8毫秒SOE2动作(OFF→ON)。2.3.505强制单个线圈1.描述实现对从站中单个测点Q或M(分类前缀为0x)强制为ON或OFF状态的写请求。2.主站请求请求信文定义强制测点的地址和状态。起始规约地址为0:Q1~Q2048的地址为0~2047;M1~M4096的地址为3000~7095。强制数据:FF00H强制为ON;0000H强制为OFF。【示例】在从站17强制Q173为ON字节含义示例(Hex)1从站地址112功能码053起始地址高8位00字节含义示例(Hex)4起始地址低8位AC5强制数据高8位FF6强制数据低8位00CRC16--3.从站响应正确时,从站将请求信文原信返回。【示例】上例的从站响应信文如下:字节含义示例(Hex)1从站地址112功能码053起始地址高8位004起始地址低8位AC5强制数据高8位FF6强制数据低8位00CRC16--2.3.606写单个寄存器1.描述实现对从站中单个测点AQ或R(分类前缀为4x)测值的写请求。2.主站请求请求信文定义写测点的地址和值。起始规约地址为0:AQ1~AQ256的地址为0~255;R1~R4096的地址为1000~5095。【示例】在从站17强制R2=0003(R2地址为1001H)字节含义示例(Hex)1从站地址112功能码063起始地址高8位034起始地址低8位E95写值高8位006写值低8位03CRC16--3.从站响应正确时,从站将请求信文原信返回。【示例】上例的从站响应信文如下:字节含义示例(Hex)1从站地址112功能码063起始地址高8位034起始地址低8位E95写值高8位006写值低8位03CRC16--2.3.715强制多个线圈1.描述实现同时对从站中多个测点Q
本文标题:MODBUS规约与报文解析详细说明
链接地址:https://www.777doc.com/doc-6272251 .html