NB-Iot系列消防产品/WIFI系列消防产品/智慧用电系统/智慧消防水系统/消防主机联网系统/用户传输装置
服务热线
全国客服热线:

13911299113

技术学堂

用电量监控通信协议-HJ212(7.8修改)

附件:
 
 
用电量监测通信协议
 

目  录
 
目  录.................................................................................................................. - 2 -
1 概述.................................................................................................................. - 3 -
1.1 引用标准........................................................................................................ - 3 -
1.2 专用术语........................................................................................................ - 3 -
2 通讯协议........................................................................................................... - 3 -
2.1.1 请求响应定义.............................................................................................. - 3 -
2.2 命令列表........................................................................................................ - 4 -
2.3 CRC算法........................................................................................................ - 4 -
3 指令流程说明.................................................................................................... - 7 -
3.1 指令:9021(现场机登录(扩充指令))........................................................ - 7 -
3.2 指令:2011(实时数据上传)....................................................................... - 8 -
3.3 指令:9014(数据消息应答(扩充机制)).................................................. - 9 -
3.4 指令:9015(心跳检测(扩充指令))......................................................... - 9 -
3.5 指令:9013(通知消息应答(扩充机制)).................................................. - 9 -

 

1概述

1.1引用标准

       在本通信协议编制过程中,参考或直接引用了如下国家标准、行业标准。
  1. HJ/T212-2005污染源在线自动 监控(监测)系统数据传输标准;
  2. GB/T16706-1996 环境污染源类别代码;

1.2专用术语

环境自动监测系统:由对污染源主要污染物排放、环境质量监测点实施监控的现场机、上位机组成。
上位机:安装在各级环保部门,有权限对现场机发出查询和控制等本规范规定指令的数据接收和数据处理系统,包括计算机信息终端设备、监控中心系统等。
现场机:是一个数据采集子系统,安装在监测点或污染源排放口现场,是环境质量监测、污染治理设施的组成部分,用于监测监测点环境质量参数、监控污染源排污状况及完成与上位机的数据通讯传输的单台或多台设备及设施,包括监控(监测)仪器、流量(速)计、污染治理设施运行记录仪和数据采集传输仪等自动监控仪器。
数采仪:数据采集传输仪,采集各种类型监控仪器仪表的数据、完成数据存储及与上位机数据通讯传输功能的单片机、工控机、嵌入式计算机或可编程控制器等。

2通讯协议

2.1请求响应定义

接收数据包响应返回值定义表(9013,9014指令的QnRtn字段的值)
序号 执行结果编码 描述 备注
1 1 数据包验证通过 ,准备执行指令  
2 2 请求被拒绝  
3 3 密码错误  
4 4 指令校验码错误  
5 5 未登录系统  
6 6 指令字段格式错误  
7 7 不支持的指令  
8 8 当前状态不能执行该指令 上位机数据库异常等导致指令不能执行
9 9 上位机中现场机设备信息不存在,不能执行指令  

2.2命令列表

命令列表(可扩充)
命令名称 命令编号 命令类型 描述
上位向现场 现场向上位
上传实时数据   2011 上传命令 用于现场机自动发送实时数据。
交互命令
命令名称 命令编号 命令类型 描述
上位向现场 现场向上位
通知应答 9013 9013 系统交互 用于回应通知命令
数据应答 9014 9014 系统交互 用于数据应答命令
登陆注册
(扩充指令)
  9021 通知命令 用于现场机向上位机的登录请求。
回应登录注册结果(扩充指令) 9021   通知命令 用于上位机通知现场机登录注册的结果。
           

2.3CRC算法

HJ/T 212-2005中的CRC算法统一使用以下CRC算法,
 
