《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 具有安全屬性圖編程組件的設計研究
具有安全屬性圖編程組件的設計研究
2017年微型機與應用第3期
李強,張建豐
杭州電子科技大學 計算機學院,浙江 杭州 310018
摘要: 研究和實現了具有安全屬性的可編程邏輯控制器(Programmable Logic Controller,PLC)編程組件。組件采用IEC611313標準功能塊模型,既滿足了IEC611313標準編程語言規(guī)范,也實現了組件在標準PLC編程軟件的復用。組件在PLC編程中可按需求改變接口,其封裝接口滿足TC6 XML schema屬性定義,增加的安全屬性實現了組件的安全復用。最后,在Microsoft Visual Studio(VS)2012中運用.NET組件技術和C#編程語言實現了組件,并對組件進行了相關驗證。
Abstract:
Key words :

  李強,張建豐

 ?。ê贾蓦娮涌萍即髮W 計算機學院,浙江 杭州 310018)

       摘要:研究和實現了具有安全屬性的可編程邏輯控制器(Programmable Logic Controller,PLC)編程組件。組件采用IEC611313標準功能塊模型,既滿足了IEC611313標準編程語言規(guī)范,也實現了組件在標準PLC編程軟件的復用。組件在PLC編程中可按需求改變接口,其封裝接口滿足TC6 XML schema屬性定義,增加的安全屬性實現了組件的安全復用。最后,在Microsoft Visual Studio(VS)2012中運用.NET組件技術和C#編程語言實現了組件,并對組件進行了相關驗證。

  關鍵詞IEC61131-3;TC6 XML schema;組件安全性

  中圖分類號:TP311文獻標識碼:ADOI: 10.19358/j.issn.1674-7720.2017.03.022

  引用格式:李強,張建豐.具有安全屬性圖編程組件的設計研究[J].微型機與應用,2017,36(3):75-78,81.

0引言

  IEC61131-3標準不僅對工控編程語言產生了指導規(guī)范作用,而且對PLC技術的發(fā)展也發(fā)揮了重要的指導作用[1]。由于PLC編程使用相應編程語言組件開發(fā),且目前軟件開發(fā)主流是面向對象及組件技術[2],因此有必要為符合IEC61131-3標準的編程軟件設計更為優(yōu)越的組件。

  在PLC圖編程組件研究中,有的利用組件技術對模塊進行封裝提高了組件的復用性[35],有的基于IEC61131-3設計標準組件,利于提高組件的規(guī)范性[68]。

  結合組件復用性和規(guī)范性研究,本文通過研究IEC611313標準圖編程功能塊模型、TC6 XML schema以及組件安全性,利用.NET組件技術設計了一種安全組件并進行了驗證,使得組件可以安全使用。

1IEC61131-3標準

  1.1IEC61131-3標準軟件模型

  IEC61131-3是當今世界第一個為工業(yè)自動化控制系統(tǒng)的軟件設計提供標準化編程語言的國際標準[1],標準分為兩個部分[910]:公共元素和編程語言。公共元素部分規(guī)范了變量的定義、數據類型,給出了系統(tǒng)軟件模型如圖1所示,并引入配置、資源、任務和程序組織單元(Program Organizition Unit,POU)的概念。編程語言規(guī)定了指令表、結構化文本、梯形圖、功能塊圖、順序功能圖。

 

001.jpg

  從IEC61131-3標準的軟件模型可知一個設備對應一個配置,每個配置包含若干個資源,每個資源內可以定義若干個任務,任務配置后周期地或事件驅動地控制一組POU執(zhí)行。圖3功能塊屬性定義1.2IEC611313標準功能塊模型

  POU由3種類型的基本單元組成:程序、功能塊(Function Block,FB)、函數,其中功能塊是IEC611313標準的核心元素,所以本文設計的組件本質上是基于功能塊的。功能塊面向對象特性的基本單元,由輸入變量、輸出變量、內部算法組成,且由一個類型名標識,如圖2所示。功能塊的輸入輸出變量來自于全局數據區(qū)且可存取,由用戶編程時設定。功能塊具有封裝性,能把特定的算法封裝起來,把具體的操作和操作數據分離開。

