1 引言

实时数据库(real-time database, RTDB)作为组态软件设计与实现的核心内容解决了其所 应对的现代工业生产现场环境中生产数据与控制数据类型复杂多样,数据处理与事件调度时 间约束严格等难题[1]。目前,国内外已经有多种基于Windows 操作系统平台的实时数据库 产品在自动化过程控制领域中得到应用[2],随着Linux 操作系统的出现,这种开发平台单一 的局面有望得到改观。Linux 操作系统具有很多优秀的特性适于组态软件实时数据库系统的 开发,特别是其完善的进程线程管理,进程间通信机制与并发控制,可靠的内存管理系统[3], 更是为时间约束严格的实时数据库的开发提供了有力的支持。因此,本文结合Linux 系统实 时多任务方面的特性,采取能够满足数据实时响应要求的多级存储结构,研究并提出了一种 基于嵌入式Linux 系统平台并可应用于监控组态软件的实时数据库实现方案。

2 实时数据库存储结构的分析与设计

实时数据库是监控组态软件数据处理,事务调度,各应用程序间通信的中心。图1 即示 出了组态软件实时数据库的数据处理流程。

2.1 实时数据库的数据流分析本文引用地址:http://www.eepw.com.cn/article/257665.htm

组态软件运行环境分为实时数据库管理系统(RTDBMS)和实时监控界面程序(real-time supervisory control interface, RTSCI)。实时数据库管理系统需要把工业现场中复杂多样的过 程和控制数据抽象为合理高效的数据结构,实时监控界面程序则利用实时过程数据为现场监 控人员提供一个反映实际生产过程的可视化图形界面,在实际运行中二者构成客户端/服务 器计算模式。RTDBMS 作为数据服务的提供者,需要满足RTSCI 种类多样的数据需求。

为了形象的描绘工业现场的实际生产过程,RTSCI 由多种图形对象构成,根据不同的数 据类型需求可分为实时显示,实时趋势,历史趋势,实时报警等。而应用于现代工业生产现 场环境的实时数据库还需要满足严格的数据存取与事件响应的定时限制。所以,传统的数据 库管理系统所采用的数据表示方法,存储模式已不能满足工控组态软件所要求的响应速度 [4]。为此,在设计实时数据库时,为了兼顾RTSCI 所要求的数据图形表现多样性与工业生产 环境时间约束的严格性,需要采用多种存储介质合理组合的多层级数据存储结构。

在工业生产过程中实时产生的过程量,是需要组态软件在每个采样周期中及时更新的动 态数据,为了保证实时数据库的及时响应,须将其存储在内存中;对于RTSCI 的某些数据 需求,如历史趋势显示,实时数据库应为之提供相比内存更大的存储空间,这类数据需求不 需要很高的响应速度,可将之命名为静态数据,其所服务的图形对象要求可按时间翻页浏览, 这类静态数据适于存储在文件系统中;而需要长期保存的生产过程量数据,即历史数据,它 们是今后进行生产效能分析的依据,这些数据可以保存在通用数据库中。这样,由内存数据 库,外存文件系统以及通用数据库的三级存储结构,便构成了既可满足实时数据定时限制又 兼顾数据需求多样性的可应用于监控组态软件的实时数据库的存储架构。

2.2 利用共享内存与命名管道技术实现实时数据库存储结构

Linux 提供了一组由ATT System V.2 版本的UNIX 引入的进程间通信(Inter-Process CommunicatiON, IPC)机制,其中的共享内存技术允许两个不相关的进程访问同一段逻辑内 存,是在两个运行中的进程间传递数据的一种非常高效的数据访问机制[5],可为RTDBMS 与RTSCI 间的动态数据交互提供有力的支持。但共享内存技术本身并未提供任何同步机制, 因此还需要配合IPC 的信号量机制来保证二者间数据访问控制。Linux 提供的另一组在不相 关的进程间进行数据交互的函数是命名管道FIFO。它是将数据存储在文件系统中实现进程 间共享的一种通信方式。命名管道适用于数据存取响应时间要求相对宽松且数据交互总量较 大的应用场合。同时,FIFO 中实现数据读写的read 和write 调用的阻塞机制,还可以提供 进程间的同步控制。

