<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 嵌入式Linux組態(tài)軟件實(shí)時(shí)數據庫的設計

嵌入式Linux組態(tài)軟件實(shí)時(shí)數據庫的設計

作者: 時(shí)間:2012-02-27 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要:本文主要提出了一種可應用于監控的實(shí)現方法。通過(guò)對中的地位與作用的分析,結合多任務(wù)方面的特性,并實(shí)現了利用多種存儲介質(zhì)構造實(shí)時(shí)存儲結構,并給出了描述實(shí)時(shí)數據模型的數據結構與訪(fǎng)問(wèn)數據庫的通用函數接口。

本文引用地址:http://dyxdggzs.com/article/149564.htm

1 引言

實(shí)時(shí)數據庫(real-time database, RTDB)作為與實(shí)現的核心內容解決了其所 應對的現代工業(yè)生產(chǎn)現場(chǎng)環(huán)境中生產(chǎn)數據與控制數據類(lèi)型復雜多樣,數據處理與事件調度時(shí) 間約束嚴格等難題[1]。目前,國內外已經(jīng)有多種基于Windows 操作系統平臺的實(shí)時(shí)數據庫 產(chǎn)品在自動(dòng)化過(guò)程控制領(lǐng)域中得到應用[2],隨著(zhù) 操作系統的出現,這種開(kāi)發(fā)平臺單一 的局面有望得到改觀(guān)。 操作系統具有很多優(yōu)秀的特性適于組態(tài)軟件實(shí)時(shí)數據庫系統的 開(kāi)發(fā),特別是其完善的進(jìn)程線(xiàn)程管理,進(jìn)程間通信機制與并發(fā)控制,可靠的內存管理系統[3], 更是為時(shí)間約束嚴格的實(shí)時(shí)數據庫的開(kāi)發(fā)提供了有力的支持。因此,本文結合Linux 系統實(shí) 時(shí)多任務(wù)方面的特性,采取能夠滿(mǎn)足數據實(shí)時(shí)響應要求的多級存儲結構,研究并提出了一種 基于Linux 系統平臺并可應用于監控組態(tài)軟件的實(shí)時(shí)數據庫實(shí)現方案。

2 實(shí)時(shí)數據庫存儲結構的分析與

實(shí)時(shí)數據庫是監控組態(tài)軟件數據處理,事務(wù)調度,各應用程序間通信的中心。圖1 即示 出了組態(tài)軟件實(shí)時(shí)數據庫的數據處理流程。

2.1 實(shí)時(shí)數據庫的數據流分析

組態(tài)軟件運行環(huán)境分為實(shí)時(shí)數據庫管理系統(RTDBMS)和實(shí)時(shí)監控界面程序(real-time supervisory control interface, RTSCI)。實(shí)時(shí)數據庫管理系統需要把工業(yè)現場(chǎng)中復雜多樣的過(guò) 程和控制數據抽象為合理高效的數據結構,實(shí)時(shí)監控界面程序則利用實(shí)時(shí)過(guò)程數據為現場(chǎng)監 控人員提供一個(gè)反映實(shí)際生產(chǎn)過(guò)程的可視化圖形界面,在實(shí)際運行中二者構成客戶(hù)端/服務(wù) 器計算模式。RTDBMS 作為數據服務(wù)的提供者,需要滿(mǎn)足RTSCI 種類(lèi)多樣的數據需求。

為了形象的描繪工業(yè)現場(chǎng)的實(shí)際生產(chǎn)過(guò)程,RTSCI 由多種圖形對象構成,根據不同的數 據類(lèi)型需求可分為實(shí)時(shí)顯示,實(shí)時(shí)趨勢,歷史趨勢,實(shí)時(shí)報警等。而應用于現代工業(yè)生產(chǎn)現 場(chǎng)環(huán)境的實(shí)時(shí)數據庫還需要滿(mǎn)足嚴格的數據存取與事件響應的定時(shí)限制。所以,傳統的數據 庫管理系統所采用的數據表示方法,存儲模式已不能滿(mǎn)足工控組態(tài)軟件所要求的響應速度 [4]。為此,在設計實(shí)時(shí)數據庫時(shí),為了兼顧RTSCI 所要求的數據圖形表現多樣性與工業(yè)生產(chǎn) 環(huán)境時(shí)間約束的嚴格性,需要采用多種存儲介質(zhì)合理組合的多層級數據存儲結構。

