王文海先生,浙江浙大中自集成控制股份有限公司总经理;葛益军先生,浙江大学硕士研究生。
关键词: IEC61131-3 控制语言 编程系统 PLC
一 引言
IEC61131-3是第一个为工业自动化控制系统的软件设计提供标准化编程语言的国际标准。对用户在设计控制程序的过程中所涉及到的概念、语言、模型等进行了统一的描述,提供了一种通用的标准。其基本目标是减少不同厂商产品之间以及相同厂商的不同产品之间在编程软件使用上的差异,给厂商树立了一致的参照,减少了资源浪费和投资风险,同时也给用户带去更多选择和更好应用。IEC61131-3工业编程语言标准对可编程控制器软件技术的发展,乃至整个工业控制软件技术的发展,起了举足轻重的推动作用。
IEC61131-3标准包括两部分:编程和公共元素。编程部分描述了两个重要模型——IEC软件模型和通信模型。公共元素定义了编程系统中需要的数据类型。下面将结合浙大中自集成控制股份有限公司自主开发的符合该标准的编程系统(以下简称编程系统)详细讲述IEC61131-3标准的具体内容,分析如何完成从抽象模型到实际系统的映射,即如何在实际编程系统中实现该标准。
二 编程系统实例
编程系统由工程管理器、算法编辑器、数据库编辑器、编译链接器、仿真调试程序、实时运行程序这几大软件模块构成。这些模块有效地组织在一起实现IEC标准中的内容。下面分析IEC61131-3的内容和编程系统的映射关系。
1. 软件模型
软件模型(如图1)从理论上描述了如何将一个复杂的程序分解为若干个小的不同的可管理部分,并且在各个部分之间有清晰和规范的接口;描述了一台可编程控制器如何实现多个独立程序的同时装载、运行以及如何对程序的执行实现完全控制等。IEC61131-3具有的这种分层结构,构成了IEC61131-3软件优越于传统的控制软件的理论基础,是IEC61131-3软件先进性的体现。
(1)配置和资源
配置层在软件模型中最上层,对应于整个控制系统,该层包含有多个资源。配置层将这些资源组合成组,并提供资源之间通讯的途径。我们在编程系统中,可以利用一个工程管理器(如图2)对配置层进行管理,工程管理器中的一个工程就看成是一个配置。
在软件模型中资源则映射为一个个实际的控制设备,如SunyPCC500、SunyPLC200、SunyPLC250等。可以通过网络将这些设备相连构成一个控制系统,即相当于软件模型的一个个资源构成一个配置。
(2)任务
具有独立运行属性的程序就是一个任务。IEC61131-3中的运行属性有周期执行和中断执行,此实例编程系统中都已支持。如图3所示,在算法编辑器中的不同项目栏下创建程序组有不同的运行属性。
(3)程序组织单元
在IEC61131-3标准中定义了3种程序组织单元Program、Function_Block及Function,是构成控制程序的基础,在编程系统中提供了169个常用的基本功能块和函数块,为用户的组态提供了很好的支持,又以子程序的形式允许用户自定义功能块,用功能组合和封装,提高了程序的重复利用。并为根据需要提供特定领域内的专用算法库,更好地满足特定用户群的需求。
2. 程序应用实例
下面用一个简单的可编程逻辑控制器SunyPLC200程序的创建过程,讲解各个部分的具体实现。
(1)建立工程
单击工程管理器标准工具栏上的“新建工程”,设置工程名字和注释,制定工程保存的路径,如果成功建立工程,则会在工程列表中显示出来。
(2)新建控制站
用数据库编辑器SunyRdbEditor来进行控制站的建立和信息配置,创建控制站。在工程管理器中打开实时数据库编辑器,如图4。
填入控制站的名称,在控制站类型中选择站的类型可以是“SunyPLC200工程”、“SunyPLC250工程”或“DCS工程”如图4所示,每一个工作站就相当于在软件模型中的资源,而这些资源就构成了这一整个控制系统,如软件模型中所示在每个资源中有多个任务的并行运行。
创建控制站后,在编辑程序之前还要先进行全局变量的建立及其I/O属性的连接,是在图4所示的实时数据库栏中编辑,具体将在后面通信模型中讲解。下面进行具体的任务创建和编辑,在工程管理器中打开算法编辑器,选择控制站。
(3)创建任务
如图3所示在程序导航栏中有中断程序、子程序及控制工程。
其中,中断程序栏中建立的程序是运行属性为中断的程序,可连接中断事件或者是变量;控制工程栏下建立的程序是具有周期运行特性的程序;而子程序则是受其他程序调用运行的,自己没有独立运行的能力。子程序为用户提供了自定义功能块接口,用子程序可将特定功能进行封装,供用户重复调用。
根据将要建立的程序的运行特性新建程序。设置程序属性如运行周期或者是中断触发。
各个任务在资源中是以各自的运行属性独立地并行执行,通过在资源中的全局变量进行数据通信。
(4)编辑程序
编程系统遵循IEC61131-3标准,支持LD、SFC、ST、IL、FBD等5种语言,用户可根据自己的编程习惯选择一种适合自己的语言,也可在一个工程中使用不同的语言。在PLC工程中,梯形图(LD)语言是最常用的,比较适合从继电器电路控制转换到PLC控制的技术人员。功能块图语言和数字电路设计比较相像,有输入有输出。SFC主要用于顺序控制。ST是一种文本语言,适用于对PLC比较熟悉的高级工程人员。IL语言类似于汇编,使用ST、IL语言可以实现FBD、LD、SFC等图形化编程难以实现的功能。
用户可通过拖拽的方式或直接输入的方式进行程序的编辑,及变量的连接。程序编辑后还要进行编译、仿真及实际运行,将在后面详细分析。
3. 通信模型
根据不同的通信要求,IEC61131-3标准规定了以下4种通信模型:内部通信:在程序、功能块和功能内部之间可互相连接以形成一个网络,数据信息可通过这个内部网络进行通信;变量通信:全局变量可以被用来在功能块与其他的程序组织单元之间交换数据信息;外部变量通信:IEC61131的第五部分定义了一个通信功能块家族通过一个网络来交换数据;使用存取路径通信:存取变量提供了一种方法用于从远程设备存取特定的变量。在IEC61131的第五部分的通信功能块还能读写远程配置中的ACCESS变量在编程系统中使用局部变量、全局变量以及通过设置变量的共享属性实现了功能、功能块、程序、资源、配置之间的数据通信!每个资源的内部通信和变量通信在控制站内部完成。而资源之间通信通过共享变量的方式实现,通过设置控制站中变量的共享属性来使其对其他控制站可见。
(1)全局变量:建立和属性设置如图5所示,在这里建立的变量是全局变量,在整个资源内都可见,但如果对其他资源中可见,则要选择变量的共享属性。
(2)局部变量:只在这个程序内有效,对别的程序不可见的。局部变量可分为局部输入变量(VAR_INPUT)、输出变量(VAR_OUTPUT)、临时变量(VAR_ TEMP)。局部输入变量只在子程序内才会出现,当外部调用这个子程序时,它用来接收子程序的输入(可理解为计算机高级语言中函数的参数)。局部输出变量也只在子程序内才会出现,当外部调用这个子程序时,这表示这个子程序的返回值。局部临时变量在程序和子程序内都有,程序中可以向其赋值,然后再引用它。局部变量编辑器集成在算法编辑器中,如图6所示。
图6中的左边子窗口是变量分类,当选择不同的变量分类时,右边的列表窗口显示这个分类下的所有变量。其中“VAR_INPUT”和“VAR_ OUTPUT”分类只在子程序编辑器中才会显示,用于为子程序传递参数。
4. 公共元素
公共元素描述了变量和数据类型,编程系统中实现了BOOL、INT、REAL等基本数据类型。同时允许用户设置变量的多种属性,如保持属性,读写属性,共享属性等。声明变量、变量及数据类型的