APP下载

智慧矿山多系统传感层设备融合关键技术

2022-07-20

煤矿安全 2022年7期
关键词:队列线程传感

陈 杰

(1.中煤科工集团沈阳研究院有限公司,辽宁 抚顺 113122;2.煤矿安全技术国家重点实验室,辽宁 抚顺 113122)

2021 年中下旬,由国家能源局与国家矿山安全监察局印发的《煤矿智能化建设指南(2021 年版)》文件[1]中针对灾害风险与灾害超前干预、应急救援指挥与避险规划等方向提出智能安全监控系统建设专题[2],并详细说明了建设内容,自此安全监测监控系统进入“多系统互联,全面感知”[3]阶段,同时对分站等边缘层设备要求计算能力更强[4]、数据处理更快、逻辑控制更稳。

在煤矿智能化趋势下,相近区域内的各类安全监测系统的大量传感层设备会同时接入边缘层设备,部分传感器不仅仅只是采集数据,还要根据传感器的数据与状态做相应逻辑运算,以安全监控系统中对甲烷传感器闭锁要求[5]:当实时数据达到闭锁值时需要执行闭锁,并且故障时也要执行闭锁。这样对于采集层的分站来说,不仅要实时采集数据做超限判断,而且要求数据处理不丢帧,减少因丢帧导致的故障闭锁发生。根据现场反馈,大部分的误断电来自故障闭锁,一部分的超限闭锁来自甲烷传感器冒大数。传感层设备融合[6-7]不仅要求边缘层设备需要具备多类型、多数量的现场总线接口,而且还得具备多种工业协议[8],这样分站具备了传感层设备的统一采集基础;同时传线层设备融合还要分析各类传感层设备的共性特点[9],建立边缘设备数据采集中间层软件[10],通过创建传感层设备统一采集模板实现采集线程与数据处理线程间的解耦[11],通过减少边缘设备适配传感设备次数实现传感层设备动态加载,这种模式既减少相近区域边缘设备的数量[12],又达到了传感层设备统一采集目的。

所以要在边缘设备层实现多系统传感层设备的融合[13],需要解决以下3 个关键技术:①传感层设备的统一采集;②数据缓存不丢帧;③异常数据的实时检测[14]。

1 多系统传感层设备的统一采集技术

各类煤矿监控系统的传感层设备由各种各样的传感器组成,这些传感器根据监控系统的类型不同,技术参数、接口类型等关键参数也随之不同,但是传感器之间存着一些共性,利用这些共性,抽象出传感器标准化模板,设计采集中间层软件,实现传感器数据的统一采集。

1.1 传感器共性标准化

传感模块属性相关的信息包括制造厂商、模块型号和产品编号,提取这些特性作为标准化模板的统一采集基础,传感器共性图如图1。

图1 传感器共性图Fig.1 Sensor commonality diagram

传感器通信接口总体设计为3 类,分别为现场总线型、节点型、以太网型,现有矿用传感模块选择的接口均为这3 类中之一。探头接口包含了模块内部各种传感器探头类型、单位、精度、名称、相对编号、绝对编号等主要信息,相对编号标注出单个传感模块与通道之间的关联,绝对编号指单个传感模块在全局模块中的对应编号。函数库是根据传感器的通行方式、探头接口等点动态加载相关函数。

1.2 数据采集中间层软件

数据采集中间层软件逻辑架构分为应用层、核心层、驱动层和接口层4 层。应用层是为上层操作系统提供的应用接口;核心层负责周期性从各传感器通信接口采集传感器数据,分为接口处理程序和周期采样程序2 部分,周期采样程序负责依据各传感接口定义配置定周期向传感接口发送数据采集函数,接口处理程序负责接收数据采集指令,并将采集到的数据包整理为统一的标准格式;驱动层包含系统内所有传感设备和功能指令的驱动库;接口层根据系统内的接口类型进行配置。传感器数据采集中间软件体系结构如图2。

图2 传感器数据采集中间层软件体系结构图Fig.2 Structure diagram of intermediate sensor data acquisition software

