微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于Linux的嵌入式实时数据库的设计

基于Linux的嵌入式实时数据库的设计

时间:05-21 来源:互联网 点击:

I/O变量类型用于处理现场采集的数据。对各种类型的变量来说,均有其取值范围:离散型变量只能取0和1,整型变量与一般程序设计语言中的有符号长整型变量类似,用于表示带符号的整型数据。实型变量用于表示浮点数据。字符串变量用于记录一些特定含义的字符串。每类变量一一对应于一类实时数据,它以结构的形式来管理,变量的数据结构RTVariant定义如表1。

表1 实时数据库的结构

域名

作用

类型

长度

VariantName

变量名

string

50

VariantType

变量类型

string

30

VariantDesc

变量描述

string

50

ChangeLmd

变量变化灵敏度,变化幅度大于该值才被记录

float

InitValue

软件开始运行时非离散型变量的初始值

float

InitBoolValue

软件开始运行时离散型变量的初始值

int

1

MinValue

变量在实时数据库的最小值

float

MaxValue

变量在实时数据库的最大值

float

InitMinValue

变量所对应的设备的数值的下限

float

InitMaxValue

变量所对应的设备的数值的上限

float

DeviceName

I/O类型的变量对应的设备名称

string

50

Register

I/O类型的变量对应的设备寄存器

string

50

DataType

该变量的数据类型,为上述8种类型之一

string

20

ReadWrite

I/O变量的读写特性,只读、只写或读写

string

10

TimeScan

读写外部设备的时间频率

float

RunMode

获取变量值的模式:仿真方式、直接采集

string

50

SoftMode

定义仿真获取数据时是否随机产生

string

50

FltValue

变量的当前值

float

3.2 实时数据库生成模块设计

实时数据库生成模块运行在组态开发环境,为了方便对应用程序中的数据管理,将所有的实时变量用单向链表定形式来实现管理,用以完成对数据库的操作,链表定义如下:

typedef struct ClsRTVariantSet//实时数据库结构定义

{ int count; //链表中所有实时数据变量的个数

Position currentpos; //标记链表中的当前元素所处的位置

RTVariant * head; //指向链表的第一个元素,类型为RTVariant

RTVariant * current; //标记链表中的当前元素

}RTVariantSet;

再定义一组与该链表相关的操作来实现数据的管理,如数据的初始化、插入数据、更新、获取、设置实时数据库对象的值等操作,操作原型定义如下:

Status InitRTVariantSet(RTVariantSet* mlist, char* mstrFileName,

char* mstrFilter, int mintFiltered); //链表的初始化

void FreeRTVariantSet(RTVariantSet* mlist); //清空链表

void InsertRTVariantList(Position p, RTVariant* mObjItem, RTVariantSet* mlist);//插入数据对象

Status UpdateRTValue(RTVariantSet* mlist,char* FldNameAndValue);//更新数据

float GetRTValueByName(RTVariantSet* mlist,char* FldName);//获取变量的值

Status SetRTValueByName(RTVariantSet* mlist,char* FldName,float mfltValue);

// 设置变量的值

3.3.实时数据库运行模块的设计

实时数据库运行模块运行在仿真环境或者嵌入式设备上,主要完成实时数据的采集以及实时数据的分析处理,依据功能的不同编写不同的处理函数。如实时曲线分析(RealCurve)就是用于观察外部变量或表达式的值随时间变化的趋势的一个模块。实时曲线的X轴代表时间、Y轴代表变量值,运行时曲线可以自动卷动,以快速反映变量随时间的变化。在设计实时曲线时主要用到如下的变量属性:

域名

作用

类型

FltValue

变量的当前值

float

Count

显示数据的个数

int

FltModel

实时曲线中设定的参照曲线的数值,一维数组,在开发环境中设置

float*

FltRealValue

当前值之前的时间段的实际值数组

float*

FltRealValue是一个一维数组,其中存放了实时曲线实际显示的数值,存放的数据是自动卷动的,当由外部设备采集到一个当前时刻的数值后,存放在数组中的采集时间最老的一个数据将被丢弃,而加入当前新采集到的数据,数组中有效数据的总数保持不变。实时趋势曲线就是根据这个的数据结构来滚动显示的。

4 小结

嵌入式应用系统的运行要处理大量的实时数据,这就要求开发嵌入式应用系统的组态软件具有处理大量实时数据的功能。实时数据库模块分为开发环境和运行环境分别设计,在组态开发环境中完成实时数据库结构、数据来源、数据连接、数据类型及相关的各种参数的定义,生成目标实时数据库,然后在系统运行环境中,将从外部设备采集来的实时数据送入实时数据库,读取目标实时数据库中的数据进行解析,自动完成显示、报警、存盘等操作,同时把有关信息发送给系统的其它部分,以便触发相关事件,进行实时处理。

参考文献:

[1] 周东球,杜殿林等.先进控制软件系统实时数据库的设计[J].微计算机信息,2003

[2] 沙宝良,陈云飞,周正林.工业

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top