002.jpg

  IEC61131-3功能塊的輸入輸出通過全局數據區(qū)、變量存取路徑等方法交換信息,這樣簡單的結構方式適合描述復雜控制回路,能滿足工程的功能需求。功能塊的封裝性把系統(tǒng)的總體算法組態(tài)和單個算法組態(tài)的研制開發(fā)過程分開,增加了程序的可重用性和移植性[11]。

2TC6 XML schema

  雖然IEC611313標準促使PLC的編程軟件達到了統(tǒng)一化,但是不同編程軟件采用不同的數據描述格式,這樣不利于數據的交互。為了解決這一問題,PLCopen 技術委員會的TC6組織定義了一種被不同編程軟件跨平臺地傳輸屏幕信息的完整的開放標準接口[12],使得符合標準的數據描述文件能相互轉換,實現數據共享。其中IEC611313標準的核心部件POU的屬性在TC6 XML schema中定義如下:

  <xsd:simpleType name="pouType">

  <xsd:annotation>

  <xsd:documentation>different POUs

  </xsd:documentation>

  </xsd:annotation>

  <xsd:restriction base="xsd:NMTOKEN">

  <xsd:enumeration value="function"/>

  <xsd:enumeration value="functionBlock"/>

  <xsd:enumeration value="program"/>

  </xsd:restriction>

  </xsd:simpleType>

  標準編程軟件根據用戶設定的pouType屬性選擇對應的PROG、FB或者FUN。而支持本文組件設計的FB屬性以5種編程語言為基礎,定義如圖3所示。FB對應屬性在TC6 XML schema中有詳細的描述,定義了元素命名規(guī)范、XML描述文檔的結構以及元素的使用原則。本文定義的基于IEC611313標準圖形編程語言的安全組件包含的屬性就是基于TC6 XML schema所定義的。

3組件安全性

  PLC編程是基于可視化組件進行的,所以組件的安全性是整個工程的關鍵。組件安全性是與防止惡意侵入對程序數據非授權訪問或改變的能力有關的軟件屬性。針對非法代碼侵入所引發(fā)的組件安全性問題,本文為組件進行了兩個方面的安全性設計:(1)從組件設計層面,在組件生成時為組件庫添加<DLLMD5>屬性標簽,對組件代碼內存管理進行驗證,這樣保證組件庫被裝入到標準軟件時根據其內存大小就可以檢測到是否與設計的安全組件庫一致,從而判斷其安全性;(2)在組件TC6 XML描述層面,當PLC工程保存為標準的XML后,根據TC6 XML schema 接口組件描述對工程中組件描述部分驗證是否符合規(guī)范,從而判斷組件的安全性。

4組件設計與實現

  通過以上對IEC61131-3標準圖形編程語言定義的功能塊模型、TC6 XML schema以及組件安全性,本文對功能塊組件先進行組件屬性的設計,并在VS2012開發(fā)軟件中利用.NET組件技術和C#編程語言實現組件的設計。

  本文設計了BaseInOut、BaseIn、BaseOut、FUN、Label 5種組件分別表示基本輸入輸出模塊、基本輸入模塊、基本輸出模塊、函數模塊、標簽模塊,下面以BaseInOut為例對組件屬性設計進行闡述。

  4.1組件屬性與元素節(jié)點設計

004.jpg

  圖4<pou>元素節(jié)點定義因為FB包含在POU中,所以必須從TC6 XML schema定義<pous>元素節(jié)點開始分析。<pous>有若干<pou>元素節(jié)點,<pou>的定義如圖4所示。<pou>主要由包含返回類型、類型列表聲明信息的<interface>元素節(jié)點和包含5種編程語言相應聲明工作列表的<body>元素節(jié)點組成,如圖5所示,在<body>中工作列表按照XML文件順序執(zhí)行。<body>中FBD定義的對象元素的集合可以應用在所有的圖形結構體中,所以本文組件的屬性設計基本參照FBD元素的屬性。

