999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于IEC61970的CIM 模型數據庫的設計與實現

2013-08-03 01:28:08劉吉財蘇豪飛
山東工業技術 2013年15期
關鍵詞:定義數據庫

劉吉財 蘇豪飛

(1.重慶郵電大學,中國 重慶400065;2.河南煤化集團 鶴煤公司熱電廠,河南 鶴壁458000)

0 引言

隨著通信、計算機等技術的慢慢融入,電力系統的更新和發展已經是越來愈快,這就對支撐電力系統軟件應用的數據平臺部分提出了更高的要求:由于電力系統不斷發展,需要的數據量越來越龐大,數據間的關系也更加的復雜,因此數據平臺應該能夠支持高數量級的數據管理和關系建模;由于IEC 61970 標準里定義的CIM 是基于面向對象思想的,因此數據平臺要能夠反映出面向對象的特點;要能夠實現數據共享和交換; 由于IEC 61970 系列標準還在不斷的改進,CIM 模型也在不斷的擴展,就要求數據庫要易于擴充和維護。

1 總體結構

通過上文對功能需求的分析及數據庫的選擇,將模塊實現需要的工作總結為五部分,如圖1 所示:

圖1 模塊的整體設計

功能的大致流程如下:

(1)在服務器端系統將數據加載到FastDB,系統后臺實時的將封裝好的數據更新到FastDB 內;

(2)操作人員選擇需要實時監控的表,同時在服務器端人機交互界面通過只讀的方式將監控數據顯示出來;

(3)系統定期將FastDB 中的數據同步到MySQL 中;

(4)用戶在客戶端通過HSDA 實現訪問FastDB 內的實時數據;

(5) 用戶在客戶端通過GDA 或TSDA 實現訪問存儲在MySQL 內的歷史數據。

1.1 系統設計功能

(1)CIM 模型映射: 根據IEC61970 標準將CIM 以表的形式映射到數據庫中;

(2)數據持久化: 根據獲得數據類型,對應存入不同的表中;

(3)歷史數據查詢: 根據查詢需求提取數據;

(4)人機交互界面: 數據庫操作權限、數據管理。

1.1.1 CIM 模型在MySQL 中的 映射

對象的每個屬性可以匹配成對應二維表中的一列或者多列。不是所有的屬性都要映射, 在應用中不需要的部分就不用存儲到數據庫中。 命名規則中參考CIM 的規則,將數據庫表名和類名匹配,字段名和類的屬性名相對。 對象所使用的屬性通常繼承自其他類的屬性,表中可以包含對象中沒有用到的列屬性,但需要在建立表結構的時候給其設定缺省值,特別是實現表間關系的那些列。 根據實際需要考慮在表里建立一些CIM 類沒有明確定義的屬性, 例如建立CIM 版本信息的字段等。

1.1.2 主鍵

主鍵的存在就代表著表結構的完整性,表的記錄必須地得有唯一區分的字段,主鍵主要是用于和其他表的外鍵關聯。 主鍵本身在業務邏輯上不體現,不具有實際意義,這點與FastDB 是一致的并且也能保證以后數據庫更改的方便。因此我們定義了一個唯一無符號整數的主鍵來標識CIM 中每個類的實例對象。 并且該主鍵首先被定義在最頂端的“PowerSystemResource”表中,字段名為“PK_PowerSystemResource”。

1.1.3 命名轉換

為了和CIM 模型保持一致, 數據庫實體或表的命名取決于實體的使用。 表的命名采用其對應的CIM 類名。 在我們建立CIM 數據庫中,一個類名就對應一個表名。而當兩個實體具有雙向關聯關系時,引進一個新的實體來表征它們之間的關系。例如為了反映類“Class”和量測對象“measurement” 之間的關系, 引進一個新的表, 被命名為“ClassMeasurement”。 當引進的實體是為了反映自身之間的關聯關系時, 表被命名為 “baseClassNamebaseClassName”。 例如, 為了反映“PowerSystemResource”自身間的關系,引進的表名為“PowerSystemResource PowerSystemResource”。 主 鍵 名 為 “PK_baseClassName”, 外 鍵 為“FK_foreignbaseClassName”。 這樣的設計也是為了體現CIM 類之間多對多的關聯關系,同時減少了外鍵的數量,有利于提高數據庫的訪問效率。

1.1.4 繼承關系

