嵌入式数据库矿场安全系统的设计
数据采集程序设计
数据采集模块程序使用了 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 。
评论