摘要:該文主要介紹了企業能源消耗系統建模與仿真軟件(Modeling and Simulation Software for Enterprise Energy Consumption System,簡稱EEC ModSim)中模型構造器的實現,依據面向對象的分層模塊化設計方法,首先給出了模型構造器的總體設計框架,并詳細介紹了各功能模塊,然后從系統實現的角度給出了軟件開發的幾個關鍵處理技術。
關鍵詞:可視化建模;模型構造;面向對象;XML
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)36-2672-03
The Modeling Tool Implementation of Modeling and Simulation Software for Enterprise Energy Consumption System
OU Hao-ling, WANG Jian, MA Fu-min
(CIMS Research Center, Tongji University, Shanghai 201804, China)
Abstract: This paper mainly introduces the implementation of EEC ModSim modeling tool, which is an essential part in EEC ModSim(Modeling and Simulation Software for Enterprise Energy Consumption System). Based on object oriented and layered modularized design method, this paper firstly explains the frame structure of model design tool, and then presents the function of each module. Several key technologies for software development are also discussed.
Key words: visual modeling; model construction; Object-Oriented; XML
1 引言
企業能源消耗系統建模與仿真軟件(簡稱EEC ModSim)是用C#在.NET平臺上開發的以模糊Petri網為理論基礎的流程模擬軟件。依據文獻[1],在EEC ModSim中用模糊變遷表示各能耗活動,用模糊庫所表示能耗活動相應的原料和成品的倉庫,模糊庫所中的標記數表示原料和成品的數量,相應的供需關系用結點間的連線表示,連線的連接強度表示從起點到終點運輸原料或成品時的損耗率。EEC ModSim通過將企業能耗過程映射為模糊高級Petri網的形式來建立可視化能耗過程模型。
針對上述基本理論,本文主要從軟件設計與實現的角度,詳細給出了該可視化能耗過程模型構造器的實現。全文共包括兩大部分,第一部分主要描述了模型構造器的總體設計框架,第二部分分別從建模元素類結構的設計,模型的圖層表現以及模型XML保存的角度,詳細介紹了其關鍵開發技術。
2 模型構造器的總體設計框架
由于能耗系統包含錯綜復雜的能源傳輸管網結構、動態多變的能耗過程、相對固定的能耗設備配置結構等多種具有一定結構化的子系統。從可視化建模的需求出發,充分發揮視圖模型的可視化描述優勢,遵循面向對象的分層模塊化設計方法,給出軟件的整體框架及所提供的建模功能模塊,如圖1所示。
可視化的拖拉式建模方式是能耗系統模型設計器的首選,用戶界面的圖層表現是其實現的關鍵。EEC ModSim的可視化建模為用戶提供了建立能耗過程模型所需要的各類基本元素,主要包括:能耗活動(原子型和抽象型)、能源倉庫、邏輯控制、能源傳輸管道,以及狀態或消息流六個建模元素構成。這里,能耗設備的能源輸入與輸出關系體現了消耗系統潛在的能源約束關系和動力學特性,是能耗系統的核心,該建模元素將與設備模型辨識模塊相關聯。而原子型能耗設備是指該能耗活動沒有子模型,而抽象型能耗活動是指該能耗活動為嵌套型能耗活動。能源倉庫主要用來存放能耗過程中的能源物質或非能源物質以及產品等。狀態或消息位置主要用來反映能源消耗系統中各設備的工作狀態或貫穿于能耗過程中的消息,而邏輯控制則主要用來控制狀態的變化或消息的傳遞,體現一些離散型的操作動作,比如設備的啟、停操作等。能源傳輸管道作為連接弧,用于連接能源倉庫與能耗設備,體現能源在傳輸管網中的流動,而狀態流則用于連接狀態或消息位置與邏輯控制,體現消息或狀態的傳遞過程。
模型構造主要實現建模元素的屬性設置,并完成能耗系統模型的定義。它支持能耗過程模型的構造、能耗設備模型的配置、能源傳輸管網模型的構造,并可以導入資源信息對相關能源或物料進行描述。通過嚴格定義各類組成元素的屬性特征,擴展模型語義,從而提高了模型元素的描述能力。
EEC ModSim 對系統模型的保存采用XML的形式化語義描述方式。將模型所含語義信息進行描述:一種是基本網結構所表示的事件間的并發關系,另一種是各網元素及其約束所表示的語義信息。這樣,有利于系統的封裝與對外接口的統一,從而提高軟件的標準化與兼容性。XML文檔的反向解析,即為模型的讀取,從形式化語義描述轉換為軟件內部的圖形化描述,便于用戶對能耗系統模型的編輯與修改。
3 EEC ModSim模型構造器實現的關鍵技術
3.1 建模元素的類結構設計
EEC ModSim模型構造器的核心思想是用表層設計器構造流程圖,將圖中的建模元素映射到內部可處理的數據結構。以便下一步的仿真算法對模型進行遍歷,并在遍歷過程中觸發活動,在活動代碼處理完成后對節點數據進行修改,循環遍歷,直到仿真結束。因此設計和合理的類結構關系和數據結構是關鍵之一。

