当前位置:首页 > 嵌入式 > 嵌入式硬件

摘要:本文是针对当前矿业安全事故频繁,设计了这样一个能在恶劣环境下正常工作的安全系统。首先介绍了嵌入式系统的相关概念和软硬件环境,阐明煤矿井上监控终端的嵌入式系统需求和Windows CE 嵌入式操作系统选择;接着,从嵌入式数据库的相关概念和煤矿井上

监控终端的嵌入式数据库需求及特点出发,详细研究Berkeley DB 数据库的关键技术特性以及在煤矿井上监控系统中的适用性,并介绍Berkeley DB 数据库的基本概念和基本API 函数操作。

引言

嵌入式数据库不仅在功能概念及系统特点上与传统的数据库有着很大的差别,而且在它的应用方式上也是不同的。嵌入式数据库并不是直接销售给用户,而是提供给设备的生产商或应用的开发商,以便直接生成在嵌入式系统和应用之中,嵌入式数据库在许多领域拥有广泛的应用前景,如手持式计算和移动计算,智能设备,在本文中便提供了较好的应用。

1 系统需求分析

前端数据采集、监控、发送等嵌入式系统软件开发工作。为了满足前端嵌入式监控系统对井下实时数据的存储、查询、显示等大量处理要求,必须安装数据库管理系统,而传统的数据库管理系统显然因其资源占用大、数据管理效率低等特点不能适用与嵌入式矿场监控系统,因此,探索一种适用于矿场恶劣环境下的嵌入式监控终端的数据库系统成为本文进展的关键。

嵌入式数据库管理系统是随着嵌入式应用的发展而兴起的一类嵌入式应用软件,已经成为数据库技术研究的一个重要分支,在移动计算平台(如HPC,PDA)、家庭信息环境(如机顶盒和数字电视)、通讯计算平台、汽车电子平台、电子商务平台(如智能卡应用)等领域得到广泛的应用。

为解决这些问题,提出了嵌入式系统在煤矿井上监控系统中的应用,嵌入式系统技术的小体积、高可靠性、低功耗和低成本等特点满足井上监控系统设备的严格要求及现场恶劣生产环境的适应性,并且监控终端移植嵌入式数据库管理系统,满足传统煤矿安全监控系统的主要功能需求:

1.数据通信功能需求。

2.实时查询及显示需求。

3.用户登录管理需求。

2 系统总体设计

嵌入式矿场安全系统的核心是数据处理。监控终端实时采集矿场各类传感器的模拟信号(如瓦斯浓度、一氧化碳浓度、风速、温度、湿度、粉尘、压力等)和现场设备控制设备的开关量信号(如风机启、停状态等),实现数据实时显示、实时/历史曲线显示、查询和报表打印、声光报警、手动/自动控制,以及网络通信等功能。而所有这些功能的实现都是以数据管理为基础的,嵌入式数据库系统可以有效地组织和管理煤矿场下各类数据,从而达到矿场监控系统实时查询、控制等功能的设计要求。图1 是一个典型的采用了嵌入式数据库的矿场安全系统的结构图:


系统采用 Windows CE 嵌入式操作系统和Berkeley DB 嵌入式数据库作为矿场井上监控系统终端应用程序的开发平台;以现有的矿场安全监测监控系统为数据源,以文件共享的方式实时采集现场安全生产数据,进行数据的处理和发送。

3.系统主要功能模块实现

3.1 数据采集模块

数据采集模块实现煤矿数据源传感器实时数据的读取,并设计成一定格式的数据结构,以便数据库和应用程序操作。本系统以现有的矿场安全系统(MSUS )为数据源,安全系统按照协议规定的文件格式组织传感器数据,存储在指定本地磁盘路径中。

1.设备安装信息文件(dev.xml )

传感器设备文件分为数据头和数据体,数据头格式规定如下:

<矿场编号><矿井名称><日期><传感器个数><其他><保留>

2.实时数据文件(rtdata. xml )

实时数据文件分为数据头和数据体,数据头格式规定如下:

<矿场编号><数据上传时间><传感器数目>

数据体格式规定如下:

<传感器编号><数据值><数据状态>

其中,数据状态按位来表示数据的状态(用二进制定义,使用时转换为整数),其文本对应关系如下:


(二)数据采集程序设计

数据采集模块程序使用了 ReadFile.h 和ReadFile.cpp 文件,因此本文设计了CReadFile 类,该类封装了对dev.xml 和rtdata.xml 交换文件所有的数据采集操作。根据 dev.xml 和rtdata.xml 交换文件的构成,以及数据库存储操作上的考虑,程序为每个传感器设计了DEVDATA 和REALDATA 结构体,分别用来保存dev.xml 和rtdata.xml 文件的数据信息。DEVDATA 结构体如下所示:

typedef struct devdata

{ TCHAR m_str_devSubstation[MAXLENGTH];//分站

TCHAR m_str_devID[MAXID];//传感器编号

TCHAR m_str_devPlace[MAXLENGTH];//安装地点

TCHAR m str_devName[MAX];//检测类别

TCHAR m str_devType[MAX];//传感器类型

TCHAR m str_devUnit[MAX];//单位

float m_data_up;//量程上限

float mes_data_down;//量程下限

float m_alarrn_up;//报警上限

float m_alarm_down;//报警下限

float m_power_off;//断电值

float m_power_on;//复电值

}DEVDATA;