由上述对其特点的分析,FIFO 技术是实现RTDBMS 与RTSCI 间静态数据交互较好的 选择。上图即示出了由共享内存,命名管道,ODBC 接口等多种进程间通信机制构建的实时 数据库存储结构。值得注意的是,为了实现实时数据库与通用数据库的双向数据交换,需要编写特定的通用数据库接口(ODBC 接口)例程。Linux 提供了一组丰富的接口函数用来访问 MySQL 数据库。通过对通用数据库MySQL 的数据连接进行组态,实时数据库便可按照预 先指定的采样周期,对规定时间区段内的历史数据与MySQL 数据库建立数据连接。

3 实时数据库系统的实现

3.1 数据模型的分析与构建

传统数据模型包括三个部分:一组数据对象及其结构,一组数据操作,关于数据对象与 操作的完整性约束[6]。而对于工业生产中所产生的实时数据,还必须约束于严格的定时限制。

在应用于工业现场控制的组态软件中不仅包括实时产生的过程量数据,还存在着描述系 统运行状况的系统数据,在利用采集到的过程量数据的基础上,经处理后提取出的计算数据, 以及涉及控制测量组态或从工控软件输出到输出装置上的数据等。由此,可将实时数据模型 抽象为:模拟量,开关量,字符串量三种数据类型。

3.2 数据类型的实现

上述用于构建实时数据过程量的三类数据模型,对应于具体的实现分别可用:浮点型, 布尔型,字符数组来表示。实时数据可由结构类型实现,以其中的实时数据类型字段来区分 不同的过程量类型。实时数据结构类型的实现如下。

/*枚举类型标记实时数据过程量类型 */

typedef enum {

double_t = 1,

bool_t

} pv_type_set;

/* 联合类型实现实时数据过程量值 */

typedef union {

double dPV;

bool swhPV;

} pv_data_set;

/* 实时数据的数据类型 */

#define name_LEN 20

#define DESC_LEN 50

typedef STruct {

char nAME[NAME_LEN + 1];//数据点名称

pv_type_set type;//数据点类型

char desc[DESC_LEN + 1];//数据点描述信息

pv_data_set pv;//数据点过程量值

char domain[3];//数据点所在域号

char eu[DESC_LEN + 1];//数据点工程单位描述

double euLow;//数据点工程单位下限

double euHigh;//数据点工程单位上限

double pvRaw;//现场测量裸数据

bool IsRanCon;//是否进行量程变换

double pvRawLow;//裸数据量程下限

double pvRawHigh;//裸数据量程上限

bool static;//静态数据历史数据存储至文件系统

int storecyc;//备份周期

bool IsAlarm;//是否报警

int AlarmPriority;//报警优先级

… …

} tag_node;

3.3 实时数据在数据库中的组织形式及相关数据结构

为了充分地利用 Linux 平台对实时多任务操作的支持,实时数据库的数据采集与处理等任务应以多进程的形式并发执行。而Linux 操作系统IPC 机制中的共享内存技术可以根据需 要离散地分配内存空间,从而可将所有数据点的共享内存地址构成索引并建表。在实际应用 中,经常会将若干在生产工艺上有关联的数据点划分为一个数据域,所以地址索引表为两级 结构:第一级为域表,其中的数据项存储特定数据域的地址;第二级为数据点表,数据项存 储某一数据域中的每个数据点的内存地址。域表与数据点表中存储的数据点所在的域号字段 与数据点号字段组合构成数据点ID。包括所有实时数据点的地址索引由一张域表与多张数 据点表构成。根据存储域表结构的内存地址,便可访问所有数据点的共享内存地址。下面给 出域表与数据点表用到的数据结构。

/* 描述域表数据项的数据结构 */

typedef struct {

char domIndex[3];//域号

tbTag_item *tbTag_ptr;//该域的数据点表地址

} tbDom_item;

/*描述数据点表数据项的数据结构*/

typedef struct {

char tagIndex[3];//数据点号

tag_node *tag_ptr;//指向数据点的指针

int shmid;//存储该数据点的共享内存标号

char name[NAME_LEN + 1];//数据点名称

} tbTag_item;