在工業(yè)生產(chǎn)過(guò)程中實(shí)時(shí)產(chǎn)生的過(guò)程量,是需要組態(tài)軟件在每個(gè)采樣周期中及時(shí)更新的動(dòng) 態(tài)數據,為了保證實(shí)時(shí)數據庫的及時(shí)響應,須將其存儲在內存中;對于RTSCI 的某些數據 需求,如歷史趨勢顯示,實(shí)時(shí)數據庫應為之提供相比內存更大的存儲空間,這類(lèi)數據需求不 需要很高的響應速度,可將之命名為靜態(tài)數據,其所服務(wù)的圖形對象要求可按時(shí)間翻頁(yè)瀏覽, 這類(lèi)靜態(tài)數據適于存儲在文件系統中;而需要長(cháng)期保存的生產(chǎn)過(guò)程量數據,即歷史數據,它 們是今后進(jìn)行生產(chǎn)效能分析的依據,這些數據可以保存在通用數據庫中。這樣,由內存數據 庫,外存文件系統以及通用數據庫的三級存儲結構,便構成了既可滿(mǎn)足實(shí)時(shí)數據定時(shí)限制又 兼顧數據需求多樣性的可應用于監控組態(tài)軟件的實(shí)時(shí)數據庫的存儲架構。

2.2 利用共享內存與命名管道技術(shù)實(shí)現實(shí)時(shí)數據庫存儲結構

Linux 提供了一組由ATT System V.2 版本的UNIX 引入的進(jìn)程間通信(Inter-Process CommunicatiON, IPC)機制,其中的共享內存技術(shù)允許兩個(gè)不相關(guān)的進(jìn)程訪(fǎng)問(wèn)同一段邏輯內 存,是在兩個(gè)運行中的進(jìn)程間傳遞數據的一種非常高效的數據訪(fǎng)問(wèn)機制[5],可為RTDBMS 與RTSCI 間的動(dòng)態(tài)數據交互提供有力的支持。但共享內存技術(shù)本身并未提供任何同步機制, 因此還需要配合IPC 的信號量機制來(lái)保證二者間數據訪(fǎng)問(wèn)控制。Linux 提供的另一組在不相 關(guān)的進(jìn)程間進(jìn)行數據交互的函數是命名管道FIFO。它是將數據存儲在文件系統中實(shí)現進(jìn)程 間共享的一種通信方式。命名管道適用于數據存取響應時(shí)間要求相對寬松且數據交互總量較 大的應用場(chǎng)合。同時(shí),FIFO 中實(shí)現數據讀寫(xiě)的read 和write 調用的阻塞機制,還可以提供 進(jìn)程間的同步控制。

由上述對其特點(diǎn)的分析,FIFO 技術(shù)是實(shí)現RTDBMS 與RTSCI 間靜態(tài)數據交互較好的 選擇。上圖即示出了由共享內存,命名管道,ODBC 接口等多種進(jìn)程間通信機制構建的實(shí)時(shí) 數據庫存儲結構。值得注意的是,為了實(shí)現實(shí)時(shí)數據庫與通用數據庫的雙向數據交換,需要編寫(xiě)特定的通用數據庫接口(ODBC 接口)例程。Linux 提供了一組豐富的接口函數用來(lái)訪(fǎng)問(wèn) MySQL 數據庫。通過(guò)對通用數據庫MySQL 的數據連接進(jìn)行組態(tài),實(shí)時(shí)數據庫便可按照預 先指定的采樣周期,對規定時(shí)間區段內的歷史數據與MySQL 數據庫建立數據連接。

3 實(shí)時(shí)數據庫系統的實(shí)現

3.1 數據模型的分析與構建

傳統數據模型包括三個(gè)部分:一組數據對象及其結構,一組數據操作,關(guān)于數據對象與 操作的完整性約束[6]。而對于工業(yè)生產(chǎn)中所產(chǎn)生的實(shí)時(shí)數據,還必須約束于嚴格的定時(shí)限制。

