《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 具有安全属性图编程组件的设计研究
具有安全属性图编程组件的设计研究
2017年微型机与应用第3期
李强,张建丰
杭州电子科技大学 计算机学院,浙江 杭州 310018
摘要: 研究和实现了具有安全属性的可编程逻辑控制器(Programmable Logic Controller,PLC)编程组件。组件采用IEC611313标准功能块模型,既满足了IEC611313标准编程语言规范,也实现了组件在标准PLC编程软件的复用。组件在PLC编程中可按需求改变接口,其封装接口满足TC6 XML schema属性定义,增加的安全属性实现了组件的安全复用。最后,在Microsoft Visual Studio(VS)2012中运用.NET组件技术和C#编程语言实现了组件,并对组件进行了相关验证。
Abstract:
Key words :

  李强,张建丰

  (杭州电子科技大学 计算机学院,浙江 杭州 310018)

       摘要:研究和实现了具有安全属性的可编程逻辑控制器(Programmable Logic Controller,PLC)编程组件。组件采用IEC611313标准功能块模型,既满足了IEC611313标准编程语言规范,也实现了组件在标准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标准不仅对工控编程语言产生了指导规范作用,而且对PLC技术的发展也发挥了重要的指导作用[1]。由于PLC编程使用相应编程语言组件开发,且目前软件开发主流是面向对象及组件技术[2],因此有必要为符合IEC61131-3标准的编程软件设计更为优越的组件。

  在PLC图编程组件研究中,有的利用组件技术对模块进行封装提高了组件的复用性[35],有的基于IEC61131-3设计标准组件,利于提高组件的规范性[68]。

  结合组件复用性和规范性研究,本文通过研究IEC611313标准图编程功能块模型、TC6 XML schema以及组件安全性,利用.NET组件技术设计了一种安全组件并进行了验证,使得组件可以安全使用。

1IEC61131-3标准

  1.1IEC61131-3标准软件模型

  IEC61131-3是当今世界第一个为工业自动化控制系统的软件设计提供标准化编程语言的国际标准[1],标准分为两个部分[910]:公共元素和编程语言。公共元素部分规范了变量的定义、数据类型,给出了系统软件模型如图1所示,并引入配置、资源、任务和程序组织单元(Program Organizition Unit,POU)的概念。编程语言规定了指令表、结构化文本、梯形图、功能块图、顺序功能图。

 

001.jpg

  从IEC61131-3标准的软件模型可知一个设备对应一个配置,每个配置包含若干个资源,每个资源内可以定义若干个任务,任务配置后周期地或事件驱动地控制一组POU执行。图3功能块属性定义1.2IEC611313标准功能块模型

  POU由3种类型的基本单元组成:程序、功能块(Function Block,FB)、函数,其中功能块是IEC611313标准的核心元素,所以本文设计的组件本质上是基于功能块的。功能块面向对象特性的基本单元,由输入变量、输出变量、内部算法组成,且由一个类型名标识,如图2所示。功能块的输入输出变量来自于全局数据区且可存取,由用户编程时设定。功能块具有封装性,能把特定的算法封装起来,把具体的操作和操作数据分离开。

002.jpg

  IEC61131-3功能块的输入输出通过全局数据区、变量存取路径等方法交换信息,这样简单的结构方式适合描述复杂控制回路,能满足工程的功能需求。功能块的封装性把系统的总体算法组态和单个算法组态的研制开发过程分开,增加了程序的可重用性和移植性[11]。

2TC6 XML schema

  虽然IEC611313标准促使PLC的编程软件达到了统一化,但是不同编程软件采用不同的数据描述格式,这样不利于数据的交互。为了解决这一问题,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中有详细的描述,定义了元素命名规范、XML描述文档的结构以及元素的使用原则。本文定义的基于IEC611313标准图形编程语言的安全组件包含的属性就是基于TC6 XML schema所定义的。

3组件安全性

  PLC编程是基于可视化组件进行的,所以组件的安全性是整个工程的关键。组件安全性是与防止恶意侵入对程序数据非授权访问或改变的能力有关的软件属性。针对非法代码侵入所引发的组件安全性问题,本文为组件进行了两个方面的安全性设计:(1)从组件设计层面,在组件生成时为组件库添加<DLLMD5>属性标签,对组件代码内存管理进行验证,这样保证组件库被装入到标准软件时根据其内存大小就可以检测到是否与设计的安全组件库一致,从而判断其安全性;(2)在组件TC6 XML描述层面,当PLC工程保存为标准的XML后,根据TC6 XML schema 接口组件描述对工程中组件描述部分验证是否符合规范,从而判断组件的安全性。

4组件设计与实现

  通过以上对IEC61131-3标准图形编程语言定义的功能块模型、TC6 XML schema以及组件安全性,本文对功能块组件先进行组件属性的设计,并在VS2012开发软件中利用.NET组件技术和C#编程语言实现组件的设计。

  本文设计了BaseInOut、BaseIn、BaseOut、FUN、Label 5种组件分别表示基本输入输出模块、基本输入模块、基本输出模块、函数模块、标签模块,下面以BaseInOut为例对组件属性设计进行阐述。

  4.1组件属性与元素节点设计

