APP下载

一种通用多协议数据采集系统的设计与实现

2015-07-02刘禄恒

物联网技术 2015年6期
关键词:数据采集框架

刘禄恒

摘 要:数据采集系统一直是工控系统的核心要件。论述一种基于Modbus协议、Fins协议和IEC104协议的通用多协议数据采集系统,该系统根据不同协议的特点将数据进行标准化处理,支持数据实时订阅、冗余处理和统一发布。应用结果表明,该系统是一个实时性强、易扩展、易维护的高效稳定的数据采集系统。

关键词:多协议;数据采集;标准化处理;框架

中图分类号:TP393 文献标识码:A 文章编号:2095-1302(2015)06-00-02

0 引 言

数据采集,是指从传感器和其它待测设备等模拟和数字被测单元中采集信号,再由计算机进行存储、处理、显示或打印的过程。数据采集过程往往表现出“数据量大”、“数据增长速度快”、“数据冗余”、“设备通信协议不统一”等特点,这往往会导致采集系统无法适应不断增长的处理需求,系统扩展性能低,难以维护[1]。本文论述了一种基于Modbus协议、Fins协议和IEC104协议的多协议数据采集系统,该系统根据不同协议的特点将数据进行标准化处理,支持数据订阅、冗余处理和统一发布。

1 系统总体结构

1.1 系统层次结构

系统总体结构如图1所示,系统主要由采集框架层,缓存判重层和数据管理层三部分组成,其中采集框架层包含轮询框架和主动上传框架,不同协议可根据协议的特性来选择相应框架,比如Modbus和Fins协议都没有定义主动上传的功能所以采用轮询框架,而IEC104中有主动上传的功能则采用主动上传框架。缓存判重层可以将不同协议间的数据进行标准化处理,减少数据冗余和数据发布时的负载。数据管理层是将采集上来的数据统一管理,然后再分发给各个订阅者。订阅者可以是数据库或者显示界面,数据管理层可以直接存储到数据库,也可通过共享内存或者套接字存储到数据库或者显示到界面上。如果是显示到界面上,增加订阅的功能便可减少显示界面查询数据库的延迟,提高采集系统的实时性。

1.2 系统线程模型

系统总体表现为一个进程,不同协议的数据采集工作在不同的线程里。轮询框架下的每个协议有两个线程,主动上传框架下的协议采用一个线程。数据管理模块中等待订阅的工作为一个线程,数据的发布为一个线程。

图1 系统总体结构图

2 关键技术

2.1 轮询框架的实现

轮询框架的核心为两个线程和两个链表,线程分为主线程和工作线程,主线程主要维护两个定时器,工作线程进行实际采集和设备重新连接的工作。主线程的两个定时器分别对应工作线程的两个链表,两个链表分别为数据采集设备链表和重新连接的设备链表。

轮询框架分为两个线程,可以隔离定时器和实际的采集或重连工作,减少彼此之间的影响。网络通讯有很多不确定的因素,在一个设备上的采集延迟可能会影响到其他设备上的数据采集。将定时器和实际工作设备两者隔离就能保证各设备上一定次数的信息采集,确保系统正常稳定的运行。

2.2 主动上传框架的实现

主动上传框架采用Reactor编程模式,对各socket描述符进行监听,有数据到来就对协议进行解析,回调提前注册好的信息处理函数,取出数据。如果设备发生故障则关闭socket描述符,启动重新连接设备的定时器,定期进行设备重连。

IEC104协议本身规定了4个定时器,包括为连接建立超时进行重连的定时器t0(30秒)、发送或测试APDU的超时定时器t1(15秒)、无数据报文时确认的超时定时器t2(10秒,t2t1)[2]。所以在选择主动上传框架使用时应根据协议本身的规定做特殊化处理。

2.3 不同协议数据的标准化处理

由于不同协议间模拟点的数据信息表示可能不一致,比如Modbus和Fins协议模拟点的数据信息选用uint16_t来表示,而IEC104协议选用float来表示,所以系统统一定义了一个数据结构--struct Data,不同协议下模拟点的信息统一用std::unique_ptr指针表示,然后根据协议类型填入 std::map 或std::map。协议间的数字点信息则统一用std::map 来表示。这样可以达成不同协议数据的标准化,方便了系统的缓存判重和统一发布。

2.4 缓存判重去冗余