数据采集中间层软件通过读取传感模块的驱动程序和配置信息完成初始化接口后即可执行数据采集任务,驱动程序和配置信息按照制定的传感模块特征描述表获取和保存所需的信息。在配置文件中,所有根节点都与某一个传感模块一一对应,数据采集设备不同对应的配置文件信息也不同,因此在配置文件中每个节点结构也不同,对此通过编写特定的程序来区分设定传感接口配置信息。中间层软件先进行传感模块的确定,当识别成功后读取传感模块配置信息,并且查询初始化函数的地址,访问相应的初始化函数完成传感模块初始化任务;通过构建1 个包含全局的配置文件,可完成对传感模块实时扫描、自动更新,增强了传感模块的扩展性。

1.3 统一的数据格式封装

煤矿安全监控系统中包含传感模块种类多,各厂商的通讯协议和控制指令存在差异,无法共通。在分站中,数据采集语句通过中间层软件向上层发送统一的协议编码和访问指令等原语句,这些原语句再被解析映射成各厂商的控制指令语句以便能与传感模块硬件识别沟通,当系统存在同类型的传感设备的替换、添加、删减,分站可直接识别传感设备状态。分站需要收集数据时,先与中间层软件建立连接,然后寻址数据配置信息,设置采集周期,然后调用采集函数对传感模块进行周期性采集数据工作。

底层数据协议和格式各不相同,需要将数据整合,封装在协议数据单元中形成统一的数据格式,简化上层应用软件对接受到的封装数据包进行解封装处理,消除数据协议不同产生的差异。传感器数据统一封装格式如图3。

图3 传感器数据统一封装格式Fig.3 Unified packaging format of sensor

传感数据封装的处理方式步骤如下:

1)首先从解析采集的底层数据标识段中识别出设备类型,然后给采集传感设备名称、地址等信息赋值存储,并根据监控系统预设的配置接口信息进行排序,按最后整理的数据组依照规定的统一协议进行数据封装。

2)封装好的数据包分为元数据和传感数据2 部分对传感设备进行描述。其中元数据主要包含传感设备自身的名称、监控类型、地址信息和传感模块数量信息;传感数据主要包含当前累计采集量数据、实时采集数据、采样时间、实际采集探头数据信息。

3)将所有监控系统所需数据按照统一格式进行数据封装,分站的数据处理进程可通过协议对封装后的数据包进行解封处理并提取所需数据,促进了异构数据采集的集成化,解耦了数据处理与数据采集进程之间的耦合性,促进了数据处理进程的便捷。

2 采集数据不丢帧技术

结合线性表的顺序存储和链式存储各自的优势,采用队列的数据结构设立数据缓存队列和数据溢出队列双缓存队列[15]。数据缓存队列负责将连续的实时帧数据进行缓存,预分配指定的内存空间来存取数据,由于每个数据帧的长度是不确定的,数据结构以链式队列构成单链表环形结构作为多线程数据存储结构,避免频繁malloc 和free。多线程可同时读写不同的区域,既具备链式存储动态申请内存,每个结点都由数据域与指针域2 部分组成增加存储空间能力,又解决频繁申请释放内存可能存在效率问题和产生的内存碎片。

2.1 多线程安全

在数据通讯上采用多线程技术达到系统数据并发执行实现与多路传感器同时进行数据通信,但是多线程同一时间读取数据帧缓存队列时会出现多个线程同时对同一队列访问操作冲突,导致程序或者数据异常,或者某一线程在进行读、改、写过程中被其他线程打断,再恢复写的流程打断导致写的效果被覆盖等造成系统错误,甚至如在IAP 升级时导致系统崩溃[16],这类问题常采用条件锁、信号量、互斥量等方式在多线程访问临界区时进行同步控制和保护。综合以上方式的优势,总结可行的设计方案:条件等待是多线程通讯同步的一种方法,判断条件满足与否以决定线程是否执行。当条件不满足时候,挂起线程;当条件满足时,让信号量发送通知进程,允许访问临界区。当有且只有1 个线程时,如果条件不满足则此线程会一直进入挂起线程循环,一直无法变成满足条件。所以必须建立1 个线程,用于可操作,使共享变量发生改变,让原来无法满足的条件变为满足,并且通知对此条件变量判断等待的线程。

