TON90B-1与上位机的MODBUS协议说明编写:审核:批准:TON90B-1与上位机的MODBUS协议说明-2-版本历史版本号修改人修改日期说明V1.0任善明2010-01-04初次版本V1.1征求意见稿王平2010-02-09修改文档格式字节定义有改动。TON90B-1与上位机的MODBUS协议说明-3-目录1适用范围_______________________________________________________12通讯约定_______________________________________________________13命令解释_______________________________________________________13.1查询功能码0X03__________________________________________________13.2设置功能码-0X80_________________________________________________34数据定义_______________________________________________________44.1地址表___________________________________________________________44.2控制器机型的定义_________________________________________________54.3波特率的定义_____________________________________________________64.4气体类型的定义___________________________________________________64.5气体单位的定义___________________________________________________65CRC16的校验算法_______________________________________________7TON90B-1与上位机的MODBUS协议说明-1-1适用范围本协议适用于ESC2000,TON80,TON90B-1,TON90B-8。2通讯约定TON90B-1控制器采用标准的MODBUSRTU模式(详细说明请参考标准MODBUS协议)。本协议定义了控制器能够认识使用的消息结构,制定了消息域格局和内容的公共格式。利用通讯命令,可以进行读取每个TON90B-1各支路的状态信息和设置信息等参数。为了提高总线利用率,本协议规定,4800波特率时,从机典型响应最大完成时间为200ms。如果主机在发送完一帧命令后,200ms内没有收完从机的响应信息,则可认为从机响应超时。串行通信口RS-485,异步通讯方式。数据传输速率:4800/9600B/S,可设置。设备出厂时默认为9600B/S。8位数据位,1位停止位,无校验。当传送2字节数据时,高8位在前,低8位在后;传送CRC16校验码时,也是高8位在前,低8位在后。TON90B-1在系统中的地址为:1~250可设定。3命令解释3.1查询功能码0X03此功能用于查询TON90B-1的设置信息和各支路的监控状态。TON90B-1与上位机的MODBUS协议说明-2-3.1.1上位机发送的数据格式03命令的主机发送的帧格式:说明:功能码固定为03。寄存器地址见4.1地址表。注意:此协议不同于ES2000的MODBUS协议,此协议完全符合MODBUS协议,地址以整型数对齐。寄存器个数为要读取的寄存器地址的个数,单位为整形数,即:主机读取1个整型数,TON90B-1返回2个字节;3.1.2TON90B-1返回的数据格式响应03命令的帧格式:说明:功能码固定为03。数据字节数以字节为单位。即:主机读取1个整型数,TON90B-1返回2个字节;地址表见4.1地址表。3.1.3错误的处理如果TON90B-1收到错误的信息,返回帧格式如下:返回功能码在收到的功能码基础上加0X80。错误码的定义如下:从机地址功能码寄存器开始地址寄存器个数CRC校验码1字节1字节(03)2字节2字节2字节从机地址功能码数据字节数数据区CRC校验码1字节1字节(03)1字节长度由数据字节数确定2字节地址功能码错误码CRC校验码1字节1字节1字节2字节TON90B-1与上位机的MODBUS协议说明-3-错误码定义0X02校验码错。0X03数据错误,查询超过100个整形数时,会返回此信息。3.1.4主机对信息处理的说明3.2设置功能码-0X80此功能码用于上位机设置控制器的机型、地址和波特率。3.2.1上位机发送的数据格式机型列表:见4.2控制器机型的定义;地址:1~250。254为广播地址,0代表不响应;波特率:见4.3波特率的定义。3.2.2TON90B-1返回的数据格式错误码定义0X00设置正确。0X02CRC校验码错。0X03数据错误,波特率地址不是9600或4800。从机地址功能码机型地址波特率CRC校验码1字节1字节(0x80)1字节1字节1字节2字节地址功能码返回码CRC校验码1字节1字节(0X80)1字节2字节TON90B-1与上位机的MODBUS协议说明-4-4数据定义4.1地址表地址为十进制。地址数据说明0000控制器类型,高字节在前,见附表。0001控制器的当前状态数据位号数据定义说明第8位主电状态:1:故障;0:正常第9位备电状态:1:故障;0:正常第10位是否有主电:1:无0:有第11位是否有备电:1:无0:有其他预留通道关闭状态:数据位号数据定义说明第0位通道1是否关闭:1:是;0:否第1位通道2是否关闭:1:是;0:否第2位通道3是否关闭:1:是;0:否第3位通道4是否关闭:1:是;0:否第4位通道5是否关闭:1:是;0:否第5位通道6是否关闭:1:是;0:否第6位通道7是否关闭:1:是;0:否第7位通道8是否关闭:1:是;0:否0002通道1的浓度值,高位在前0003通道1的状态数据位号数据定义说明第0位是否预热:1:是;0:否第1位是否故障:1:故障;0:正常第2位是否A1报警:1:是;0:否第3位是否A2报警:1:是;0:否第4位是否自检:1:是;0:否第5~15位预留,未使用0004通道2的浓度值0005通道2的状态0006通道3的浓度值0007通道3的状态0008通道4的浓度值0009通道4的状态TON90B-1与上位机的MODBUS协议说明-5-0010通道5的浓度值0011通道5的状态0012通道6的浓度值0013通道6的状态0014通道7的浓度值0015通道7的状态0016通道8的浓度值0017通道8的状态0018通道1的设置高字节:气体类型,见4.4气体类型的定义低字节:气体单位,见4.5气体单位的定义0019通道1的设置量程0020通道1的设置高字节:A1报警点相对量程的百分比低字节:A2报警点相对量程的百分比0021通道2的设置:类型和单位0022通道2的设置:量程0023通道2的设置:报警点0024通道3的设置:类型和单位0025通道3的设置:量程0026通道3的设置:报警点0027通道4的设置:类型和单位0028通道4的设置:量程0029通道4的设置:报警点0030通道5的设置:类型和单位0031通道5的设置:量程0032通道5的设置:报警点0033通道6的设置:类型和单位0034通道6的设置:量程0035通道6的设置:报警点0036通道7的设置:类型和单位0037通道7的设置:量程0038通道7的设置:报警点0039通道8的设置:类型和单位0040通道8的设置:量程0041通道8的设置:报警点4.2控制器机型的定义控制器代码所代表的机型TON90B-1与上位机的MODBUS协议说明-6-0.ES20001.TON802.TON90B3.ESC20004.ESC30005.TON966.ESC5007.FGS1000其他预留4.3波特率的定义波特率代码所代表的含义0.96001.48004.4气体类型的定义气体类型使用如下定义:#defineGAS_NONE0#defineGAS_FLA1//可燃气体#defineGAS_H22//氢气#defineGAS_CO3//一氧化碳#defineGAS_H2S4//硫化氢#defineGAS_NH35//氨气#defineGAS_CL26//氯气#defineGAS_O27//氧气#defineGAS_NO8//一氧化氮#defineGAS_SO29//二氧化硫#defineGAS_NO210//二氧化氮#defineGAS_CO211//二氧化碳#defineGAS_O312//臭氧#defineGAS_ETO13//环氧乙烷#defineGAS_HCN14//氢氰酸#defineGAS_HCL15//氯化氢#defineGAS_VOC16//可挥发液体4.5气体单位的定义气体单位使用如下定义:#defineUNIT_NONE0//无单位TON90B-1与上位机的MODBUS协议说明-7-#defineUNIT_LEL1//%LEL#defineUNIT_PPM2//ppm#defineUNIT_VV3//%V/V#defineUNIT_KPPM4//Kppm#defineUNIT_PERCENT5//%#defineUNIT_01NONE6//无单位,带小数点#defineUNIT_01LEL7//%LEL,带小数点#defineUNIT_01PPM8//ppm,带小数点#defineUNIT_01VV9//%V/V,带小数点#defineUNIT_01KPPM10//Kppm,带小数点#defineUNIT_01PERCENT11//%,带小数点从6~10的单位,表示气体量程和气体浓度带一位小数点。比如:如果支路模块的量程和单位为:100%LEL,当前检测到的气体浓度为50,那么支路模块上传的公共模块时,将数据分解为:量程:100,单位:UNIT_LEL,当前气体浓度:50。如果支路模块的量程和单位为:25.0ppm,当前检测到的气体浓度为5.1ppm,那么支路模块上传的公共模块时,将数据分解为:量程:250,单位:UNIT_01PPM,当前气体浓度:51。如果支路模块的量程和单位为:40.0%LEL,当前检测到的气体浓度为5.2%LEL,那么支路模块上传的公共模块时,将数据分解为:量程:400,单位:UNIT_01LEL,当前气体浓度:52。如果支路模块的量程和单位为:5.0(无单位),当前检测到的气体浓度为1.2,那么支路模块上传的公共模块时,将数据分解为:量程:50,单位:UNIT_01NONE,当前气体浓度:12。5CRC16的校验算法CRC16校验使用如下代码:constunsignedcharauchCRCHi[]={0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,