系统总体用一棵红黑树来缓存最近一次采集的所有协议下所有设备的数据信息,这样每次进行发布的都是所有设备下有数据变化了的点信息,大大减少了数据冗余和发布时的负载,明显提高了系统性能。另外有了缓存模块,设备信息的显示界面可以不需要读取设备列表上的配置文件,而从网络上直接获取设备列表。

2.5 数据管理统一发布

数据管理模块参考了muduo的日志库[3],线程模型在前端线程收集数据,数据信息到达一定大小或者数据发布定时器超时之后将数据传给背景线程,由背景线程来统一发布给订阅者,比如数据库和显示界面等。这样可以在不影响数据采集效率的前提下,提高数据发布效率,免除系统在发布上的等待。另外系统采用Reactor + one loop per thread 编程模式等待来自网络的订阅并实施数据信息在网络上的发布。传统的采集系统都是先将数据存到数据库中,然后工控系统其他组件再从数据库中读取数据,这样往往会造成很大的延时,所以支持订阅和统一发布的采集系统对工控系统的实时性大有裨益。

采集系统采用如图2所示的协议格式来进行统一的数据发布。报文最开始用3个字节的“HEI”来对报文定界,其后是4个字节的报文长度,方便接收方对报文进行处理。然后是设备个数及设备上的具体点信息。

图2 数据发布的协议

由于数据标准化的处理,数据发布在协议上也做了一些妥协,多了一个字节的标识来判断设备上是否包含模拟点。设备信息如图3所示。

图3 设备信息内容

3 运行结果及分析

为了对系统做性能上的评测,编写Modbus协议和IEC104协议设备端的仿真程序,模拟这两个协议下多个设备上的多种点信息,多个不同的模拟点分别模拟正弦曲线(如图4),二次函数曲线,指数曲线,对数曲线,平方根曲线等的变化,不同的数字点只需要模拟一系列随机0/1值的变化即可。

图4 设备上的模拟点数据按正弦曲线变化

采集系统会根据协议的特点实时将数据采集上来,然后统一发布。数据显示的界面如图5所示,图中显示的是IEC104协议下设备0的数据信息,该设备下模拟点号16 385的值为12 198.6,数字点号1的值为0。

图5 数据显示界面

在界面上选择不同的协议并选择协议下各相应设备上不同点的信息,将数据与设备仿真端的数据对比,发现程序运行无误。

设备的仿真端程序总共模拟了50个设备的变化,系统均能实时准确的将各协议下各设备的各个点信息采集上来,说明了该系统性能的高效性。

采集系统在采集框架层完成之后才增加的对FINS协议的支持,说明了系统容易扩展,容易维护的特性。而采集系统支持数据实时订阅、冗余处理和统一发布,说明了系统是一个实时性能可靠的数据采集系统。

4 结 语

本文论述了一种基于Modbus协议、Fins协议和IEC104协议的通用多协议数据采集系统, 该系统根据不同协议的特点将数据进行标准化处理,支持数据实时订阅、数据冗余处理和统一发布。实验结果表明,该系统是一个易扩展,易维护的实时性强的高效稳定的数据采集系统。

参考文献

[1]彭新一,黄竞斌,黄志炜 .“一种面向大规模分布式数据采集的标准化方法” [C]. Proceedings of 2010 The 3rd,International Conference on Computational Intelligence and Industrial Application,2010(7).

[2] Telecontrol equipment and systems Part 5-104: Transmission protocols Network access for IEC 60870-5-101 using standard transport profiles[S]. IEC 60870-5-104:2000, IDT

[3]陈硕.《Linux多线程服务端编程》[M].北京:电子工业出版社,2013。

[4] Modbus Application Protocol Specification V1.1b, Modbus-IDA. http://www.Modbus-IDA.org

[5]鞠阳,张惠刚.IEC60870-5-104远动规约的设计及其应用[J].继电器,2006,34(17):55-58.

[6] FINS communications. http://paginas.fe.up.pt/~pfs/recursos/plcs/omron/cs1/eth_manual/sec5.pdf

猜你喜欢

数据采集框架
广义框架的不相交性
WTO框架下
基于开源系统的综合业务数据采集系统的开发研究
关于原点对称的不规则Gabor框架的构造
一种基于OpenStack的云应用开发框架
基于Hadoop的DDoS检测框架