在應用于工業(yè)現場(chǎng)控制的組態(tài)軟件中不僅包括實(shí)時(shí)產(chǎn)生的過(guò)程量數據,還存在著(zhù)描述系 統運行狀況的系統數據,在利用采集到的過(guò)程量數據的基礎上,經(jīng)處理后提取出的計算數據, 以及涉及控制測量組態(tài)或從工控軟件輸出到輸出裝置上的數據等。由此,可將實(shí)時(shí)數據模型 抽象為:模擬量,開(kāi)關(guān)量,字符串量三種數據類(lèi)型。

3.2 數據類(lèi)型的實(shí)現

上述用于構建實(shí)時(shí)數據過(guò)程量的三類(lèi)數據模型,對應于具體的實(shí)現分別可用:浮點(diǎn)型, 布爾型,字符數組來(lái)表示。實(shí)時(shí)數據可由結構類(lèi)型實(shí)現,以其中的實(shí)時(shí)數據類(lèi)型字段來(lái)區分 不同的過(guò)程量類(lèi)型。實(shí)時(shí)數據結構類(lèi)型的實(shí)現如下。

  /*枚舉類(lèi)型標記實(shí)時(shí)數據過(guò)程量類(lèi)型 */

  typedef enum {

  double_t = 1,

  bool_t

  } pv_type_set;

  /* 聯(lián)合類(lèi)型實(shí)現實(shí)時(shí)數據過(guò)程量值 */

  typedef union {

  double dPV;

  bool swhPV;

  } pv_data_set;

  /* 實(shí)時(shí)數據的數據類(lèi)型 */

  #define name_LEN 20

  #define DESC_LEN 50

  typedef STruct {

  char nAME[NAME_LEN + 1];//數據點(diǎn)名稱(chēng)

  pv_type_set type;//數據點(diǎn)類(lèi)型

  char desc[DESC_LEN + 1];//數據點(diǎn)描述信息

  pv_data_set pv;//數據點(diǎn)過(guò)程量值

  char domain[3];//數據點(diǎn)所在域號

  char eu[DESC_LEN + 1];//數據點(diǎn)工程單位描述

  double euLow;//數據點(diǎn)工程單位下限

  double euHigh;//數據點(diǎn)工程單位上限

  double pvRaw;//現場(chǎng)測量裸數據

  bool IsRanCon;//是否進(jìn)行量程變換

  double pvRawLow;//裸數據量程下限

  double pvRawHigh;//裸數據量程上限

  bool static;//靜態(tài)數據歷史數據存儲至文件系統

  int storecyc;//備份周期

  bool IsAlarm;//是否報警

  int AlarmPriority;//報警優(yōu)先級

  … …

  } tag_node;

3.3 實(shí)時(shí)數據在數據庫中的組織形式及相關(guān)數據結構

為了充分地利用 Linux 平臺對實(shí)時(shí)多任務(wù)操作的支持,實(shí)時(shí)數據庫的數據采集與處理等任務(wù)應以多進(jìn)程的形式并發(fā)執行。而Linux 操作系統IPC 機制中的共享內存技術(shù)可以根據需 要離散地分配內存空間,從而可將所有數據點(diǎn)的共享內存地址構成索引并建表。在實(shí)際應用 中,經(jīng)常會(huì )將若干在生產(chǎn)工藝上有關(guān)聯(lián)的數據點(diǎn)劃分為一個(gè)數據域,所以地址索引表為兩級 結構:第一級為域表,其中的數據項存儲特定數據域的地址;第二級為數據點(diǎn)表,數據項存 儲某一數據域中的每個(gè)數據點(diǎn)的內存地址。域表與數據點(diǎn)表中存儲的數據點(diǎn)所在的域號字段 與數據點(diǎn)號字段組合構成數據點(diǎn)ID。包括所有實(shí)時(shí)數據點(diǎn)的地址索引由一張域表與多張數 據點(diǎn)表構成。根據存儲域表結構的內存地址,便可訪(fǎng)問(wèn)所有數據點(diǎn)的共享內存地址。下面給 出域表與數據點(diǎn)表用到的數據結構。

  /* 描述域表數據項的數據結構 */

  typedef struct {

  char domIndex[3];//域號

  tbTag_item *tbTag_ptr;//該域的數據點(diǎn)表地址

  } tbDom_item;

  /*描述數據點(diǎn)表數據項的數據結構*/

  typedef struct {

  char tagIndex[3];//數據點(diǎn)號

  tag_node *tag_ptr;//指向數據點(diǎn)的指針

  int shmid;//存儲該數據點(diǎn)的共享內存標號

  char name[NAME_LEN + 1];//數據點(diǎn)名稱(chēng)

  } tbTag_item;

  域表與數據點(diǎn)表的數據項內容與關(guān)系結構示意見(jiàn)圖 3。