域表与数据点表的数据项内容与关系结构示意见图 3。

3.4 一组访问实时数据库的通用编程接口

作为投入现场运行的监控组态软件的核心部件,实时数据库需要为现场操作人员提供类 似传统数据库管理系统的实时数据查询与更新等功能。另外出于设备无关性的考虑,也需要 为监控组态软件的其他应用程序提供一组用来直接访问实时数据库的接口函数。这样,对于 其他工控设备与实时数据库进行数据交换的需求,只要利用这样一组接口函数开发不同的驱 动程序便可得到满足,从而增强了实时数据库系统的通用性与开放性。下面列出了一些较为 常用的数据访问接口函数。

int CreatTag();//创建数据点

char *GetNameByID(char *tagID);//通过数据点ID 取得数据点名

char *GetIDByName(char *tagName);//通过数据点名得到数据点ID

pv_type_set GetPVType(char *tagName);//通过数据点名得到数据点过程量值类型

int GetPVByName(char *tagName, pv_data_set *pv);//根据数据点名获取数据点过程量值

int SetPVByName(char *tagName, pv_data_set *pv);//根据数据点名写入数据点过程量值

5 结语

实时数据库作为监控组态软件的核心部分,其组织结构是否高效直接影响到与底层 I/O 过程设备的数据交换,与实时监控界面程序的数据传递,与组态软件中其它运行程序的实时 通信等多项技术指标。所以,其设计要求结构精简,存储高效,并且具备相当的可靠性与稳 定性。经实际应用证明,由本文提出的利用共享内存,文件系统,通用数据库多层级存储介 质相结合的实时数据库存储结构,能较充分地利用Linux 操作系统实时多任务方面的特性, 较好地满足工业生产现场环境的实时响应要求。另外,实时数据库的开发是一个有着广阔前景的研究领域,其还包括诸如I/O 调度与缓冲管理,恢复与超载管理等多项实现内容[7]。

本文作者创新点:本文利用Linux 操作系统对多任务并发处理操作的良好支持,采用二 级地址索引为数据点独立分配共享内存空间,以多进程调度的方式实现了数据采集与处理从 而提高了系统吞吐量和数据存取效率。同时,多层级的实时数据库存储结构能较好地兼顾工 业生产环境的时间约束与数据图形表现多样性的要求。