004.jpg

  图4<pou>元素节点定义因为FB包含在POU中,所以必须从TC6 XML schema定义<pous>元素节点开始分析。<pous>有若干<pou>元素节点,<pou>的定义如图4所示。<pou>主要由包含返回类型、类型列表声明信息的<interface>元素节点和包含5种编程语言相应声明工作列表的<body>元素节点组成,如图5所示,在<body>中工作列表按照XML文件顺序执行。<body>中FBD定义的对象元素的集合可以应用在所有的图形结构体中,所以本文组件的属性设计基本参照FBD元素的属性。

005.jpg

  FBD元素定义规定<block>元素节点表示在功能或功能块上操作的图形表示,<block>包含的localId、width、height、typeName属性可以用来表示组件的局部序号、宽度、高度和类型名;<block>包含的<position>元素节点、<inputVariable>元素节点、<inOutVariable>元素节点、<outPutVariable>元素节点分别组件在PLC图形编程软件的位置、输入变量、输入输出变量、输出变量。<position>用组件坐标的x、y值标定组件在编程软件的具体位置信息;<inputVariable>包含的<variable>元素节点包含的属性formalParameter表示变量名,包含的<connectionPointIn>元素节点、<connectionPointOut>元素节点表示组件连接输入端和连接输出端的位置信息。

  针对组件安全性属性,本文对组件库设计了<DLLMD5>元素节点,通过对设计的组件库文件进行消息摘要算法第五版(Message Digest Algorithm 5,MD5)计算得到其MD5值作为“数字指纹”,当组件库装载到编程软件时,由软件计算组件库MD5值与组件库“数字指纹”并进行比对。比对结果如果一致则认为组件库是安全的,否则认为已受到了病毒侵入变得不安全。

  4.2组件实现

  在VS2012中,在Windows Form中继承.NET Framework的UserControl类构造BaseInOut组件的类,并在类中对4.1节中的组件属性与元素节点用C#语言编程实现。定义<block>如下:

  private string block= "基本控件";

  [Category("基本属性")][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对常规对象的定义,本文对组件进行设计并实现了<error>节点元素、<connector>节点元素表示组件是否出错和连接信息。而且设计实现了鼠标对组件操作的属性,判断用户双击对组件引脚的影响并读取组件引脚端点的信息。为了自动生成组件时展现组件对应的图形界面,在组件类中编程实现了ChangeControlSize()方法、DrawModuleImage()方法、Modules_Resize()方法。最后重写了组件的双击事件BaseInOutDoubleClick()方法,双击组件后弹出组件自动生成操作界面,在此界面不仅可以设置组件类型名、输入变量个数、输出变量个数、是否使能输入输出,而且可以预览想要的效果。组件自动生成操作界面如图6所示。

006.jpg

  安全属性<DLLMD5>元素节点定义与<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可视化编程时,在组件自动生成界面双击组件对组件类型名、输入变量个数、输出变量个数以及执行控制的改变可以实现组件的自动生成,验证结果如图7所示。

007.jpg

  5.2组件安全性验证

  错误注入作为一种有效的安全性测试技术,在评估硬件和软件领域的可靠性和安全性方面都获得了充分的肯定[13],因此在组件安全性验证方面采用错误注入的方式:(1)组件设计层面的验证,注入错误对比MD5值,组件实现后以动态链接库(Dynamic Link Library,DLL)文件存在,利用MD5计算工具,测得组件库DLL文件MD5值为69932c20816d42298dfe58cd54d1b7e1,将其作为“数字指纹”。为验证其安全性,对组件库进行错误注入后测得其MD5值为e56fcd99c8e972ac5bb6ee6814c2dddc,对比MD5值可以验证组件库文件是否被侵入。(2)注入错误后,用TC6_XML_V10.xsd文件对编译后的PLC工程中组件部分的XML描述文件进行XSD验证,编程软件会弹出错误提示框,如图8所示。 

008.jpg

6结论

  本文在研究了基于IEC611313标准平台的相关工作后,通过研究IEC611313标准图形编程语言定义的功能块模型,对组件的可视化形式进行了设计和实现;通过研究TC6 XML schema,对组件的属性设计达到了可跨标准平台的目的;并对组件和组件库安全性相应地进行了<componentMD5>元素节点、<DLLMD5>元素节点的设计实现;在VS2012中利用.NET组件技术实现了安全组件的自动生成。最后利用错误注入技术,对组件库的MD5值与“数字指纹”比对,判断组件是否安全有效,至此实现了组件在IEC611313标准编程软件的复用和安全验证。

  参考文献

  [1] 彭瑜. 工控编程语言国际标准IEC 61131-3及其影响[J]. 国内外机电一体化技术,2006(4):53-61.

  [2] 邓绍芳. 组件技术在软件开发中的应用研究[D].成都:西南交通大学,2003.

  [3] 唐莉萍. 用组件技术实现计算机与PLC通信的研究[J]. 东华大学学报(自然科学版),2002,28(6):66-69.

  [4] 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.

  [5] 林立春,林琼麒,张功镀. 面向对象的PLC上位机软件平台设计[J]. 自动化仪表,2007,28(12):1518.

  [6] 秦华. 基于IEC61131-3标准的PLC编辑模块设计与实现[J]. 计算机与数字工程,2012,40(3):136139.

  [7] 张海伟. 和利时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.

  [9] JOHN K H,MICHAEL T.IEC61131-3:工业自动化系统的程序编制[M].中国机电一体化技术应用协会秘书处,译.2002.

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

  [11] 周士贵,宋颖超. IEC61131-3工控编程语言国际标准及其应用[J]. 计算机与信息技术,2008(7):78-80.


此内容为AET网站原创,未经授权禁止转载。