crc crcTable[256] =
{
    0x0000, 0x8005, 0x800f, 0x000a, 0x801b, 0x001e, 0x0014, 0x8011,
    0x8033, 0x0036, 0x003c, 0x8039, 0x0028, 0x802d, 0x8027, 0x0022,
    0x8063, 0x0066, 0x006c, 0x8069, 0x0078, 0x807d, 0x8077, 0x0072,
    0x0050, 0x8055, 0x805f, 0x005a, 0x804b, 0x004e, 0x0044, 0x8041,
    0x80c3, 0x00c6, 0x00cc, 0x80c9, 0x00d8, 0x80dd, 0x80d7, 0x00d2,
    0x00f0, 0x80f5, 0x80ff, 0x00fa, 0x80eb, 0x00ee, 0x00e4, 0x80e1,
    0x00a0, 0x80a5, 0x80af, 0x00aa, 0x80bb, 0x00be, 0x00b4, 0x80b1,
    0x8093, 0x0096, 0x009c, 0x8099, 0x0088, 0x808d, 0x8087, 0x0082,
    0x8183, 0x0186, 0x018c, 0x8189, 0x0198, 0x819d, 0x8197, 0x0192,
    0x01b0, 0x81b5, 0x81bf, 0x01ba, 0x81ab, 0x01ae, 0x01a4, 0x81a1,
    0x01e0, 0x81e5, 0x81ef, 0x01ea, 0x81fb, 0x01fe, 0x01f4, 0x81f1,
    0x81d3, 0x01d6, 0x01dc, 0x81d9, 0x01c8, 0x81cd, 0x81c7, 0x01c2,
    0x0140, 0x8145, 0x814f, 0x014a, 0x815b, 0x015e, 0x0154, 0x8151,
    0x8173, 0x0176, 0x017c, 0x8179, 0x0168, 0x816d, 0x8167, 0x0162,
    0x8123, 0x0126, 0x012c, 0x8129, 0x0138, 0x813d, 0x8137, 0x0132,
    0x0110, 0x8115, 0x811f, 0x011a, 0x810b, 0x010e, 0x0104, 0x8101,
    0x8303, 0x0306, 0x030c, 0x8309, 0x0318, 0x831d, 0x8317, 0x0312,
    0x0330, 0x8335, 0x833f, 0x033a, 0x832b, 0x032e, 0x0324, 0x8321,
    0x0360, 0x8365, 0x836f, 0x036a, 0x837b, 0x037e, 0x0374, 0x8371,
    0x8353, 0x0356, 0x035c, 0x8359, 0x0348, 0x834d, 0x8347, 0x0342,
    0x03c0, 0x83c5, 0x83cf, 0x03ca, 0x83db, 0x03de, 0x03d4, 0x83d1,
    0x83f3, 0x03f6, 0x03fc, 0x83f9, 0x03e8, 0x83ed, 0x83e7, 0x03e2,
    0x83a3, 0x03a6, 0x03ac, 0x83a9, 0x03b8, 0x83bd, 0x83b7, 0x03b2,
    0x0390, 0x8395, 0x839f, 0x039a, 0x838b, 0x038e, 0x0384, 0x8381,
    0x0280, 0x8285, 0x828f, 0x028a, 0x829b, 0x029e, 0x0294, 0x8291,
    0x82b3, 0x02b6, 0x02bc, 0x82b9, 0x02a8, 0x82ad, 0x82a7, 0x02a2,
    0x82e3, 0x02e6, 0x02ec, 0x82e9, 0x02f8, 0x82fd, 0x82f7, 0x02f2,
    0x02d0, 0x82d5, 0x82df, 0x02da, 0x82cb, 0x02ce, 0x02c4, 0x82c1,
    0x8243, 0x0246, 0x024c, 0x8249, 0x0258, 0x825d, 0x8257, 0x0252,
    0x0270, 0x8275, 0x827f, 0x027a, 0x826b, 0x026e, 0x0264, 0x8261,
    0x0220, 0x8225, 0x822f, 0x022a, 0x823b, 0x023e, 0x0234, 0x8231,
    0x8213, 0x0216, 0x021c, 0x8219, 0x0208, 0x820d, 0x8207, 0x0202
};
 
 
#define INITIAL_REMAINDER 0x0000
#define FINAL_XOR_VALUE 0x0000
#define REFLECT_DATA(X) ((unsigned char) reflect((X), 8))
#define REFLECT_REMAINDER(X) ((crc) reflect((X), WIDTH))
#define WIDTH (8 * sizeof(crc))
 
 
/*********************************************************************
*
* Function: reflect()
*
* Description: Reorder the bits of a binary sequence, by reflecting
* them about the middle position.
*
* Notes: No checking is done that nBits <= 32.
*
* Returns: The reflection of the original data.
*
*********************************************************************/
static unsigned long
reflect(unsigned long data, unsigned char nBits)
{
    unsigned long reflection = 0x00000000;
    unsigned char bit;
 
 
    for (bit = 0; bit < nBits; ++bit)
    {
        if (data & 0x01)
        {
            reflection |= (1 << ((nBits - 1) - bit));
        }
 
        data = (data >> 1);
    }
 
    return (reflection);
 
}
 
/*********************************************************************
*
* Function: crcFast()
*
* Description: Compute the CRC of a given message.
*
* Notes: crcInit() must be called first.
*
* Returns: The CRC of the message.
*
*********************************************************************/
crc crc_calc(unsigned char * message, unsigned int nBytes)
{
    crc remainder = INITIAL_REMAINDER;
    unsigned char data;
    int byte;
 
 
    for (byte = 0; byte < (int)nBytes; ++byte)
    {
        data = REFLECT_DATA(message[byte]) ^ (remainder >> (WIDTH - 8));
        remainder = crcTable[data] ^ (remainder << 8);
    }
 
    return (REFLECT_REMAINDER(remainder) ^ FINAL_XOR_VALUE);
 
}
 