005.jpg

  FBD元素定義規(guī)定<block>元素節(jié)點表示在功能或功能塊上操作的圖形表示,<block>包含的localId、width、height、typeName屬性可以用來表示組件的局部序號、寬度、高度和類型名;<block>包含的<position>元素節(jié)點、<inputVariable>元素節(jié)點、<inOutVariable>元素節(jié)點、<outPutVariable>元素節(jié)點分別組件在PLC圖形編程軟件的位置、輸入變量、輸入輸出變量、輸出變量。<position>用組件坐標的x、y值標定組件在編程軟件的具體位置信息;<inputVariable>包含的<variable>元素節(jié)點包含的屬性formalParameter表示變量名,包含的<connectionPointIn>元素節(jié)點、<connectionPointOut>元素節(jié)點表示組件連接輸入端和連接輸出端的位置信息。

  針對組件安全性屬性,本文對組件庫設計了<DLLMD5>元素節(jié)點,通過對設計的組件庫文件進行消息摘要算法第五版(Message Digest Algorithm 5,MD5)計算得到其MD5值作為“數字指紋”,當組件庫裝載到編程軟件時,由軟件計算組件庫MD5值與組件庫“數字指紋”并進行比對。比對結果如果一致則認為組件庫是安全的,否則認為已受到了病毒侵入變得不安全。

  4.2組件實現

  在VS2012中,在Windows Form中繼承.NET Framework的UserControl類構造BaseInOut組件的類,并在類中對4.1節(jié)中的組件屬性與元素節(jié)點用C#語言編程實現。定義<block>如下:

  private string block= "基本控件";

 ?。跜ategory("基本屬性")][Browsable(false)]

  public string Block

  {get{return this.block;} set{this.block= value;}}

  [Category("基本屬性")][DisplayName("模塊類別")]

  public string ShowBlock{get{return this.block;} set{;}}

  依次對其余屬性進行設計。此外根據TC6 XML schema對常規(guī)對象的定義,本文對組件進行設計并實現了<error>節(jié)點元素、<connector>節(jié)點元素表示組件是否出錯和連接信息。而且設計實現了鼠標對組件操作的屬性,判斷用戶雙擊對組件引腳的影響并讀取組件引腳端點的信息。為了自動生成組件時展現組件對應的圖形界面,在組件類中編程實現了ChangeControlSize()方法、DrawModuleImage()方法、Modules_Resize()方法。最后重寫了組件的雙擊事件BaseInOutDoubleClick()方法,雙擊組件后彈出組件自動生成操作界面,在此界面不僅可以設置組件類型名、輸入變量個數、輸出變量個數、是否使能輸入輸出,而且可以預覽想要的效果。組件自動生成操作界面如圖6所示。

006.jpg

  安全屬性<DLLMD5>元素節(jié)點定義與<block>相似。

  組件安全性在PLC編程工程的XML描述文件的安全驗證是通過XML結構定義(XML Schema Definition,XSD)對工程中組件XML描述進行驗證。定義一個ValidateXMLBySchemaUtils工具類,在工程中對組件安全性需要驗證時,調其ValidateByTC6()方法進行驗證。ValidateXMLBySchemaUtils工具類的設計如下:

  class ValidateXMLBySchemaUtils{

  public void ValidateByTC6(string XMLName){

  XmlDocument xd= new XmlDocument();

  xd.Load(Application.StartupPath + XMLName);

  xd.Schemas.Add(null,Application.StartupPath+"TC6_XML_V10.xsd");

  ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationEventHandler);

  xd.Validate(eventHandler);}

  Void ValidationEventHandler(object sender, ValidationEventArgs e){

  switch (e.Severity){

  case XmlSeverityType.Error:

  MessageBox.Show("Error: {0}" + e.Message);

  break;

  case XmlSeverityType.Warning:

  MessageBox.Show("Warning {0}" + e.Message);

  break;}}}

