ModBus_RTU通讯规约(本协议采用主从问答方式)1. 通讯数据的类型及格式:信息传输为异步方式,并以字节为单位。主站和从站之间传递的通讯信息为11位字格式:(1位起始位,8位数据位,1位停止位,无奇偶校验)。主机发给从机的一条完整信息帧由如下字节组成 数据格式地址码功能码数据区CRC校检码16位数据长度1字节1字节N字节2字节 从机发给主机的一条完整信息帧只包含有效字节,通讯数据(信息帧)格式数据格式地址码功能码数据区CRC校检码16位数据长度1字节1字节N字节2字节 地址码: 地址码是每次通讯信息帧的***字节(8位),从01H到FFH。每个从机都必须有的地址码。所有地址的从机都将接收由主机发送来的信息,只有符合地址码的从机才响应要求,回送信息。当从机回送信息时,回送数据均以各自的地址码开始。主机发送的地址码表明将发送到的从机地址,而从机返回的地址码表明回送的从机地址。功能码: 是每次通讯信息帧传送的***个字节。ModBus通讯规约可定义的功能码为0到127。FH控制器仅用到其中的一部分功能码。作为主机请求发送,通过功能码告诉从机应执行什么动作。作为响应,从机返回的功能码与从主机发送来的功能码一样,并表明从机已响应主机并且已进行相关的操作。数据区:数据区包括需要由主机发送、从机回送何种信息或执行什么动作。这些信息可以是数据(如:开关量、模拟量、寄存器参数等等)、参考地址等。例如,主机通过功能码03告诉从机返回单路或多路工况数据寄存器的值或单路或多路控制/报警设置数据寄存器的值(包含要读取寄存器的起始地址及读取寄存器的长度等),则返回的数据包括寄存器的数据长度及数据内容。对于不同的从机,地址和数据信息都不相同(见通讯信息表)。FH控制器采用Modbus通讯规约,主机(PLC、RTU、PC机、DCS等)利用通讯命令(功能码03),可以进任意行读取其数据寄存器(其数据信息表详见附录)。FH控制器的数据寄存器存储多种工况数据(如:温度、压力、流量、电流、电压、功率及控制/报警数据等),开关量以bit位为单元的二进制数组成(既8 bit为1个字节)多字节数据;模拟量、寄存器参数都是16位(2字节)的二进制数据(整型),低字节在前,高字节在后。工况数据转换方法:仪表回送的工况数据都是整数,上位机如果转换为实型,可以除十处理,如果转换成字符串型,可以直接将小数点插入在十位。如1:工况温度值=60.0,小数点在十位仪表回送数据=60010 =25816 = 00000010010110002FH控制器响应的命令格式是从机地址、功能码、数据区及CRC码。数据区的数据为多字节开关量数据或模拟量数据。 ★ 注:1、1个字节由8位二进制数组成(既8 bit)。 2、ModBus是Modicon公司的注册商标。 3、“从机”在本文件中既为本控制器。4、每次查询从机数据,数据区数据最多只能13个字(26个字节)2. 通讯信息传输过程:当通讯命令由发送设备(主机)发送至接收设备(从机)时,在CRC校验无误情况下,从机地址与地址码相符的从机接收通讯命令(从机以本机的地址码和功能码2个字节作为同步字),并根据功能码及相关要求处理信息,执行相应的任务,然后把执行结果(数据)返送给主机。返回的信息中包括地址码、功能码、执行后的数据以及CRC校验码。如果CRC校验出错则不响应信息3. FH控制器使用的MODBUS功能码(10进制)功能码定 义操 作(二进制)03读寄存器数据读取单路或多路工况数据;单路或多路控制/报警设置数据06写单个寄存器(状态量)写单个功能寄存器16写多个寄存器写多个功能寄存器或参数值到eeprom1) 功能码03:读从机工况数据例如:主机要读取地址为01,起始地址为从0x268h从机工况数据,8种16进制数据。从机(FH)数据寄存器的地址和数据为:寄存器地址寄存器数据(16进制)0x2681784H0x26a0000H0x26c178AH0x26e178AH0x270178AH0x272178AH0x274178AH0x276178AH主机发送的报文格式:主机发送字节数发送的信息举例说明从机地址101H 发送至地址为01的从机功能码103H 读取工况数据起始地址20268H 起始地址为0x268数据路数20008H 读取8种工况数据CRC码2XXXXH由主机计算得到CRC码从机(FH)响应返回的报文格式:从机响应字节数返回的信息举例说明从机地址101H 来自从机01功能码103H 读取工况数据 字节数10eH后面跟随数据的字节数***种工况数据21784H系统工作状态第2种工况数据20000H阀门开度给定第3种工况数据2178AH 阀门开度值第4种工况数据2178AH 模块温度第5种工况数据2178AH 母线电压第6种工况数据2178AH 电机速度第7种工况数据2178AH 电机电流值第8种工况数据2178AH 系统异常状态量CRC码2XXXXH 由从机计算得到CRC码2) 功能码03:读从机参数值例如:主机要读取地址为01,起始地址为从0x200h的从机参数值,13个16进制数据。从机(FH)数据寄存器的地址和数据为:寄存器地址寄存器数据(16进制)0x2001784H0x2020000H0x204 0x236 0x238178AH主机发送的报文格式:主机发送字节数发送的信息举例说明从机地址101H 发送至地址为01的从机功能码103H 读取参数值起始地址20200H 起始地址为0x200数据路数2000DH 读取13个参数值CRC码2XXXXH由主机计算得到CRC码从机(FH)响应返回的报文格式:从机响应字节数返回的信息举例说明从机地址101H 来自从机01功能码103H 读取工况数据 字节数11AH26个字节***个参数值21784H 第2个参数值20000H 第3个参数值2178AH 第4个参数值2178AH ***3个参数值2178AH CRC码2XXXXH 由从机计算得到CRC码 注:1、控制器共有42个工作参数,详细见附录22、所有参数须分四次传完(13*3+3)3) 功能码06:写单个寄存器主机利用这个功能码把数据保存到控制器的数据存储器中去(寄存器)。例如:主机要把0016H保存到从机0x0200寄存器中去(从机地址码为01)。通讯数据保存结束后,从机内0x0200寄存器为0001H:主机发送数据地址和数据为:寄存器地址 数据0x234 01主机发送的报文格式:主机发送字节数发送的信息举例说明从机地址101H 发送至从机01功能码106H写单路寄存器数据地址20x0200***项参数保存数据20x0001H CRC码2XXXXH由主机计算得到的CRC码从机(FH)响应返回的报文格式:主机发送字节数返回的信息举例说明从机地址101H发送至从机01功能码106H写多路寄存器数据地址20x0200***项参数保存数据20001H CRC码2XXXXH 由主机计算得到的CRC码4) 功能码16:写多个数据主机利用这个功能码把多个数据保存到从机的数据存储器中去(寄存器)。例如:主机要把04B0H,保存到从机***项参数中去;1388H保存到从机第2项参数中去(从机地址码为01)。通讯数据保存结束后,从机内 ***项参数为04B0H;、第2项参数为1388H:(参数首地址0X200H)主机发送数据地址和数据为:地址 数据0x200h04B0H0x202h1388H主机发送的报文格式:主机发送字节数发送的信息举例说明从机地址101H发送至从机01功能码110H写多路寄存器起始地址20x200H***项参数地址数据数20002H共2项参数数据保存数据1204B0H 保存数据221388H CRC码2XXXXH由主机计算得到的CRC码从机(FH)响应返回的报文格式:主机发送字节数返回的信息举例说明从机地址101H发送至从机01功能码110H写多路寄存器起始地址20x200H***项参数地址数据数20002H共2项参数数据CRC码2XXXXH由主机计算得到的CRC码 4. 错误校验码(CRC校验)主机或从机可用校验码进行判别接收信息是否正确。由于电子噪声或一些其它干扰,信息在传输过程中有时会发生错误,错误校验码(CRC)可以检验主机或从机在通讯数据传送过程中的信息是否有误,错误的数据可以放弃(无论是发送还是接收),这样增加了系统的安全和效率。MODBUS通讯协议的CRC(冗余循环码)包含2个字节,即16位二进制数。CRC码由发送设备(主机)计算,放置于发送信息帧的尾部。接收信息的设备(从机)再重新计算接收到信息的CRC,比较计算得到的CRC是否与接收到的相符,如果两者不相符,则表明出错。在进行CRC计算时只用8个数据位,起始位及停止位,如有奇偶校验位也包括奇偶校验位,都不参与CRC计算。CRC码的计算方法 1.预置1个16位的寄存器为十六进制FFFF(即全为1);称此寄存器为 CRC寄存器;2.把***个8位二进制数据(既通讯信息帧的***个字节)与16位的CRC 寄存器的低8位相异或,把结果放于CRC寄存器;3.把CRC寄存器的内容右移一位(朝低位)用0填补位,并检查***位(LSB位被提取出来检测);如果***位为1:移位后 CRC寄存器与多项式A001(1010 0000 0000 0001)进行异或;如果***位为0:不作处理;4.重复步骤3,直到右移8次,这样整个8位数据全部进行了处理;5.重复步骤2到步骤5,进行通讯信息帧下一个字节的处理;6.***得到的CRC寄存器内容即为:CRC码。注:报文中的CRC码低八位在前,高八位在后。5. 通讯错误信息及数据的处理: 当从机发现除了CRC码出错以外的错误时,必须向主机回送信息,并将接收到的功能码的位置为1,即从机返送给主机的功能码是在主机发送的功能码的基础上加128 。以下的这些代码表明有意外的错误发生。 从机接收到的信息如有CRC错误,则将被从机忽略。 从机返送的错误码的格式如下(CRC码除外): 地址码: 1字节 功能码: 1字节(位为1,例:03H功能码变为83H) 错误码: 1字节 CRC码:2字节。 从机响应回送如下错误码: 81:非法的数据位置。 ***的数据位置超出从机的范围。 82:非法的数据值。 接收到主机发送的数据值超出从机相应地址的数据范围。附录1:FH控制器MODBUS通讯规约信息表工况数据长度名称地址含义备注U16State0x268系统当前工作状态 U16Angle_give0x26a阀门开度给定 U16Angle_data0x26c阀门开度值 U16I_motor0x26e 0x274电机电流值 U16 0x270备用1 U16 0x272备用2 U16Sys_state 0x274系统异常信息 U16 0x276备用3 附录2:从机参数说明见“参数说明.xls”文档 附录3:控制指令说明1) 开阀运行:向从机0268H 地址单元写入 0003H2) 关阀运行:向从机0268H 地址单元写入 0004H3) 停止:向从机0268H 地址单元写入 0002H4) 远控模拟量控制:向从机0268H 地址单元写入 0001H5) 阀门开度给定值:向从机026AH 地址单元写入 XXXXH 附录4:工况数据数值说明1) 工况数据中***个字表示系统工作状态,数值含义如下: 0 全停状态1 自动状态2 就地状态 3 关阀状态4 开阀状态 2) 工况数据中***~六个字表示相应工况数值,含一位小数,即数值除十显示3) 工况数据中第七个字表示系统异常状态,数值每一位的含义如下: 0 位 开机械过力矩1 位 关机械过力矩2 位 开堵转 3 位 关堵转 4 位 开过流 5 位 关过流 6 位 参数异常 7 位 缺相8 位 断信号9 位 备用10位 电机过热 附录五:常用通讯字符串(16进制)工况数据读取06 03 02 68 00 09 04 1f初级参数读取106 03 40 00 00 0d 90 78初级参数读取206 03 40 1a 00 0d b1 bf二级参数读取106 03 40 30 00 0d 90 77二级参数读取206 03 40 4a 00 0d b1 ae参数查看读取106 03 40 70 00 0d 91 a3参数查看读取206 03 40 8a 00 0d b1 92***参数读取106 03 40 a0 00 0d 90 ******参数读取206 03 40 ba 00 0d b1 9d远程控制命令—模拟量控制06 06 02 68 00 01 c9 d9远程控制命令—停止06 06 02 68 00 02 89 d8远程控制命令—开阀06 06 02 68 00 03 48 18远程控制命令—关阀06 06 02 68 00 04 09 da远程控制命令—给定开度值06 06 02 6a 00 02 28 18远程控制命令—模拟量控制及给定开度值06 10 02 68 00 02 00 01 01 f4 1d d0 备注:FH控制器增加通讯控制参数选项:二级菜单---》远控控制方式---》总线型---》通讯控制设置为“有效”时,开关型状态下远程控制由PLC控制开阀、关阀、停止,外接端子上的相应节点无效,调节型状态下远程控制由PLC直接通过06或16命令给定开度值,外接端子上的4~20Ma输入节点信号无效。设置为“无效”时,开关型或调节型状态下远程控制均由外接端子上的相应节点起作用, PLC控制开关阀命令无效,但仍可进行常规工况数据读取。 |