3指令流程说明

3.1指令:9021(现场机登录(扩充指令))

指令编码 发送指令 指令样例
9021 现场机 QN=20040516010101001;ST=91;CN=9021;MN=88888880000001;PW=123456;Flag=1;CP=&&SysVer=$版本号$;NetMode=$通信方式$;HightSpeed=$高速直连$&&
上位机 ST=91;CN=9013;MN=88888880000001;PW=123456; Flag=0;CP=&&QN=20040516010101001&&
上位机 ST=91;CN=9021;MN=88888880000001;PW=123456;Flag=1;CP=&&Logon=0;Reason =$登录失败原因$&&
机制说明 现场机通过9021指令登录到上位机来实现自己的合法性验证。上位机通过回复9021指令来指示现场机是否已经登录成功。
 
SysVer :32个字符串。前面2个字符为V3,表示3.0通信协议,如SysVer=V3 XXXX
NetMode:通信方式,2个字节,通信网络/设备类型:
0:光纤(宽带)
1:ADSL(宽带)
2:微波(宽带) 
3:串口(窄带) 
4:串口CDMA(窄带)
5:网口GPRS(窄带) 
6:网口CDMA(窄带) 
7:数传电台(窄带)
8:10/100M LAN
9:3G网络(WCDMA,中国联通网络)
10:3g网络(CDMA2000,中国电信网络)
11:3g网络(TD-CDMA,中国移动网络)
 
HightSpeed:高速传输数据。
  1. 普通通信方式。
  1. 需要高速直连方式传输数据,用于临时本地快速导出现场机历史数据。
 
Logon:
1-登录成功;
0-登录失败。
 
Reason:
0-登录成功。
  1. 设备号不存在。
  2. 密码错误。
  3. 上位机当前状态不允许登录。
  4. 指令错误。
 

3.2指令:2011(实时数据上传)

指令编码 发送指令 指令样例
2011 现场机 噪声:
QN=20040516010101001;ST=23;CN=2011;PW=123456;MN=88888880000001;Flag=1;CP=&& DataTime=20190516021030, A1=55.5, A2=55.5, A3=55.5, A4=56.5,A5=51.5, A6=55.5, A7=55.5, A8=102.5,A9=55.5, U=223.7,Data-Flag=N; DataTime=20190516021031, A1=55.5, A2=55.5, A3=55.5, A4=55.5,A5=55.5, A6=55.5, A7=55.5, A8=55.5,A9=55.5, U=223.7,Data-Flag=N; DataTime=?&&
上位机 ST=91;CN=9014;CP=&&QN=20040516010101001;CN=2011&&
  说明 现场机采集实时数据,可以定时10或30秒打包实时数据上传,其中U代表电压,A1代表******路电流值,A2代表第二路电流值...
Data-Flag是代表这组数据的有效性,N代表正常,D代表异常。
 

3.3指令:9014(数据消息应答(扩充机制))

指令编码 发送指令 指令样例
9014 现场机 ST=91;CN=9014;CP=&&QN=20040516010101001;CN=2051;QnRtn=1&&

ST=91;CN=9014;CP=&&QN=20040516010101001;CN=2051;PNO=1;PNUM=1; QnRtn=1&&
机制说明 数据应答命令,上位机、现场机均可发出
对于现场机主动上传的状态数据、测量数据,或上位机请求的状态数据、测量数据时,存在多个数据包,需要9014确认指令。
 

3.4指令:9015(心跳检测(扩充指令))

指令编码 发送指令 指令样例
9015 发送方 QN= 20040516010101001;ST=91;CN=9015;PW=123456;MN=88888880000001; CP=&&&&
接收方 ST=91;CN=9013;PW=123456;MN=88888880000001; CP=&&QN= 20040516010101001&&
机制说明 上位机、现场机均可发出。在无数据收发期间,根据实际需要,定期发送9015心跳指令,用于表明发送指令方处于工作状态中,也用于检测通信网络状态是否正常。
 

3.5指令:9013(通知消息应答(扩充机制))

指令编码 发送指令 指令样例
9013 现场机,上位机 ST=91;CN=9013;PW=123456;MN=88888880000001;CP=&&QN=20040516010101001;QnRtn=1&&

ST=91;CN=9013;PW=123456;MN=88888880000001;Flag=0;CP=&&QN=20040516010101001;QnRtn=1&&
机制说明 对于各种通知、告警指令,都属于通知消息,使用9013指令应答。
回应通知命令,上位机、现场机均可发出。