麒麟v10 上部署 TiDB v5.1.2 生产环境优化实践
894
2023-04-16
基于嵌入式数据库的矿场安全系统设计方案详解
引言
1 系统需求分析
前端数据采集、监控、发送等嵌入式系统软件开发工作。为了满足前端嵌入式监控系统对井下实时数据的存储、查询、显示等大量处理要求,必须安装数据库管理系统,而传统的数据库管理系统显然因其资源占用大、数据管理效率低等特点不能适用与嵌入式矿场监控系统,因此,探索一种适用于矿场恶劣环境下的嵌入式监控终端的数据库系统成为本文进展的关键。
为解决这些问题,提出了嵌入式系统在煤矿井上监控系统中的应用,嵌入式系统技术的小体积、高可靠性、低功耗和低成本等特点满足井上监控系统设备的严格要求及现场恶劣生产环境的适应性,并且监控终端移植嵌入式数据库管理系统,满足传统煤矿安全监控系统的主要功能需求:
2.实时查询及显示需求。
3.用户登录管理需求。
2 系统总体设计
3.系统主要功能模块实现
3.1 数据采集模块
数据采集模块实现煤矿数据源传感器实时数据的读取,并设计成一定格式的数据结构,以便数据库和应用程序操作。本系统以现有的矿场安全系统(MSUS )为数据源,安全系统按照协议规定的文件格式组织传感器数据,存储在指定本地磁盘路径中。
1.设备安装信息文件(dev.xml )
传感器设备文件分为数据头和数据体,数据头格式规定如下:
《矿场编号》《矿井名称》《日期》《传感器个数》《其他》《保留》
2.实时数据文件(rtdata. xml )
实时数据文件分为数据头和数据体,数据头格式规定如下:
《矿场编号》《数据上传时间》《传感器数目》
数据体格式规定如下:
《传感器编号》《数据值》《数据状态》
其中,数据状态按位来表示数据的状态(用二进制定义,使用时转换为整数),其文本对应关系如下:
(二)数据采集程序设计
typedef struct devdata
{ TCHAR m_str_devSubstation[MAXLENGTH];//分站
TCHAR m_str_devID[MAXID];//传感器编号
TCHAR m_str_devPlace[MAXLENGTH];//安装地点
TCHAR m str_devType[MAX];//传感器类型
TCHAR m str_devUnit[MAX];//单位
float m_data_up;//量程上限
float mes_data_down;//量程下限
float m_alarrn_up;//报警上限
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 对组成了数据库中的一个基本结构单元,而整个数据库实际上就是由许多这样的结构单元所构成的。也就是说,调用数据库接口实际上就是提供了相应的关键词,通过该关键词来查找要操作的数据。
图 2 设备安装信息数据库存储程序流程
3.3 数据查询模块
实时/历史数据查询模块设计主要就是GetDevKey、DataQueryByRealTime 和DataQuery函数设计。
1. DataQueryByRealTime 函数设计
若用户输入的查询时间段内设备安装信息没有改变,GetDevKey 函数会直接返回FALSE,程序接着会调用DataQueryByRealTime 函数查询实时数据库文件,设备安装信息直接从m-devList 结构体链表中获得,函数设计包括如下:
①根据用户输入的查询日期,形成实时数据库文件如2007-02-09.db,打开实时数据库。
③遍历数据库文件拥有相同 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 对存储方案及实时/历史传感器数据的数据库查询策略。在实际生产中工作稳定,查询速度快,达到了预期的设计目标。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。