2.2 队列的入队与出队算法

数据溢出队列会存储数据帧存入数据缓存队列时出队数据小于入队数据,造成存储空间不足溢出数据缓存队列的部分数据,当数据缓存队列释放足够的空间后,数据溢出队列将溢出部分的数据同步到数据缓存队列。数据溢出队列属于数据缓存队列临时的存放空间,使用的频率较低,使用时一次性申请内存,在数据完成同步后释放溢出队列空间。队列结构分为头指针front、尾指针rear 和计数器节点cnt 3 个结构组成,front 与rear 用于进行入队、出队,队列的入队只允许尾指针操作,rear 增加1 位,队头front 不允许修改;队列的出队列只允许队头操作,front 增加1 位,队尾rear 不允许修改。数据域自身的信息无法体现当前队列可否写入,cnt 作为额外标记表示当前队列的元素个数。向数据缓存队列存储数据首先判断队列是否已满,当cnt 等于队列预设的节点数量,表示队列已满,无法写入;不相等说明队列还有空位置;如果cnt 为0,表示队列为空。对计数器节点cnt 的操作可防止入队、出队假溢出。出入队操作示意图如图4。

图4 出入队操作示意图Fig.4 Schematic diagram of entry and exit operation

入队操作时,在判断数据缓存队列是否已满队,如果队列未满,将数据插入缓存队列,如果队列已满队,将数据插入溢出队列。通过计数器节点cnt 确定数据缓冲队列状态,是否回收缓冲队列冗余空间;若数据缓存队列非满,判断溢出队列是否非空,溢出队列非空则表示队列中有数据,将溢出队列数据转入缓存队列。在出队列操作时,首先判断缓存队列是否为空,如果队列不为空则表示队列是存在可读数据的。预设1 个长度为L 的队列,使front 和rear 始终保持2 个字节的长度,当有1 个数据入队使head循环增加1,当有1 个数据读出tail 循环增加1。在读写时,2 个指针绕着缓存队列以不相对的速度旋转。当有数据写入头指针更新,当头指针指向缓存队列末尾,头指针会回到队列初始位置;当头指针遇到尾指针,停止头指针更新,此时表示缓冲区已满,数据无法写入;当尾指针指向头指针,表示缓冲区已空,数据传输任务完成。

2.3 数据同步与冗余回收

缓存队列定义为Qbuf,溢出队列定义为Qof。将Qbuf 的rear 队列Qof 的front,Qbuf 的rear->next 队列Qof 的rear,将Qbuf->rear->next 指向Qof 的rear,Qbuf->rear 指向Qof->front 获取Qbuf 的队尾节点地址。保证缓存队列中有且至少有1 个节点可执行数据写入,以保证多线程操作过程的安全性,提升实时性[17],避免同步过程中缓存队列中的节点发生混乱的情况。如果Qbuf 队列处于已满时执行数据同步操作,通过Qbuf->rear 的 位置判定是否有数据需要出队。若此时停止入队操作,Qof 收到的同步数据将会同步到Qbuf 的队列末尾后完成出队,Qbuf->head 指针错误偏移将导致节点数据混乱。

若缓存队列的cnt 不为0,表示在缓存队列中存在冗余节点,可以对缓存队列Qbuf 中的冗余空间回收,通常的算法是临时申请1 个指针t 作为临时节点,指针t 指向可回收的冗余空间。改变rear 指针指向Qbuf->rear->next->next,释放t,cnt 减1。进行荣誉空间回收需要保证至少有2 个可写入的空间,若只有1 个可写入空间,则在写入数据时根据front 当前的位置可明确Qbuf 队列在进行出队任务,如果再此时暂停,将t 指向待回收的冗余节点,并释放空间。在继续出队操作时,由于原队列待出队节点已经被释放,Qbuf->head 已经下移,指针会指向位置的指针域,造成指针越界的情况,需要对这类问题在多线程数据采集合数据处理中发生。

