故事作者:will666

最近创作

看看TA的故事

【通信】S7-1200与环保数采仪的HJ212通讯实现

已锁定

will666

  • 帖子

    2002
  • 精华

    12
  • 被关注

    103

论坛等级:奇侠

注册时间:2009-05-19

钻石 钻石 如何晋级?

【通信】S7-1200与环保数采仪的HJ212通讯实现

1776

8

2022-03-24 12:30:30

        HJ212-2005协议是国家环保局在2005年推出的一种数据传输协议,主要用于环保水污染和大气污染监测点的数据上传。该协议是一种应用层协议,传输层一般基于TCP/IP协议,数据包除CRC校验码外都是由ASCII码字符组成。因此S7-1200要实现HJ212协议通讯除了需要使用TCP/IP通讯命令外还需要使用字符串处理命令。

        HJ212协议包由包头、数据段长度、数据段、CRC校验码、包尾组成。包头固定为“##”包尾固定为<CR><LF>。以下就是一个实际的HJ212实时数据包的构成:

##0281ST=32;CN=2011;PW=123456;MN=35050XXXXXXXXA;CP=&&DataTime=20201119133949;101-Rtd=0.281,101-Flag=N;060-Rtd=0.185,060-Flag=N;011-Rtd=12.620,011-Flag=N;001-Rtd=6.576,001-Flag=N;065-Rtd=11.190,065-Flag=N;B01-Rtd=723.289,B01-Flag=N;B21-Rtd=3746018.000,B21-Flag=N;SW-Rtd=25.668,SW-Flag=N&&4874$R$L

ST=32表示为地表水体污染源

CN=2011代表实时数据发送命令

PW=123456为访问密码

MN=35050XXXXXXXXA为监测点编号

CP=&&数据区&&为指令参数,中间即为数据区,其中不同的编码表示不同的污染物指标,比如011-Rtd代表COD实时数据。

        由于传输层使用的是TCP/IP协议,所以第一步是在1200里使用TCON指令建立TCP服务器连接。下图是数采仪通讯参数设定及TCON指令参数设定。







        第二步为使用TRCV指令接收数采仪发送的数据包,程序如下图所示。因为不同212命令下数据包长度不一致,所以需要将LEN设置为0,将ADHOC设置为1,即激活Ad-hoc模式,接收动态长度的数据:


 


       通过以上两步,数采仪数据包已经接收到数据缓存区的字符数组中,下面需要将字符数组转换成字符串,才能使用字符串命令解析数据。首先解析命令编码CN,只有2011命令代表传输的是实时数据,其他命令的数据包可以忽略。下图指令的功能是提取数据包的前100个字符,这里面包含了命令码、数据发送的日期和时间等参数。




        我们封装了一个FC80实现命令编号和时间的提取,其中命令编号提取部分的代码如下图所示。先通过FIND命令查找关键字符CN的位置,再通过字符串转数字命令提取十进制的命令编码。



        最后是污染物参数的解析,当命令编码=2011时,表示收到的是实时数据包,此时将数据包的数据部分转换成提取到数据字符串,再调用自己封装的FC81实现实时数据的解析。


 



        FC81中提取实时数据的程序与提取命令编码相同,以COD为例,先通过FIND命令查找COD指标编码011-Rtd的位置,再通过字符串转数字命令提取实数类型数据。



        综上即可通过S7-1200实现HJ212协议的通讯的解析,可以提取污染物指标实时数据和更新时间等。本次只解析了实时数据包,还可以采用类似的方法解析小时数据、日数据包,实现更多的功能。



【通信】S7-1200与环保数采仪的HJ212通讯实现 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

网友专栏

共有3234条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。