REALDATA 结构体如下所示:

typedef struct realdata

{TCHAR m_str_devID[MAXID];//传感器编号

float m_data;//传感器数值

TCHAR m_str_dataStatus[MAXSTATUS];//数据状态

}REALDATA;

CReadFile 类使用了CPtrList 链表数据结构,用以管理交换文件的所有传感器信息,数据节点为DEVDATA 和REALDATA 结构体。

3.2 数据存储模块

将传感器设备上传时间作为 key,封装在DEVDATA 结构体中的设备安装信息和封装在REALDATA 结构体中的实时数据信息分别构成数据库的data,从而构成两组Key 到Data对。因此,该方案将形成两张表,分别存储在两个数据库文件中。将传感器设备安装信息和实时数据信息形成两个数据库文件分别存储,只在设备安装信息改变的时候才会进行设备文件的存储操作,这样大大减少了数据库文件的磁盘占用空间。

Berkeley DB 用Key/Data(关键词/数据)来区分数据库中的数据,Key/Data 对是BerkeleyDB 用来进行数据库管理的基础,由这两者构成的Key/Data 对组成了数据库中的一个基本结构单元,而整个数据库实际上就是由许多这样的结构单元所构成的。也就是说,调用数据库接口实际上就是提供了相应的关键词,通过该关键词来查找要操作的数据。

如果把一组相关的 Key/Data 对也看作一个表的话,那么每一个数据库只允许存放一个table,因此,一般一种类型的Key/Data 对构成一个数据库文件。数据库存储代码设计主要分为设备安装信息(key/data 对为设备上传时间/DEVDATA 结构体)存储代码设计和实时数据信息(key/data 对为设备一上传时间/REALDATA 结构体)存储代码设计。Berkeley DB 是以文件为单位进行数据库管理的,由于设备安装信息只在数据改变的时候才进行数据库存储操作,并且其间隔周期较长,因此作者设计了dev.db 文件实现安装信息的存储管理;由于实时数据信息的更新周期较短,数据库存储操作频繁,并且每天都会有数据的采集和更新,因此作者以每天的日期为单位设计了实时数据库文件,系统将会获取当天的日期,并以之为文件名形成数据库文件进行数据库操作,例如当天的日期为2007 年2 月8 日,那么数据库文件名为 2007-02-08.db 。

设备安装信息和实时数据信息的存储代码具有一定的相似性,作者以实时数据信息的存储代码为例说明其设计过程,程序流程如下所示:


图 2 设备安装信息数据库存储程序流程

3.3 数据查询模块

实时/历史数据查询模块设计主要就是GetDevKey、DataQueryByRealTime 和DataQuery函数设计。

1. DataQueryByRealTime 函数设计

若用户输入的查询时间段内设备安装信息没有改变,GetDevKey 函数会直接返回FALSE,程序接着会调用DataQueryByRealTime 函数查询实时数据库文件,设备安装信息直接从m-devList 结构体链表中获得,函数设计包括如下:

①根据用户输入的查询日期,形成实时数据库文件如2007-02-09.db,打开实时数据库。

②构建游标cursor,使用get 方法,以查询时间为key,flag 标签为DB_ SET_ RANGE 游标定位到数据库文件多重记录的首一记录。

③遍历数据库文件拥有相同 kev 的多重记录,将data 中传感器ID 号与用户输入ID 号相等的REALDATA 结构体与相应的m devList 链表节点DEVDATA 结构体在列表框控件(CC1istCtrl)中显示出来。

2. DataQuery 函数设计

若设备查询时间对应的安装信息相对于当前时间段己经改变,GetDevKey 函数会返回正确的设备安装信息查询时间devKey,这个查询时间可能跟用户输入的传感器查询时间不同;程序接着会调用DataQuery 函数,并将这个正确的设备查询时间devKey、用户输入的传感器实时数据查询时间realKey、传感器ID 号strDevID 以及实时数据库文件名strRealDbName以形参方式传给DataQuery 函数,其函数设计包括如下:

①打开设备数据库 dev.db 文件,根据形参strRealDbName 打开实时数据库文件。

②构建游标 cursor,使用get 方法,分别以devKey 和realKey 为数据库的key, flag标签为DB_ SET_ RANGE,游标定位到设备数据库文件和实时数据库文件的首记录。

③遍历数据库文件拥有相同key 的多重记录,若设备数据库文件记录的data 中(DEVDATA 结构体)传感器ID 号与实时数据库文件记录的data 中(REALDATA 结构体)传感器ID 号相等,则将这两个data 信息在列表框控件(CC1istCtrl)中显示出来。

4.总结

本文的创新点:分析嵌入式煤矿井上监控系统的功能需求,开发设计了基于Berkeley DB数据库和Windows CE 的矿场安全系统,实现了窗口登录、数据采集、系统界面、数据库存储、实时/历史数据查询、实时曲线显示等功能模块,深入讨论研究了系统的数据采集方法、数据库KEY/DATA 对存储方案及实时/历史传感器数据的数据库查询策略。在实际生产中工作稳定,查询速度快,达到了预期的设计目标。



liren

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