所谓协议,就是双方协商后达成一致的一个规范。通讯协议,就是通讯的规范,规定两个设备,或者设备与平台之间如何对话
一、协议简介
H212协议由国家环境保护部颁布,适用于污染物在线监控(监测)系统、污染物排放过程(工况)自动监控系统与监控中心的数据传输,最新版本是2017版,代替了以前的2005版。它规定了传输的过程及参数命令,交互命令,数据命令和控制命令的格式,给出了代码定义。H212协议允许扩展,但扩展内容时不得与已使用或保留的控制命令相冲突。同时,H212协议还规定了在线监控(监测)仪器仪表和数据采集传输仪之间的数据传输格式,并给出了代码定义。
二、通讯流程
H212共有3种形式的命令,对应三种通讯流程(如图):
命令形式 |
流程图 |
2.上传命令(一步或两步) |
|
3. 通知命令(两步) |
(第一步)
(第二部)
|
三、通讯协议数据结构
H212的报文格式如下:
四、实际报文解析
现在我们以一段实际的报文为例,来分析一下H212的传输解析过程,这是一段下位机向上位机发送的携带实时数据信息的报文,对应上述流程中的第二条-上传命令:
对照上面的列表,报文开始的“##”为包头字符,长度为2字符,用于定位每一帧的开始。
后面的“0504”是数据段长度,表示这个字段往后的报文长度(注意是字符个数,不是字节数),不包含最后的CRC校验。
后续红框内这些就是数据段。
最后的5F00就是这段报文的CRC校验。
末尾的回车换行在报文中有实际效果,但是没有字符显示。
下面我们再来详细分析数据段的报文:
QN代表请求编码,它是一个精确到毫秒的时间戳,用来唯一标识一次报文交互。所以本段报文截取自2020年8月5日9点27分46秒677毫秒的一次交互。
第二个字段ST表示系统编码,其具体含义见下表:
本次报文的ST为32,表示本次报文上送的是“地表水体环境污染源”的数据。
第三个字段CN表示命令编码,具体定义可参考下表:
本次报文CN=2011,表示它是一条现场机向上位机上送“污染物实时数据”的报文。
第四个字段PW表示访问密码。
第五个字段MN表示设备唯一标识,具体意义如下:
第六个字段Flag含义如下:
在这条报文中,Flag=5,写成二进制就是00000101,所以V5~V0为000001,表示本次标准修订版本号;A位为1,表示应答;D位为0,表示数据包中不包含包号和总包数两部分。
第七个字段CP是指令参数,它的格式为CP=&&数据区&&。两个“&&”中间就是数据区。
在数据区中,DataTime在命令2011中表示数据采集的时刻。
后面依次为各个污染物的测量值以及采集器的状态:
其中21001表示总氮,22001表示石油类。
xxxxxx-Flag=N表示采集该编号污染物的在线监控(监测)仪器仪表工作正常。
总结一下就是:这条报文是2020年8月5日9点27分46秒677毫秒的时候,由设备标识为370702003191213175805的现场机向上位机发送的地表水体环境污染源的污染物实时数据,主要包含总氮,石油类等等,采集该编号污染物的在线监测仪工作正常。报文的版本号是本次标准修订版本号,需要对方应答。
五、总结
以上通过一个具体的报文讲解了H212-2017版的解析过程。解析报文有两个重点:一是要搞清交互的过程,比如总共有几种类型的报文,每种类型的报文交互分为哪几个步骤,发起方如何发起,应答方如何应答,正常的流程是什么,遇到异常如何处理等等;另一方面就是把每一段报文拆分字段,搞清每个字段的含义,最终获取该报文所表达的全部意义。大家可以对照环境保护部颁发的“污染物在线监控(监测)系统数据传输标准”自行解析收到的报文。
,