3 传感层设备数据异常检测技术

各类煤矿监控系统的传感层模拟量设备具备相邻的“采集-传输”周期数据不突变的特点,分站采集传感器数据在时间轴上是单调递增,具备连续性,所以可采用从正常的时间序列中观测某一时刻的实时数据与该时间序列的期望值不同的方法识别这一时刻数据是否异常。利用边缘分站采集到的传感层设备数据的时间序列连续性特点,以时间数据序列中离群点的识别为检测基础,通过计算某一时刻实时数据的相对离群距离,实现传感层设备数据中可能出现的异常进行检测,并对检测到的数据进行有效的平滑操作,达到保留采集到的传感层设备数据中层的数据波动,过滤非正常波动范围的异常数据的目的。异常检测算法流程图如图5。

图5 异常检测算法流程图Fig.5 Flow chart of anomaly detection algorithm

严格按照传感层设备数据的时间序列表示形式为:TSi={s1,s2,s3,…,si,…,sn},其中,si用(vi,ti)表示ti时刻的具体采集到传感层设备的数据值vi,引入滑动窗口SW 用来保存Si待计算的数据,并且约定滑动窗口的时间序列数据ti不被作为计算因子,Len_sw 表示滑动窗口的长度,滑动窗口的离群距离dis’o 可根据式(1)计算,当前vi的相对离群距离dis’r 可根据式(2)计算。

算法具体的实现步骤描述如下:

1)定义主要变量。异常序列存储队列qTS,滑动窗口长度Len_sw,当前移动长度Len_move,相对离群距离阈值定义(输入)εdis,每次最小滑动距离εsize。

2)所有待计算的数据,根据滑动长度Len_sw 大小,装载到SW 队列,并利用式(1)计算当前离群距离dis’o。

3)在当前SW 队列中依次取传感器的数据vi,并根据式(2)计算dis’r。

4)判断vi的相对离群距离dis’r 大于εdis,并且判断当前序列剩余长度每次最小滑动距离εsize。

5) 如果步骤4) 为真,以vi为中心,从vi-Len_move-1 到vi+Len_move 为子序列长度,生产子序列Tsub,放入qTS,并计算生产新的dis’r,返回判断SW 当前是否有数据。

6)如果步骤4)为假,返回判断SW 当前是否有数据。

7)判断qTS 是否有子序列,如果真执行步骤8),否则(假)返回判断步骤2)。

8)在qTS 子序列队列中取出Tsub,并计算dis’r。

当Tsub 子序列中出现vi的dis’r 大于εdis,并且Tsub 的长度小于εsize时,将这个时刻出现的传感器数据vi标记为异常数据,并放入异常集合。

4 结 语

针对国家能源局、国家矿山安全监察局在2021年下发的《煤矿智能化建设指南(2021 版)》文件中智能安全监控系统对多系统井下融合及“人-机-环”应急联动的需求,分析了不同系统传感层设备共性特点以及实时采集的数据不定期误报、冒大数等问题。同时,从边缘计算设备的角度结合智能矿山发展趋势对井下多系统融合数据采集处理的实时性与不丢帧的要求,深入研究了传感层设备的统一采集、采集数据不丢帧、传感层设备数据异常检测等3个关于多系统传感层设备融合的关键技术,提出了采用数据采集中间件方法建立统一采集体系结构、采用双缓存队列实现多线程间数据采集不丢帧、采用以时间序列为计算因子的传感层数据异常实时检测算法,实现了多系统传感层设备的统一采集。

猜你喜欢

队列线程传感
《传感技术学报》期刊征订
5G终端模拟系统随机接入过程的设计与实现
新型无酶便携式传感平台 两秒内测出果蔬农药残留
实时操作系统mbedOS 互斥量调度机制剖析
浅析体育赛事售票系统错票问题的对策研究
基于车车通讯的队列自动跟驰横向耦合模型
队列队形体育教案
硅硼掺杂碳点的制备及其在血红蛋白传感中的应用
微生物燃料电池在传感分析中的应用及研究进展
青春的头屑