圖1 系統主要功能模塊及其組成

圖2 一個連接示意圖

圖3 圖形間的數據結構圖
1) 底層類設計
根據模糊Petri網理論,EEC ModSim模型元素抽象型能耗活動、原子型能耗設備(能耗活動)、能源倉庫、邏輯控制、能源傳輸管道,以及狀態或消息流六大類,程序中設計了一個基類作為PetriElement,包含各類的共有屬性(如ID和Name屬性),其他所有類(ConsumEquipCs,InfoStreamCs,TriggerCs,EnergyStoreCs,DiscreteConsumCs,EnergyStream)從這個基類中派生,每個類都包括各自的屬性和讀取方法。
以EnergyStoreCs類為例:它對應了petri網中的庫所。除去從基類中繼承的ID和Names等屬性,庫所作為存儲資源的場所,有容量(Capacity),當前值(Token)屬性,并進一步擴展了時延,表達公式等屬性。同時庫所對應一組訪問屬性的行為,如:ReadProperty(),SetProperty()。
2) 表層類設計
表層類作為用戶和程序的交互層,要具有建模工具欄上的圖標表現功能,并要記錄各個建模元素的拓撲結構,同時實例化對應建模元素底層類對象。以EnergyStoreStructCs類為例,屬性包括圖形對象(image),能源名稱(name),能耗狀態(state),底層類對象(energyStoreCs),圖形位置信息對象(port,Port是程序中設計用來記錄圖形元素間拓撲結構的類,在下一節闡述)。方法包括讀取圖形位置(getPort()),獲取前后圖標(getNextItem())等。
表1 .Net框架提供的兩種類型格式器區別(Formatter)

3) 圖形元素間的拓撲結構表示
EEC ModSim中元素間的關系實質是有向圖連接:將圖元定義為一個cell,每個cell可以是一個頂點(vertex)或者邊(edge)。頂點有鄰接的頂點,它們通過邊相聯系,邊聯接的兩個端點稱為目標和源。為了更方便描述,程序中構造了Port(節點)類,用來記錄坐標位置和建模元素的ID。每一條邊有兩個Port對象,用來記錄目標節點和源節點。而一個活動可以有多個分支,即頂點(vertex)可以與多條邊(edge)相連,于是每個頂點設計一個Arraylist動態記錄連接到頂點的Port對象。
圖2是一個連接示意圖,包括兩個頂點(ConsumEquip,EnergyStore)和一條邊(EnergyStream),能源從能源倉庫流向能耗設備。