5組件驗證

  5.1組件自動生成驗證

  進行PLC可視化編程時,在組件自動生成界面雙擊組件對組件類型名、輸入變量個數、輸出變量個數以及執(zhí)行控制的改變可以實現組件的自動生成,驗證結果如圖7所示。

007.jpg

  5.2組件安全性驗證

  錯誤注入作為一種有效的安全性測試技術,在評估硬件和軟件領域的可靠性和安全性方面都獲得了充分的肯定[13],因此在組件安全性驗證方面采用錯誤注入的方式:(1)組件設計層面的驗證,注入錯誤對比MD5值,組件實現后以動態(tài)鏈接庫(Dynamic Link Library,DLL)文件存在,利用MD5計算工具,測得組件庫DLL文件MD5值為69932c20816d42298dfe58cd54d1b7e1,將其作為“數字指紋”。為驗證其安全性,對組件庫進行錯誤注入后測得其MD5值為e56fcd99c8e972ac5bb6ee6814c2dddc,對比MD5值可以驗證組件庫文件是否被侵入。(2)注入錯誤后,用TC6_XML_V10.xsd文件對編譯后的PLC工程中組件部分的XML描述文件進行XSD驗證,編程軟件會彈出錯誤提示框,如圖8所示?!?/p>

008.jpg

6結論

  本文在研究了基于IEC611313標準平臺的相關工作后,通過研究IEC611313標準圖形編程語言定義的功能塊模型,對組件的可視化形式進行了設計和實現;通過研究TC6 XML schema,對組件的屬性設計達到了可跨標準平臺的目的;并對組件和組件庫安全性相應地進行了<componentMD5>元素節(jié)點、<DLLMD5>元素節(jié)點的設計實現;在VS2012中利用.NET組件技術實現了安全組件的自動生成。最后利用錯誤注入技術,對組件庫的MD5值與“數字指紋”比對,判斷組件是否安全有效,至此實現了組件在IEC611313標準編程軟件的復用和安全驗證。

  參考文獻

 ?。?] 彭瑜. 工控編程語言國際標準IEC 61131-3及其影響[J]. 國內外機電一體化技術,2006(4):53-61.

 ?。?] 鄧紹芳. 組件技術在軟件開發(fā)中的應用研究[D].成都:西南交通大學,2003.

  [3] 唐莉萍. 用組件技術實現計算機與PLC通信的研究[J]. 東華大學學報(自然科學版),2002,28(6):66-69.

 ?。?] LI X, LI D, YIN X, et al. Protocol conversion of plant control system consisted of different type PLCs[C].International Conference on Power System Technology, 2002:15091512.

 ?。?] 林立春,林瓊麒,張功鍍. 面向對象的PLC上位機軟件平臺設計[J]. 自動化儀表,2007,28(12):1518.

 ?。?] 秦華. 基于IEC61131-3標準的PLC編輯模塊設計與實現[J]. 計算機與數字工程,2012,40(3):136139.

 ?。?] 張海偉. 和利時IEC 61131-3編程軟件平臺[J]. 自動化博覽,2016,33(6):42-44.

  [8] JAMRO M, TRYBUS B. IEC 61131-3 programmable human machine interfaces for control devices[C]. 2013 6th International Conference on Human System Interactions(HSI),2013:4855.

 ?。?] JOHN K H,MICHAEL T.IEC61131-3:工業(yè)自動化系統(tǒng)的程序編制[M].中國機電一體化技術應用協(xié)會秘書處,譯.2002.

 ?。?0] NEMA.Programmable ControllersPart3: Programming languages[S]. Virginia : National Electrical Maunfacturers Association,2003.

 ?。?1] 周士貴,宋穎超. IEC61131-3工控編程語言國際標準及其應用[J]. 計算機與信息技術,2008(7):78-80.


此內容為AET網站原創(chuàng),未經授權禁止轉載。