聶 冰 鄭廣海 孫晶華
(大連交通大學軟件學院,遼寧 大連 116028)
隨著現(xiàn)代自動控制和設備制造技術的發(fā)展,先進自動控制設備在工業(yè)現(xiàn)場得到廣泛的應用??刂圃O備的種類不斷增加,所使用的通信協(xié)議、接口類型都呈現(xiàn)多樣性[1]。傳統(tǒng)的設備配置軟件因為設備配置器與軟件主體框架之間具有耦合性,對于新增加的設備需要創(chuàng)建新的EXE或DLL文件實現(xiàn)業(yè)務邏輯與配置界面,同時需要修改軟件主體代碼實現(xiàn)對新設備的支持。這種構架制約了設備配置軟件開發(fā)和使用的靈活性,增加了開發(fā)周期,加大了開發(fā)成本[2]。因此,提高設備配置軟件的通用性和可擴展性是軟件設計的關鍵。
筆者針對傳統(tǒng)配置軟件通用性差、可擴展性不足的問題,在傳統(tǒng)軟件設計的基礎上,提出了基于設備描述的設備配置模型。該模型以純文本文件對設備配置器的三大基本要素——設備配置信息、配置數(shù)據(jù)信息和配置界面信息進行描述,降低了軟件開發(fā)人員的編程難度,同時在配置軟件中增加了設備配置器的抽象接口,提高了軟件的可重用性,縮短了軟件的開發(fā)周期。該模型應用在DJTConfig設備配置軟件中證明了其有效性和實用性。
XAML(eXtensible Application Markup Language)是微軟公司以XML為基礎,為構建程序用戶界面而開發(fā)的一種新的描述性語言。除了具有標記語言的一般特點,XAML在設計用戶界面方面具有更大的優(yōu)勢。XAML簡化了用戶界面的創(chuàng)建過程,開發(fā)人員可以利用XAML對WPF程序的用戶界面元素,如文本、按鈕、圖像及列表框等進行詳細的設置,對整個界面進行合理化的布局[3],與其他的.NET語言結合,構建一個功能完善、界面美觀的WPF程序。
通常,XAML文件由微軟公司提供的工具MarkupCompiler編譯成結構更緊湊的類二進制文件BAML, BAML數(shù)據(jù)流保存在程序集合的資源文件中,在InitializeComponent方法中得以加載,用于構建用戶界面。該功能由WPF提供了默認支持,在基于WPF的工程中,XAML文件的編輯、編譯與加載由.Net Framework 提供了默認實現(xiàn),因此編程人員可以使用XAML快速地開發(fā)圖形界面并方便地加載到WPF程序中。微軟公司也提供了在運行期加載XAML/BAML的方式,相對于編寫后臺代碼,使用該方法維護、修改用戶界面更加方便、快捷。
定義在System.Windows.Markup命名空間下的靜態(tài)函數(shù)XamlReader.Load(),可以用來分析格式良好的XAML片段并創(chuàng)建相應的對象樹,返回該對象樹的根。System.Windows.Baml2006.Baml2006Reader可用于讀取XAML,結合XamlReader.Load函數(shù)生成對象樹,代碼如下:
string filepath = @"...Dictionary1.baml";
FileStream fstream = new FileStream(filepath, FileMode.Open);
Baml2006Reader reader = new Baml2006Reader(fstream);
ResourceDictionary rs = System.Windows.Markup.XamlReader.Load(reader) as ResourceDictionary;
在運行期間該特性以編程方式為加載用戶界面提供了技術支持,同時也為設備配置器提供了一種全新的配置界面開發(fā)方式。
現(xiàn)場設備種類繁多,不同廠商的設備互不兼容,為了實現(xiàn)不同設備之間的互操作,設備描述(Device Description, DD )技術運用設備描述表、電子設備描述語言(EDDL)及可擴展設備描述語言(XDDL)等對各個設備的參數(shù)、狀態(tài)及功能等進行描述,使設備之間的數(shù)據(jù)交互與傳遞成為可能。通用的設備描述文件結構如圖1所示。
圖1 通用的設備描述文件結構
鑒于XML具有開放性、平臺無關性及良好的可擴展性等優(yōu)點[4,5],XML成為設備描述文件的重要載體,加之DOM解析器在讀寫XML文件方面的強大支持,使得基于XML的設備描述文件在工業(yè)現(xiàn)場得到了廣泛應用。該文件將設備的基本信息及配置數(shù)據(jù)等編寫成XML文檔,對現(xiàn)場設備進行結構化的文本描述,構成了格式良好、信息詳盡的數(shù)據(jù)倉庫,進而為實現(xiàn)數(shù)據(jù)驅動的設備配置模型提供了數(shù)據(jù)源。
筆者提出的設備配置模型由設備配置軟件和設備配置器構成。與傳統(tǒng)設備配置軟件相比,該模型在配置軟件中增加了設備配置器的抽象接口,提高了軟件的可重用性。軟件主體代碼相對穩(wěn)定,通過定義新的設備配置器完成對新設備的支持,便于系統(tǒng)的擴展。其模型結構如圖2所示。
圖2 設備配置模型結構
由圖2可知,模型中的設備配置軟件分為3層,分別為實例層、抽象層和服務層。在實例層中,設備配置器中的設備描述文件實例化生成的現(xiàn)場設備定義該層,實例對象與每個獨立的設備配置器一一對應,實例對象在設備配置器加載時創(chuàng)建,配置器的配置界面關閉時銷毀。 其行為由設備配置數(shù)據(jù)驅動,實例對象通過基于DOM的解釋器對配置數(shù)據(jù)文件進行訪問和操作[4],生成配置數(shù)據(jù)對象,配置界面文件由XamlReader創(chuàng)建并內嵌于設備配置軟件的配置器窗口顯示給終端用戶。配置數(shù)據(jù)對象與配置界面對象通過數(shù)據(jù)綁定建立數(shù)據(jù)連接。抽象層實現(xiàn)了設備配置器的抽象接口,定義了設備識別、數(shù)據(jù)存儲、用戶界面創(chuàng)建及后臺業(yè)務邏輯等功能的通信接口。抽象層隱藏了設備配置器的實例對象,實現(xiàn)了配置軟件實例層對服務層的透明化,解除了兩者之間的強耦合,使設備配置器與設備配置軟件同步開發(fā)成為可能,進而實現(xiàn)在不修改設備配置軟件主體代碼的情況下增加對新設備的支持,彌補了設備配置軟件在通用性和可擴展性方面的不足。服務層負責實現(xiàn)設備狀態(tài)查詢、配置數(shù)據(jù)讀寫及與設備進行數(shù)據(jù)通信等功能。
該模型的設備配置器使用XML文檔對設備進行描述,對應的設備描述文件結構如圖3所示。該模型對通用設備描述文件結構做了擴展,將設備參數(shù)信息分別指向基于XML的配置數(shù)據(jù)文件和基于XAML的配置界面文件,利用純文本文件實現(xiàn)設備配置。
圖3 設備描述文件結構
配置數(shù)據(jù)文件利用XML描述了可配置數(shù)據(jù)在設備內存中的分布,配置信息包括以下幾個方面:
a. 配置數(shù)據(jù)區(qū)長度。配置數(shù)據(jù)的總長度(以字節(jié)為單位)。
b. 數(shù)據(jù)類型。數(shù)據(jù)存儲格式對設備配置數(shù)據(jù)來說至關重要,只有按照規(guī)定格式存儲的數(shù)據(jù)才能被設備正確識別。該數(shù)據(jù)類型針對每個可配置的單位,規(guī)定了配置數(shù)據(jù)在內存中的存儲格式。
c. 偏移量。一個可配置單位的起始位置。該位置通過相對于配置數(shù)據(jù)區(qū)起始位置的字節(jié)偏移標識。
d. 初始值。創(chuàng)建設備的起始數(shù)據(jù),是保證設備正常工作的一組常用配置數(shù)據(jù)。初始值保證設備不經(jīng)任何配置就可以一組默認參數(shù)運轉。
e. 有效取值范圍??膳渲庙椀挠行?shù)據(jù)范圍,為數(shù)據(jù)校驗提供相關依據(jù)。
具體實現(xiàn)的配置數(shù)據(jù)文件部分代碼如下:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ConfigDataDefinition.1.0.xsd"> Enum="MyDevice_OutType_Enum"/>
該模型的設備配置界面由基于XAML的配置界面文件生成,該文件可由Blend或Visual Studio2008/2010提供的界面編輯器編輯。相對于編寫后臺代碼,利用XAML設計控件更加簡單、快捷。下面的代碼顯示了利用XAML文檔配置界面標簽和列表框的過程。
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" > <......>
DJTConfig設備配置軟件將Visual Studio 2010 C#作為開發(fā)平臺。該配置軟件的配置數(shù)據(jù)由設備描述文件驅動,在設備配置器初始化的過程中動態(tài)創(chuàng)建。配置數(shù)據(jù)的UML模型如圖4所示。
配置界面由配置界面文件生成,XamlReader負責創(chuàng)建界面對象樹,界面對象樹的加載過程由以下代碼實現(xiàn):
///
/// Load xaml file to a object of UserControl
///
///
///
internal static UserControl Load(string xamlFilePath)
{
using (var stream = new StreamReader(xamlFilePath))
{
var featurePageControl = XamlReader.Load(stream.BaseStream);
return (UserControl)featurePageControl;
}
}
圖4 配置數(shù)據(jù)的UML模型
設計的DJTConfig配置軟件界面如圖5所示,圖中顯示了設備列表和一個打開的設備配置器。配置數(shù)據(jù)和配置界面之間通過微軟數(shù)據(jù)綁定機制建立聯(lián)系。界面中標簽控件到MyDevice_OutputStatusLbl和列表框控件到ch0OutputTypeVal的數(shù)據(jù)綁定部分代碼如下:
該設備配置軟件可通過部署設備配置器增加對新設備的支持。任何符合定義格式的設備配置器都可以被設備配置軟件識別并加載到運行期環(huán)境。新設備配置器的開發(fā)可以基于文本編輯器,大大降低了開發(fā)成本和對開發(fā)人員編程能力的要求。利用基于純文本的設備描述文件開發(fā)同等規(guī)模的設備配置器相對編程模式的開發(fā)縮短開發(fā)周期50%。
圖5 DJTConfig配置軟件界面
提出了基于設備描述的設備配置模型,將基于XML和XAML的設備描述文件和配置界面文件內嵌在設備配置器中。通過配置純文本的設備配置器插件實現(xiàn)對新設備的支持,源文件中主體代碼不需要改動,簡化了配置軟件開發(fā)的復雜度。將該模型應用到DJTConfig設備配置軟件中,設備更新簡單、快捷,節(jié)省了開發(fā)時間與開發(fā)成本。