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

  李強(qiáng),張建豐

  (杭州電子科技大學(xué) 計(jì)算機(jī)學(xué)院,浙江 杭州 310018)

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

  關(guān)鍵詞IEC61131-3;TC6 XML schema;組件安全性

  中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:ADOI: 10.19358/j.issn.1674-7720.2017.03.022

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

0引言

  IEC61131-3標(biāo)準(zhǔn)不僅對(duì)工控編程語言產(chǎn)生了指導(dǎo)規(guī)范作用,而且對(duì)PLC技術(shù)的發(fā)展也發(fā)揮了重要的指導(dǎo)作用[1]。由于PLC編程使用相應(yīng)編程語言組件開發(fā),且目前軟件開發(fā)主流是面向?qū)ο蠹敖M件技術(shù)[2],因此有必要為符合IEC61131-3標(biāo)準(zhǔn)的編程軟件設(shè)計(jì)更為優(yōu)越的組件。

  在PLC圖編程組件研究中,有的利用組件技術(shù)對(duì)模塊進(jìn)行封裝提高了組件的復(fù)用性[35],有的基于IEC61131-3設(shè)計(jì)標(biāo)準(zhǔn)組件,利于提高組件的規(guī)范性[68]。

  結(jié)合組件復(fù)用性和規(guī)范性研究,本文通過研究IEC611313標(biāo)準(zhǔn)圖編程功能塊模型、TC6 XML schema以及組件安全性,利用.NET組件技術(shù)設(shè)計(jì)了一種安全組件并進(jìn)行了驗(yàn)證,使得組件可以安全使用。

1IEC61131-3標(biāo)準(zhǔn)

  1.1IEC61131-3標(biāo)準(zhǔn)軟件模型

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

 

001.jpg

  從IEC61131-3標(biāo)準(zhǔn)的軟件模型可知一個(gè)設(shè)備對(duì)應(yīng)一個(gè)配置,每個(gè)配置包含若干個(gè)資源,每個(gè)資源內(nèi)可以定義若干個(gè)任務(wù),任務(wù)配置后周期地或事件驅(qū)動(dòng)地控制一組POU執(zhí)行。圖3功能塊屬性定義1.2IEC611313標(biāo)準(zhǔn)功能塊模型

  POU由3種類型的基本單元組成:程序、功能塊(Function Block,F(xiàn)B)、函數(shù),其中功能塊是IEC611313標(biāo)準(zhǔn)的核心元素,所以本文設(shè)計(jì)的組件本質(zhì)上是基于功能塊的。功能塊面向?qū)ο筇匦缘幕締卧?,由輸入變量、輸出變量、?nèi)部算法組成,且由一個(gè)類型名標(biāo)識(shí),如圖2所示。功能塊的輸入輸出變量來自于全局?jǐn)?shù)據(jù)區(qū)且可存取,由用戶編程時(shí)設(shè)定。功能塊具有封裝性,能把特定的算法封裝起來,把具體的操作和操作數(shù)據(jù)分離開。

002.jpg

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

2TC6 XML schema

  雖然IEC611313標(biāo)準(zhǔn)促使PLC的編程軟件達(dá)到了統(tǒng)一化,但是不同編程軟件采用不同的數(shù)據(jù)描述格式,這樣不利于數(shù)據(jù)的交互。為了解決這一問題,PLCopen 技術(shù)委員會(huì)的TC6組織定義了一種被不同編程軟件跨平臺(tái)地傳輸屏幕信息的完整的開放標(biāo)準(zhǔn)接口[12],使得符合標(biāo)準(zhǔn)的數(shù)據(jù)描述文件能相互轉(zhuǎn)換,實(shí)現(xiàn)數(shù)據(jù)共享。其中IEC611313標(biāo)準(zhǔn)的核心部件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>

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

3組件安全性

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

4組件設(shè)計(jì)與實(shí)現(xiàn)

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

  本文設(shè)計(jì)了BaseInOut、BaseIn、BaseOut、FUN、Label 5種組件分別表示基本輸入輸出模塊、基本輸入模塊、基本輸出模塊、函數(shù)模塊、標(biāo)簽?zāi)K,下面以BaseInOut為例對(duì)組件屬性設(shè)計(jì)進(jìn)行闡述。

  4.1組件屬性與元素節(jié)點(diǎn)設(shè)計(jì)

004.jpg

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

005.jpg

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

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

  4.2組件實(shí)現(xiàn)

  在VS2012中,在Windows Form中繼承.NET Framework的UserControl類構(gòu)造BaseInOut組件的類,并在類中對(duì)4.1節(jié)中的組件屬性與元素節(jié)點(diǎn)用C#語言編程實(shí)現(xiàn)。定義<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{;}}

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

006.jpg

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

  組件安全性在PLC編程工程的XML描述文件的安全驗(yàn)證是通過XML結(jié)構(gòu)定義(XML Schema Definition,XSD)對(duì)工程中組件XML描述進(jìn)行驗(yàn)證。定義一個(gè)ValidateXMLBySchemaUtils工具類,在工程中對(duì)組件安全性需要驗(yàn)證時(shí),調(diào)其ValidateByTC6()方法進(jìn)行驗(yàn)證。ValidateXMLBySchemaUtils工具類的設(shè)計(jì)如下:

  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組件驗(yàn)證

  5.1組件自動(dòng)生成驗(yàn)證

  進(jìn)行PLC可視化編程時(shí),在組件自動(dòng)生成界面雙擊組件對(duì)組件類型名、輸入變量個(gè)數(shù)、輸出變量個(gè)數(shù)以及執(zhí)行控制的改變可以實(shí)現(xiàn)組件的自動(dòng)生成,驗(yàn)證結(jié)果如圖7所示。

007.jpg

  5.2組件安全性驗(yàn)證

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

008.jpg

6結(jié)論

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

  參考文獻(xiàn)

  [1] 彭瑜. 工控編程語言國(guó)際標(biāo)準(zhǔn)IEC 61131-3及其影響[J]. 國(guó)內(nèi)外機(jī)電一體化技術(shù),2006(4):53-61.

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

 ?。?] 唐莉萍. 用組件技術(shù)實(shí)現(xiàn)計(jì)算機(jī)與PLC通信的研究[J]. 東華大學(xué)學(xué)報(bào)(自然科學(xué)版),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.

 ?。?] 林立春,林瓊麒,張功鍍. 面向?qū)ο蟮腜LC上位機(jī)軟件平臺(tái)設(shè)計(jì)[J]. 自動(dòng)化儀表,2007,28(12):1518.

 ?。?] 秦華. 基于IEC61131-3標(biāo)準(zhǔn)的PLC編輯模塊設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)與數(shù)字工程,2012,40(3):136139.

  [7] 張海偉. 和利時(shí)IEC 61131-3編程軟件平臺(tái)[J]. 自動(dòng)化博覽,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è)自動(dòng)化系統(tǒng)的程序編制[M].中國(guó)機(jī)電一體化技術(shù)應(yīng)用協(xié)會(huì)秘書處,譯.2002.

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

  [11] 周士貴,宋穎超. IEC61131-3工控編程語言國(guó)際標(biāo)準(zhǔn)及其應(yīng)用[J]. 計(jì)算機(jī)與信息技術(shù),2008(7):78-80.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。