在繼承樹的頂層對象的所有屬性為全部的子對象所擁有,每個子對象是父對象的特例。 設計的CIM 數據庫為了減少各個表之間耦合而又體現CIM 的這種繼承特征,對父類和子類各建一張表,還需建立一個附加的屬性表,這個表名為“Class”,用以連接這些集合。它有一個主鍵“PK_Class”以及字段“TableName”和“ParentTableName”,這樣繼承關系得以實現。同時在各個包含繼承關系的各個表中定義一個主鍵“PK_PowerSystemResource”來連接這種關系。 這種方法最大的好處就是它能夠很好的適應面向對象的特性,它能夠很好的支持多態,對于對象可能有的每個角色,只需要在相應的表中保存記錄。 修改超類和添加新的子類也非常容易,因為只需要修改或添加一張表。

1.1.5 一對多的關系

CIM 規范中有許多的一對多的關系。 對于一對多,在CIM 數據庫實施的時候可以方便的利用外鍵進行映射,通過在多方定義一個外鍵指向單方來表示出這種一對多關系。 例如在量測類“Measurement”和量 測值 類“MeasureValue”之 間,往 往 一 個“Measurement”包 含 幾 個“MeasureValue”,因此通過在“MeasureValue”表中定義一個外鍵“FK_Measurement”指向“Measurement”表的“PK_ Measurement”來連接這種關系。

1.2 數據持久化