圖2 一個連接示意圖
下面的代碼為ConsumEquip頂點建立port對象:
ConsumEquipStruct.Portport = new Port(itemPoint,LineId);//實例化ConsumEquip的port對象
ConsumEquipStruct.portArray.Add(port);//將port存入動態數組,以便一個頂點同多條邊相連
下面對代碼構建了EnergyStream中的port對象:
EnergyStreamStruct.Port sourcePort = new Port(itemPoint,itemId)//源節點
EnergyStreamStruct.Port targetPort = new Port(itemPoint,itemId)//目標節點
這樣的數據結構使得轉移與活動的關系變得簡潔明了。當元素移動時,元素port的坐標信息被修改,同時邊通過setSoucePort和setTargetPort方法修改坐標信息,從而使連接邊隨著元素移動。上圖之間的數據結構可以用圖3來表示:
■
圖3 圖形間的數據結構圖
3.2 模型的圖層表現
EEC_ModSim模型構造器在元素的可視化表示上,利用了.NET 框架提供的 GDI+ 應用程序編程接口 (API)。它是 Windows Graphics Device Interface (GDI) 的高級實現。通過使用 GDI+,可以創建圖形、將圖形圖像作為對象操作。以下步驟和代碼說明了程序中主要的圖形操作:
1) 定義一個ResourceManager 對象,管理程序中的圖像資源,代碼如下:
ResourceManager resource = 1;//圖像資源管理器
resource = new ResourceManager(typeof(Resource1));//Resource1是新建的資源文件,包含建模元素的圖形元素。
2) 當觸發工具欄按鈕Active事件時,通過圖像資源管理器創建相應工具欄的圖形對象到相應的表層類,代碼如下:
itemImage =(Image)(resource.GetObject(\"Discrete_Place1\"));//通過資源名稱,設置資源圖片
3) 調用DrawImage()函數以呈現圖像,調用.DrawLine()函數繪制連接線段。
Graphics.DrawImage(itemImage, itemPosition);//在相應控件上繪制圖像
Graphics.DrawLine(pen, startPoint, endPoint);//繪制圖箭頭
4) 需要刪除圖像時調用dispose()方法。
Graphics.Dispose();
3.3 用xml格式器保存讀取模型數據
一個能耗系統基本上都由一定數量的子系統構成,因此描述整個能耗系統需要建立多個視圖模型。考慮到多個視圖模型下各建模元素的ID重名,尋求良好的互操作性和可讀性,采用“序列化(Serialization)”和“反序列化”(Deserialization)的XML格式器保存和讀取模型。
表1 .Net框架提供的兩種類型格式器區別(Formatter)
■
在程序中定義了一個用來保存數據的SaveData類和讀取數據的ReadData類,限于篇幅,只列出保存和讀取的部分代碼:
//創建一個文件\"*.XML\"并將對象序列化后存儲在其中
SoapFormatter formatter = new SoapFormatter();
Streamstream = new FileStream(FileName, FileMode.Create, FileAccess.Write, FileShare.None);
formatter.Serialize(stream, savedate);
//打開文件\"*.xml\"并進行反序列化得到對象
SoapFormatter formatter = new SoapFormatter();
Stream stream = new FileStream(openFileDialog1.FileName, FileMode.Open, FileAccess.Read, FileShare.None);
readdata = (ReadData)formatter.Deserialize(stream);
系統最終實現如圖4所示。模型設計器的左側是導航窗口,通過一個樹型結構描述過程的屬性以及資源模型等信息。主窗口是用戶進行建?;顒拥闹饕獏^域,建立能耗過程模型及能耗設備模型及能源傳輸管網等的配置信息。最后EEC ModSim模型構造器輸出包括模型所有信息的xml文件。
4 結束語
如今,圖形化的建模方式是用戶界面的首選。EEC ModSim模型構造器在.NET平臺下開發, 設計了簡明直觀的用戶界面,具有良好的操作性,可以詳細描述能耗系統的屬性,并為下一步的仿真提供了可操作的數據結構。
參考文獻:
[1] 馬福民,王堅.面向企業能源消耗過程的模糊Petri網模型研究[J].計算機集成制造系統,2007,13(9).
[2] 王科奮,王堅.JGraph在RRFlo工作流模型設計器中的應用[J].制造業自動化,2005,27(11).
[3] 蔡志林.Petri網建模[D].長沙理工大學碩士學位論文,2005.
[4] 丁彩虹.Petri網建模工具的面向對象設計[J].系統工程與電子技術,2000,22(8).
[5] 俞家文,陳空軍,高立群.基于GDI_和_NET組件技術的MIS系統動態繪圖[J].微計算機應用,2007,28(5).