基于Linux的嵌入式实时数据库的设计
域名 | 作用 | 类型 | 长度 |
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] 沙宝良,陈云飞,周正林.工业
- Linux嵌入式系统开发平台选型探讨(11-09)
- 嵌入式系统中文输入法的设计(03-02)
- 基于MPC755的嵌入式计算机系统设计(05-10)
- WinCE下光电编码器的驱动程序设计(04-12)
- 为什么嵌入式开发人员要使用FPGA(05-13)
- VxWorks几种常用的延时方法介绍(05-16)