使用open()函數打開FastDB,getTables()函數可以獲取FastDB 內所有表的內容。 聲明一個描述表的指針dbTableDescriptor*desc 指向獲得的所有表的內容則可以將表所有數據取出。 在將數據從FastDB 取出后使用mysql_query()將數據插入到MySQL 相應的表中,相關函數:bool dbDatabase::open (char_t const* dbName, char_t const* fileName=NULL,time_t waitLockTimeoutMsec=INFINITE,time_t commitDelaySec=0。

其中fileName 為數據庫所在路徑,waitLockTimeoutMsec 為自定義鎖釋放延遲時間,commitDelaySec 為自定義事務延遲提交時間。 如果文件名參數省略, 則通過數據庫名稱加一個后綴“.fdb" 來創建一個文件。dbTableDescriptor*getTables(){return tables;}函數返回dbTableDescriptor*tables;表示一個所有表的列表mysql_query(MYSQL*mysql,const char*q);其中mysql 為程序一開始聲明的一個句柄, 第二個參數為程序要執行的SQL 語句。

1.3 服務器端歷史數據查詢

使用mysql_real_connect()打開數據庫,mysql_list_tables()可以獲取所有表名并讓一個數據集指針指向返回的結果,mysql_fetch_row ()來獲得每個表的表名并全部存入結果集的數組中,按下標讀取此數組則可獲取表名。 mysql_store_result()獲取指定表數據組成的結果集,最后由mysql_fetch_row()函數獲取表中數據,相關函數:mysql_real_connect (MYSQL *mysql, const char *host,const char *user,const char *passwd,const char *db,unsigned int port,const char *unix_socket,unsigned long clientflag); 其中參數分別對應句柄,主機名,用戶名,密碼,數據庫名,端口,套接字或命名管道,風格。

1.4 人機交互

檢驗用戶名與密碼正確后連接到數據庫。 錯誤則彈出警告框。 正確連接到數據庫后, 可以根據表名調出表中數據以及備份和刪除數據。

2 系統實時監控功能

(1)CIM 模型映射:根據IEC61970 標準將CIM 以表的形式映射到數據庫中;

(2)數據監控:選擇想要監控的表;

(3)實時監控:監控所選表的實時數據;

(4)人機界面:監控項的選擇等。

2.1 CIM 模型在FastDB 中的映射

使用宏TYPE_DESCRIRTOR(field_list)來描述C++類或者結構體,其參數為一個類的字段描述符列表。所有數據庫中使用的類都要定義類型描述符。除了定義類型描述符外,還需要使用宏REGISTER(name)在C++類和數據庫表之間建立一個映像,該宏構造一個與類相連的表的描述符。 每個表只能在一個數據庫中使用,如果一個應用中使用了多個數據庫,需要用REGISTER_IN(name,database)宏將表注冊到一個具體的數據庫中。

2.2 數據表監控

使用open()函數連接數據庫后使用getName()函數將庫中所有的表名依次提取出來, 此時可以選取想要實時監控的表。 相關函數:getName(){ return name; }此函數返回表的名字;

2.3 數據實時監控

根據所選擇的表,使用findTableByName()找到和所選表名相匹配。 匹配后使用getFirstField()獲得表中所有字段,lastRow 表示表中最后一條記錄,記錄的獲取采用表的偏移量加上字段的偏移量dbsOffs。系統間隔5 秒讀取一次表內最后一條記錄相關函數: TableDescriptor*dbDatabase::findTableByName(char const* name),函數參數為指向一個字符串的字符指針,如果找到傳入字符串所相同的數據庫表的名字則返回一個指向這個表的結構指針。

[1]辛耀中.新世紀電網調度自動化技術發展趨勢[J].電網技術,2001,25(12):1-10.

[2]韓韜.遵循IEC 61970 標準的EMS 數據庫研究——基于CIM 和面向對象技術的數據庫瀏覽系統[D].國電自動化研究,2005.

猜你喜歡
定義數據庫
永遠不要用“起點”定義自己
海峽姐妹(2020年9期)2021-01-04 01:35:44
定義“風格”
數據庫
財經(2017年15期)2017-07-03 22:40:49
數據庫
財經(2017年2期)2017-03-10 14:35:35
數據庫
財經(2016年15期)2016-06-03 07:38:02
數據庫
財經(2016年3期)2016-03-07 07:44:46
成功的定義
山東青年(2016年1期)2016-02-28 14:25:25
數據庫
財經(2016年6期)2016-02-24 07:41:51
修辭學的重大定義
當代修辭學(2014年3期)2014-01-21 02:30:44
山的定義
公務員文萃(2013年5期)2013-03-11 16:08:37
主站蜘蛛池模板: 欧美日韩成人在线观看| 欧美激情一区二区三区成人| 四虎成人精品在永久免费| 人人澡人人爽欧美一区| 久久久久亚洲AV成人人电影软件| 一本二本三本不卡无码| 国产av色站网站| 国产精品视频猛进猛出| 国产女人喷水视频| 在线欧美a| 99热6这里只有精品| 欧美成人午夜视频免看| 亚洲欧美成人网| 夜夜高潮夜夜爽国产伦精品| 欧美午夜性视频| 综1合AV在线播放| 九九香蕉视频| 制服丝袜一区| 亚洲国产亚综合在线区| 国产地址二永久伊甸园| 午夜天堂视频| 国产91成人| 19国产精品麻豆免费观看| 亚洲人成人伊人成综合网无码| 国产精品午夜电影| 亚洲女同欧美在线| 亚洲中久无码永久在线观看软件| 久久久久久久蜜桃| 国产91久久久久久| 日本欧美中文字幕精品亚洲| 亚洲美女一区| 久久久久久尹人网香蕉 | 日本国产精品一区久久久| 91久久偷偷做嫩草影院电| 日韩东京热无码人妻| 又粗又大又爽又紧免费视频| 国产区精品高清在线观看| 国产精品免费福利久久播放| 91毛片网| 69av在线| 国产精品久久久久久久伊一| 影音先锋丝袜制服| 97在线免费视频| 在线欧美日韩| 再看日本中文字幕在线观看| 欧美日韩亚洲国产主播第一区| 91青青在线视频| 国产熟睡乱子伦视频网站| 国产乱肥老妇精品视频| 巨熟乳波霸若妻中文观看免费| 青青草原国产精品啪啪视频| 久久青草精品一区二区三区| 国产午夜看片| 国产xxxxx免费视频| 在线观看免费人成视频色快速| 国产网站免费看| 国产日韩欧美精品区性色| 午夜视频免费试看| 免费精品一区二区h| 亚洲天堂777| 国产91av在线| 午夜国产精品视频黄| 国产激情第一页| 久久久久人妻一区精品| 亚洲婷婷在线视频| 免费观看成人久久网免费观看| 尤物亚洲最大AV无码网站| 老司机精品99在线播放| 国产精品妖精视频| 四虎国产在线观看| 成人国产精品网站在线看| 日韩毛片免费视频| 丁香六月激情综合| 日本少妇又色又爽又高潮| 亚洲三级视频在线观看| 91区国产福利在线观看午夜| 亚洲高清中文字幕| 亚洲,国产,日韩,综合一区| 老司机aⅴ在线精品导航| 凹凸精品免费精品视频| 日韩精品无码免费一区二区三区| 欧美黄网在线|