linux 组态软件,基于嵌入式Linux的组态软件实时数据库的设计相关推荐

  1. linux开组态软件,基于嵌入式Linux的组态软件实时数据库的设计

    1 引言 实时数据库(real-TIme database, RTDB)作为组态软件设计与实现的核心内容解决了其所 应对的现代工业生产现场环境中生产数据与控制数据类型复杂多样,数据处理与事件调度时 间 ...

  2. linux复现数据库,基于嵌入式Linux系统平台并可应用于监控组态软件实时数据库的设计方案详解...

    1 引言 实时数据库(real-me database, RTDB)作为组态软件设计与实现的核心内容解决了其所 应对的现代工业生产现场环境中生产数据与控制数据类型复杂多样,数据处理与事件调度时 间约束 ...

  3. iptv linux 安卓 盒子,基于嵌入式Linux的IPTV机顶盒设计

    摘要: 随着人们生活水平的提高和Internet技术的发展,IPTV开始走进人们的生活,IPTV是一种集网络.多媒体.通讯等多种技术于一体,向用户提供包括数字电视在内的多种交互式服务的崭新技术.作为I ...

  4. linux下网络收音机,基于嵌入式Linux的流媒体网络收音机系统的设计与研究

    摘要: 本文研究并设计了基于嵌入式Linux系统的流媒体网络收音机,让广大的普通家庭,特别那些不习惯于操作PC的儿童或中老年人,也能享受到网络,数字媒体,计算机技术所带来的乐趣.该系统在高性能32位处 ...

  5. 充电桩用linux系统吗,基于嵌入式Linux的电动汽车交流充电桩的设计

    基于嵌入式Linux 的电动汽车交流充电桩的设计 张 琳1,任鸿秋1,苏 新2 (1.太原理工大学电气与动力工程学院,山西太原030024:2.华北电力大学电气与电子工程学院,河北保定071003) ...

  6. linux移动数据,基于嵌入式Linux移动数据同步研究与实现

    内容介绍 基于嵌入式Linux移动数据同步研究与实现 1.5万字 39页 资料压缩包内包括开题报告,任务书,答辩PPT,论文正文,程序代码,资料内容完整,推荐下载! 摘要 数据同步是移动计算中一种重要 ...

  7. linux 农业分析,基于嵌入式Linux的农业信息采集系统设计与研究

    摘要: 精准农业是现代化农业发展的方向,将嵌入式数据采集技术应用到农业生产过程中,既可以节省人力物力成本,还可以提高农作物产量和质量,减少农药污染和提高生产效率.在精准农业生产过程中,需要采集和监测农 ...

  8. 嵌入式linux图片浏览器,基于嵌入式Linux图片浏览器的设计与实现.doc

    基于嵌入式Linux图片浏览器的设计与实现 PAGE PAGE II 本科学生毕业论文(设计) 题目(中 文): 基于嵌入式Linux图片浏览器的设计与实现 (英 文): The design and ...

  9. 嵌入式linux界面开发,基于嵌入式Linux平台实现GUI系统的设计方案

    描述 嵌入式图形用户界面( GUI, Graphic UserInterface)系统作为嵌入式系统中的一大关键技术,为用户提供设备的控制接口,其性能的好坏,界面的美观程度,影响着用户对产品的购买意愿 ...

  10. 嵌入式linux矩阵键盘,基于嵌入式Linux的矩阵键盘驱动程序开发

    O 引 言 随着以计算机技术.通信技术和软件技术为核心的信息技术的发展,嵌入式系统在各个行业中得到了广泛的应用.嵌入式系统已成为当今IT行业的焦点之一.而在嵌入式系统中,键盘是重要的人机交互设备之一. ...

最新文章

  1. python代码优化_Python 代码优化技巧(一)
  2. Android之IPC通信中的UID和PID识别
  3. vue 学习之路 —— 图片的引入
  4. Windows Phone 实用开发技巧(18):使用SystemTray显示全局消息提醒
  5. (99)利用任务task实现单字节乘法功能,面试必问(二十三)(第20天)
  6. 思维导图Vue组件 mindmap
  7. u盘解密软件_企业都使用哪些数据防泄密软件
  8. DHTML【11】--DOM
  9. PLC数据采集解决方案,BCNet数据采集
  10. 《Machine Learning in Action》—— Taoye给你讲讲Logistic回归是咋回事
  11. Python项目-Day26-数据加密-hash加盐加密-token-jwt
  12. 企业价值角度:RPA 机器人是什么?
  13. 【云图】如何用云图制作APP(旅游类,美食记录,免费停车,通讯录等)
  14. 计算机网络三级证书含金量,【热点】计算机三级证书有用吗,计算机三级证书含金量如何...
  15. python日历模块_Python calendar日历模块的说明
  16. Android开发——编译FFmpeg(一、前言)
  17. 华为开发人员与测试人员
  18. 基于MSP430F5529的后驱四轮小车
  19. 优质开源:共享图书小程序3.0 全新UI 免费下载
  20. 黑阔的win10--把win10打造成kali(记录帖)

热门文章

  1. 在AD中安装元件和封装库
  2. 【C语言】C语言从入门到精通 | 第3章 数据类型(一)— 自学笔记
  3. 操作系统概念第六章部分作业题答案
  4. c#模拟看板控件_在Winform界面使用自定义用户控件及TabelPanel和StackPanel布局控件...
  5. 沟通CTBS助大川集团集中部署K/3系统
  6. SQL Prompt教程:使用SQL提示代码分析避免T-SQL技术债务
  7. 电脑桌面上怎么找计算机,xp桌面上我的电脑图标不见了怎么找回来
  8. 法制教育对未成年人的作用和实施字体
  9. 一行python代码查找中文同义词(synonyms)
  10. java下载文件excel格式错乱,excel表格数据错乱如何修复-excel表格里的文件突然格式全部乱了,怎么恢复?...