在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

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

            作者: 時間:2012-02-27 來源:網絡 收藏

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

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

            1 引言

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

            2 實時數據庫存儲結構的分析與

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

            2.1 實時數據庫的數據流分析

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

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

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

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

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

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

            3 實時數據庫系統(tǒng)的實現(xiàn)

            3.1 數據模型的分析與構建

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

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

            3.2 數據類型的實現(xiàn)

            上述用于構建實時數據過程量的三類數據模型,對應于具體的實現(xiàn)分別可用:浮點型, 布爾型,字符數組來表示。實時數據可由結構類型實現(xiàn),以其中的實時數據類型字段來區(qū)分 不同的過程量類型。實時數據結構類型的實現(xiàn)如下。

              /*枚舉類型標記實時數據過程量類型 */

              typedef enum {

              double_t = 1,

              bool_t

              } pv_type_set;

              /* 聯(lián)合類型實現(xiàn)實時數據過程量值 */

              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;//現(xiàn)場測量裸數據

              bool IsRanCon;//是否進行量程變換

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

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

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

              int storecyc;//備份周期

              bool IsAlarm;//是否報警

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

              … …

              } tag_node;

            3.3 實時數據在數據庫中的組織形式及相關數據結構

            為了充分地利用 Linux 平臺對實時多任務操作的支持,實時數據庫的數據采集與處理等任務應以多進程的形式并發(fā)執(zhí)行。而Linux 操作系統(tǒng)IPC 機制中的共享內存技術可以根據需 要離散地分配內存空間,從而可將所有數據點的共享內存地址構成索引并建表。在實際應用 中,經常會將若干在生產工藝上有關聯(lián)的數據點劃分為一個數據域,所以地址索引表為兩級 結構:第一級為域表,其中的數據項存儲特定數據域的地址;第二級為數據點表,數據項存 儲某一數據域中的每個數據點的內存地址。域表與數據點表中存儲的數據點所在的域號字段 與數據點號字段組合構成數據點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 一組訪問實時數據庫的通用編程接口

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

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

              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 結語

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

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

            linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

            linux相關文章:linux教程




            評論


            相關推薦

            技術專區(qū)

            關閉