1ES2000Modbus协议1.协议概述ES2000控制器采用标准的ModbusRTU模式(详细说明请参考标准modbus协议)。本协议定义了控制器能够认识使用的消息结构,制定了消息域格局和内容的公共格式。利用通讯命令,可以进行读取每个ES2000模块的内部时间、气体量程单位、气体类型、报警点设定状态以及气体浓度和其它报警情况等系统参数。为了提高总线利用率,本协议规定,4800波特率时,从机典型响应最大完成时间为200ms。如果主机在发送完一帧命令后,200ms内没有收完从机的响应信息,则可认为从机响应超时。2.物理接口1)串行通信口RS-485,异步通讯方式。2)数据传输速率:4800/9600B/S,可设置。设备出厂时默认为9600B/S。8位数据位,1位停止位,无校验。每个字节传输的位序列如下:启始位12345678停止位3)当传送2字节数据时,高8位在前,低8位在后;传送CRC16校验码时,也是高8位在前,低8位在后。4)ES2000在系统中的地址为:1~250可设定。3.功能码03ES2000控制器采用ModbusRTU通讯规约,利用03命令,进行读取点(“保持寄存器”)或返回值(“输入寄存器”)。ES2000协议规定一次能读取一个或多个寄存器地址。与标准MODBUS协议不同的是,此处每个寄存器地址为单字节型地址(即每个地址占1个字节),而寄存器个数为要读取的寄存器地址总数除2。比如:要读取A1报警点(由A1报警点高字节和A1报警点低字节两个字节的信息组成),寄存器开始地址为0x000A,寄存器个数为0x0001。3.1主机发送03命令03命令的主机发送的帧格式:说明:功能码固定为03。寄存器地址参见后面的地址列表,高字节在前,低字节在后。寄存器个数为要读取的寄存器地址的个数除2;占2个字节,高字节在前,低字节在后。CRC校验码为2个字节,高字节在前,低字节在后。发送命令举例:从机地址为01,起始地址0002的4个寄存器地址。主机发送:010300020004CRC高字节CRC低字节从机地址功能码开始地址寄存器个数CRC校验码从机地址功能码寄存器开始地址寄存器个数CRC校验码1字节1字节2字节2字节2字节23.2从机响应03命令响应03命令的帧格式:说明:功能码固定为03。数据区的数据请参考后面的地址列表(由开始寄存器地址指定的地址列表处的数据含义);如果两字节表示一个整型时,高位在前,低位在后。CRC16校验码高8位在前,低8位在后。从机响应命令举例:从机返回4个字节数据,数据为08041103从机返回帧:01030408041103CRC高字节CRC低字节从机地址功能码字节数数据区CRC校验码3.3.功能码03寄存器定义说明列表地址数据类别说明0000设备类别ES2000机固定为00001预热标志1:系统预热,0:预热完毕、正常运行0002年数据为实际年份-2000如:04则表示2004年0003月0004日0005小时0006分0007秒0008数值单位+气体单位高4位为数值单位,低4位为气体单位气体单位1:V/V2:LEL3:PPM4:KPPM5:保留数值单位代码(用法见地址0AH~15H之说明)0:数值单位为11:数值单位为0.12:数值单位为0.013:数值单位为0.0010009气体类型ES2000保留固定为0000AA1报警点的高字节报警点=(报警点的高字节×256+报警点的低字节)*数值单位。数值单位在0008地址的高4位中。000BA1报警点的低字节000CA2报警点的高字节000DA2报警点的低字节000EA3报警点的高字节000FA3报警点的低字节0010A4报警点的高字节0011A4报警点的低字节0012量程高字节量程=(量程高字节×256+量程低字节)*数值单位。数值单位在0008地址的高4位中。0013量程低字节0014浓度高字节浓度=(浓度高字节×256+浓度低字节)*数值单位。数值单位在0008地址的高4位中。0015浓度低字节0016探测器状态0:正常1:传感器故障2:A1报警3:A2从机地址功能码数据字节数数据区CRC校验码1字节1字节1字节长度由数据字节数确定2字节30017备用电源状态0:正常1:故障2:欠压0018交流供电状态0:正常1:故障2:欠压0019保留保留001A声音控制状态0:无事件(只读)1:消音(读写)2:报出声音(读写)3:解除报警(只写)其他:保留,不做任何处理001B保留保留001C~001E预留保留目前固定为0注意:上面地址列表中的每个寄存器地址的为8位,即1个字节。例1:读取量程:开始寄存器地址:0x0012读取寄存器长度:1例2:读取浓度:开始寄存器地址:0x0014读取寄存器长度:14.功能码05上位机通过05命令控制ES2000报警控制器在事件(故障或报警)状态下的声音输出,并且在控制器发生报警时,当现场的浓度恢复后能解除控制器的报警状态。上位机只能对0x0019地址使用0x05命令,其他寄存器地址为只读寄存器。当ES2000报警控制器未发生故障或报警时,只回应答帧,而不记录消音状态;当ES2000报警控制器未发生故障或报警时,上位机可以发送05命令控制ES2000的声音输出;当ES2000报警控制器有事件并处于被消音状态时,如果发生更高级事件,则自动恢复到报出声音状态;如果发生报警,在现场的浓度恢复后能解除控制器的报警状态。4.1主机发送05命令05命令的主机发送的帧格式:说明:功能码固定为05。寄存器地址固定为0x001A,高字节在前,低字节在后。数据区为控制命令,内容参考地址列表中此地址的说明;占2个字节,控制命令在高字节中,低字节为0。CRC校验码为2个字节,高字节在前,低字节在后。发送命令举例:地址为01的从机消音。主机发送:0105001A0100CRC高字节CRC低字节从机地址功能码寄存器地址控制命令CRC校验码4.2从机响应05命令响应05命令的帧格式:说明:从机地址功能码寄存器地址数据区CRC校验码1字节1字节2字节控制命令2字节2字节从机地址功能码数据字节数数据区CRC校验码1字节1字节1字节控制命令2字节2字节4功能码固定为05。数据字节数固定为2个字节。数据区的数据与主机发送的控制命令相同。CRC16校验码高8位在前,低8位在后。从机响应命令举例:从机返回帧:0105020100CRC高字节CRC低字节从机地址功能码字节数控制命令CRC校验码5.错误返回如果主机发出的数据地址错误或数据值错误,则ES2000报警器向主机回送错误信息,功能码的最高位为1,即ES2000报警器返回给主机的功能码是在主机已送的功能码上加128。从设备回应的错误帧也遵循Modbus协议的帧格式。5.1错误应答帧格式说明:功能码的高位为1。错误码参考下面的错误信息列表。CRC校验码的字节顺序为:高字节在前,低字节在后5.2错误信息列表6CRC校验生成CRC-16校验字节的步骤如下:①装如一个16位寄存器,所有数位均为1。②该16位寄存器的高位字节与开始8位字节进行“异或”运算。运算结果放入这个16位寄存器。③把这个16寄存器向右移一位。④若向右(标记位)移出的数位是1,则生成多项式1010000000000001和这个寄存器进行“异或”运算;若向右移出的数位是0,则返回③。⑤重复③和④,直至移出8位。⑥另外8位与该十六位寄存器进行“异或”运算。地址功能码错误码CRC校验码1字节1字节1字节2字节错误码错误信息01收到错误的功能码,本协议只用03和16(10H)功能,如果收到其它码,则返回01错误码。02CRC校验码错。03非法的数据地址:接收到的数据地址超出ES2000的范围。5⑦重复③~⑥,直至该报文所有字节均与16位寄存器进行“异或”运算,并移位8次。⑧这个16位寄存器的内容即2字节CRC错误校验,被加到报文的最高有效位。校验算法请参考附件“CRC16校验算法”7.通讯线路连接ES2000控制器接线端子说明:连接说明:ES2000控制器与公共模块连接时,把ES2000控制器的“通讯信号+“(见上图)与公共模块的”ES2000通讯+“(见公共模块说明书)相连,ES2000控制器的”通讯信号-“与公共模块的”ES2000通讯-“相连。ES2000控制器与PC或PLC通讯时,把ES2000控制器的“通讯信号+“(见上图)连接到主设备的”A端口”,把ES2000控制器的“通讯信号-“(见上图)连接到主设备的”B端口”。8.协议技术支持如有协议的任何问题,请联系:深圳特安电子有限公司研发中心(0755)86186509刘工(0755)86186571周工附件:CRC16校验算法6constunsignedcharauchCRCHi[]={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,0xC1,0x81,0x40,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,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,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};/*TableofCRCvaluesforlow-orderbyte*/constunsignedcharauchCRCLo[]={0x00,0xC0,0xC1,0x01,0xC3,0x