3.4 一組訪(fǎng)問(wèn)實(shí)時(shí)數據庫的通用編程接口

作為投入現場(chǎng)運行的監控組態(tài)軟件的核心部件,實(shí)時(shí)數據庫需要為現場(chǎng)操作人員提供類(lèi) 似傳統數據庫管理系統的實(shí)時(shí)數據查詢(xún)與更新等功能。另外出于設備無(wú)關(guān)性的考慮,也需要 為監控組態(tài)軟件的其他應用程序提供一組用來(lái)直接訪(fǎng)問(wèn)實(shí)時(shí)數據庫的接口函數。這樣,對于 其他工控設備與實(shí)時(shí)數據庫進(jìn)行數據交換的需求,只要利用這樣一組接口函數開(kāi)發(fā)不同的驅 動(dòng)程序便可得到滿(mǎn)足,從而增強了實(shí)時(shí)數據庫系統的通用性與開(kāi)放性。下面列出了一些較為 常用的數據訪(fǎng)問(wèn)接口函數。

  int CreatTag();//創(chuàng )建數據點(diǎn)

  char *GetNameByID(char *tagID);//通過(guò)數據點(diǎn)ID 取得數據點(diǎn)名

  char *GetIDByName(char *tagName);//通過(guò)數據點(diǎn)名得到數據點(diǎn)ID

  pv_type_set GetPVType(char *tagName);//通過(guò)數據點(diǎn)名得到數據點(diǎn)過(guò)程量值類(lèi)型

  int GetPVByName(char *tagName, pv_data_set *pv);//根據數據點(diǎn)名獲取數據點(diǎn)過(guò)程量值

  int SetPVByName(char *tagName, pv_data_set *pv);//根據數據點(diǎn)名寫(xiě)入數據點(diǎn)過(guò)程量值

5 結語(yǔ)

實(shí)時(shí)數據庫作為監控組態(tài)軟件的核心部分,其組織結構是否高效直接影響到與底層 I/O 過(guò)程設備的數據交換,與實(shí)時(shí)監控界面程序的數據傳遞,與組態(tài)軟件中其它運行程序的實(shí)時(shí) 通信等多項技術(shù)指標。所以,其設計要求結構精簡(jiǎn),存儲高效,并且具備相當的可靠性與穩 定性。經(jīng)實(shí)際應用證明,由本文提出的利用共享內存,文件系統,通用數據庫多層級存儲介 質(zhì)相結合的實(shí)時(shí)數據庫存儲結構,能較充分地利用Linux 操作系統實(shí)時(shí)多任務(wù)方面的特性, 較好地滿(mǎn)足工業(yè)生產(chǎn)現場(chǎng)環(huán)境的實(shí)時(shí)響應要求。另外,實(shí)時(shí)數據庫的開(kāi)發(fā)是一個(gè)有著(zhù)廣闊前景的研究領(lǐng)域,其還包括諸如I/O 調度與緩沖管理,恢復與超載管理等多項實(shí)現內容[7]。

本文作者創(chuàng )新點(diǎn):本文利用Linux 操作系統對多任務(wù)并發(fā)處理操作的良好支持,采用二 級地址索引為數據點(diǎn)獨立分配共享內存空間,以多進(jìn)程調度的方式實(shí)現了數據采集與處理從 而提高了系統吞吐量和數據存取效率。同時(shí),多層級的實(shí)時(shí)數據庫存儲結構能較好地兼顧工 業(yè)生產(chǎn)環(huán)境的時(shí)間約束與數據圖形表現多樣性的要求。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

linux相關(guān)文章:linux教程




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>