IEC 61131-3标准给出PLC系统的软件模型用分层结构表示。每一层隐含其下层的许多特性,从而构成优于传统PLC软件的理论基础。图1-42是IEC 61131-3的软件模型。
图1-42 IEC 61131-3的软件模型
软件模型描述基本的高级软件元素及其相互关系。该模型由标准定义的编程语言可以编程的软件元素组成。它们包括:程序和功能块;组态元素,即配置、资源和任务;全局变量;存取路径和实例特定的初始化。它是现代PLC的软件基础。
软件模型从理论上描述了将一个复杂程序如何分解为若干小的不同的可管理部分,并在各分解部分之间有清晰和规范的接口方法。软件模型描述一台PLC如何实现多个独立程序的同时装载和运行,如何实现对程序执行的完全控制等。
按照标准,一个PLC系统的软件模型大致可分为三个部分:配置部分、控制序列部分及实例相关初始化部分。配置部分由配置、资源、任务、全局变量和存取路径组成。控制序列部分包括采用标准所规范的编程语言编写的程序和功能块等。实例相关的初始化部分承担将编写好的PLC控制程序下装到PLC系统中,供其运行。
1.配置和资源
(1)配置
一个配置由资源、任务(在资源内定义的)、全局变量、存取路径和实例相关的初始化组成。这些元素的每种在本节详细定义。
配置(Configuration)是语言元素或结构元素。它相当于IEC 61131-1所定义的PLC系统。
配置位于软件模型的最上层,它等同于一个PLC软件。在一个复杂的由多台PLC组成的自动化生产线上,每台PLC中的软件是一个独立的配置。一个配置可以与其他IEC配置通过通信接口实现通信。因此,可将配置认为是一个特定类型的控制系统,它包括硬件装置、处理资源、I/O通道的存储地址和系统能力,即等同于一个PLC的应用程序。由多台PLC构成的一个控制系统中,每一台PLC的应用程序都是一个独立配置。
配置声明段的格式如下:
配置声明包括通过限定定位的对象名或初始化完整层次的串联连接的实例名。定义该配置内资源名(如果有的话),然后是程序实例名和功能块实例名(如果有的话),定位或初始化的变量名在该链的最后连接,其后是结构的组件名(如果是结构变量)。串联连接的所有名称用圆点“.”分隔。位置的配置或初始值的复制遵循语法和语义。
图1-42所示的配置可用例1-80的文本格式描述。
【例1-80】配置和资源声明的文本格式。
程序代码如下:
表1-76是配置和资源声明的性能。
表1-76 配置和资源声明
(续)
(2)资源
资源(Resource)位于软件模型分层结构的第二层。资源为运行程序提供支持系统,是能执行IEC程序的处理手段。它反映PLC的物理结构,资源为程序和PLC的物理输入-输出通道之间提供一个接口。资源具有IEC 61131-1定义的一个“信号处理功能”及其“人机接口”和“传感器和执行器接口”功能。一个IEC程序只有装入资源后才能执行。资源有资源名称,它被赋予一个PLC中的CPU。因此,可将资源理解为一个PLC中的微处理器单元。
资源内定义的全局变量在该资源内部是有效的。资源可调用具有输入、输出参数的运行期(Run-Time)程序、给一个资源分配任务和程序、并声明直接表示变量。
资源声明段的格式如下:
RESOURCE 资源名 ON 处理器类型
资源声明部分
END_RESOURCE
资源名是一个符号名,它用于说明PLC系统中的一个微处理器。编程系统提供PLC系统内该资源(即每个CPU的命名)的类型和数量,并检验这些资源类型和数量,使系统能够正确地使用这些资源。例如,资源名为STATION_1。
在资源声明段中,ON关键字用于限定“处理功能”类型、“人机接口”和“传感器执行器接口”功能。例如,PROCESSOR_TYPE_1限定STATION_1处理器类型的功能。资源声明部分包括在该资源内的全局变量、任务和程序声明等。
图1-42所示配置CELL_1有两个资源。资源名STATION_1有一个数据类型是字节的全局变量Z1。该资源中有两个任务,任务名为SLOW_1和FAST_1;还有两个程序,程序名是P1和P2。资源名STATION_2也有一个数据类型是布尔量的全局变量Z2。该资源中有两个任务,任务名为PER_2和INT_2;还有两个程序,程序名是P1和P4。需指出,资源STATION_1中的全局变量Z1的数据只能从资源STATION_1中存取,不能从资源STATION_2存取,反之亦然。如果希望从资源STATION_2也能存取,则必须在配置中作为全局变量进行声明。
2.任务
(1)任务
任务(Task)位于软件模型分层结构的第三层。任务用于规定POU在运行期的特性。任务是一个执行控制元素,它具有调用能力。
标准规定一个任务是一个具有被调用能力的执行控制元素,它既可以周期执行,也可根据特定布尔变量上升沿触发执行。一组POU的执行可以包括程序和它的实例在程序声明中规定的功能块。
一个资源中可以有多个任务。一旦任务被设置,它就可控制一系列POU周期地执行,或者根据一个特定的事件触发来执行。
每个资源中任务的最大个数和任务的间隔分辨率是实施者规定的。
任务声明的文本格式如下:
TASK任务名(任务参数列表);
例如,TASKSLOW_1(INTERVAL:=t#20ms,PRIORITY:=2);表示任务名为SLOW_1的任务是周期执行的任务,周期间隔时间为20ms,优先级为2等。
表1-77是任务的性能。
表1-77 任务的性能
(续)
注:RESOURCE和PROGRAM声明的细节未显示。
(2)任务的参数
任务可用图形符号表示。表1-77性能2a和2b是周期性任务SLOW_1、FAST_1和非周期性任务INT_2的图形描述。
任务有三个参数,即SIGNAL、INTERVAL和PRIORITY属性。
1)SIGNAL:单任务输入端。在该事件触发信号的上升沿,触发与任务相结合的POU执行一次。如表1-76序号5b中,任务PER_2的Z2是单任务输入端的触发信号。
2)INTERVAL:周期执行时的时间间隔。当其值不为零并且SIGNAL信号保持为零,则表示该任务的有关POU被周期执行,周期执行的时间间隔由该端输入的数据确定,如任务INT_2。当其值为零,表示该任务是由事件触发执行的。
3)PRIORITY:任务的优先级。当多个任务同时运行时,对任务设置的优先级。0表示最高优先级,优先级越低,数值越高。有关任务的优先级能用于优先级和无优先级的执行。
①无优先级(Non-preemptive scheduling)执行。当一个POU或操作系统功能的执行完成时,资源上的供电电源有效,则具有最高执行优先级(数值最小)的POU开始执行。如果多于一个的POU在最高执行优先级等待,则在最高执行优先级的POU中等待时间最长的POU先执行。
②优先级(Preemptivescheduling)执行。当一个POU执行时,它能够中断同一资源中较低优先级POU的执行,即较低优先级POU的执行被延缓,直到高优先级POU的执行完成。一个POU不能中断具有同样优先级或较高优先级的其他单元的执行。
(3)任务的使能
任务作为在配置中的资源的一部分。一个任务是被隐式使能,或根据任务机制由关联的资源禁止。POU控制任务的使能应符合下列规则:
1)任务用于说明与其结合的POU的执行控制状态。因此,与任务处于同一层的还有与其结合的POU。用下列格式表示与任务结合的POU。
PROGRAM 程序名 WITH 任务名;
在程序中的功能块实例用下列格式:
功能块实例名 WITH 任务名;
例如,PROGRAMP1WITHSLOW_1;表示程序P1与任务SLOW_1结合,即程序P1根据任务的有关属性执行,任务SLOW_1是周期执行的任务,周期间隔时间为20ms,优先级为2等。因此,程序P1按具有优先级为2的周期间隔时间20ms被执行。例如,FB1WITHSLOW_1;表示功能块实例FB1与任务SLOW_1结合,即根据该任务的参数执行该功能块实例。
2)单任务输入SIGNAL不为零,表示与该任务结合的POU在SIGNAL上升沿时触发执行一次,因此,是事件触发的单任务。
3)INTERVAL不为零,SIGNAL保持为零(约定值为零),则与该任务结合的POU周期执行,执行周期由INTERVAL数据确定。
4)当多个任务执行时,有两种解决冲突的方法:
①立刻中断正在执行的任务,使优先级高的任务先被执行,即PRIORITY数值小的任务先被执行。这称为优先调度。具有相同优先级的多个任务中,与任务结合的等待时间长的POU先被执行。
②不中断正在执行的任务,直到该任务执行完成,然后,执行在等待队列中优先级最高的任务。这称为非优先调度。
【例1-81】任务的执行。
例1-81定义两个任务T_QUICK和T_INTERRUPT,前者是具有10ms循环周期的循环任务,后者是具有高优先级的中断任务。当正常运行时,每隔10ms执行一次任务T_QUICK,如果与该任务结合的程序MOTION1的执行时间大于10ms,则PLC会发送一个运行期故障的报告。由于程序LUBE与MOTION1有相同的优先级,因此,如果在执行任务T_QUICK时,TRIGGER信号变为1,因具有相同的优先级,系统仍需在执行完这次T_QUICK任务后,才能执行T_INTERRUPT任务一次。为使T_INTERRUPT任务能够中断正在执行的任务立即执行,可将T_INTERRUPT任务的优先级设置为0。
5)没有任务结合的程序具有最低的优先级。因此,这样的程序在资源开始执行前执行,并在执行终止后立刻重新执行。
6)与任务没有直接结合的功能块实例根据正常规则执行,即根据其内部功能块实例被说明的POU中语言元素的求值次序执行。与任务结合的功能块实例是在任务的排他性控制下执行。它与其内部功能块实例被说明的POU的求值规则无关。
7)为确保数据的同步,程序中功能块的执行根据下列规则获得同步:(www.xing528.com)
①如果功能块接收来自其他功能块的输入信号多于一个,则当该功能块执行时,来自其他功能块的所有输入采用同样的求值结果。
②如果同一功能块的输出送到两个或多个功能块,并且如果目的功能块是全部与任务有显式或隐式的结合,则到所有这样的目的功能块的输入信号在它们的求值时间内,应与源功能块有同样的求值结果。
8)对每个任务需要配置一个WDT,用于对任务的监视。
9)IEC 61131-3第三版规定,类的实例不能与任务结合。功能块的方法或类的方法在它们被调用的POU内执行,即根据被调用的POU所结合的任务参数执行。
(4)非优先和优先调度
图1-43显示非优化调度和优先调度时任务的执行情况。
图1-43 任务的非优先级调度和优先级调度
图中,任务A有最高优先级,每隔100ms执行一次;任务B优先级次之,每隔200ms执行一次;任务C优先级最低,每隔300ms执行一次。无优先调度时,由于任务C的执行时间长,而使任务A和B被延缓(在500ms后)。
优先调度时,任务A每隔100ms执行,任务B每隔200ms执行,任务C被中断,用于允许任务A和B的执行。
结合示例1-80,表1-78说明非优先和优先调度时任务的执行情况。
表1-78 非优先和优先调度时任务的执行
(续)
①P2.FB1和P2.FB2的执行时间不包括P2的执行时间。
②P4.FB1的执行时间不包括P4的执行时间。
注:符号X@Y表示该POUX被调度或正以优先级Y执行。
3.全局变量
标准允许变量在不同的语言元素内被声明。变量声明的范围确定其在哪个POU中是可用的。范围可能是局部的和全局的。每个变量的范围由它被声明的位置和声明所使用的变量关键字所定义。
在配置中声明的全局变量可在整个配置范围内使用,在资源中声明的全局变量只能在该资源范围内使用。在一个程序内声明的全局变量可以存取在该程序内部的功能块和函数。
全局变量能够用于整个工程项目。全局变量声明的格式如下:
VAR_GLOBAL
全局变量的声明
END_VAR
全局变量的声明部分与变量的声明相同,即
全局变量名:数据类型(:=用户设置的初始值);
括号内的部分是用户可选项。
由于全局变量能与其他网络进行数据交换,因此,一个系统中不能有相同名称的两个全局变量。需要使用该全局变量的POU中,需用VAR_EXTERNAL来声明该全局变量。
全局变量提供了在两个不同位置的程序和功能块之间交换数据的非常灵活的方法。示例中配置的全局变量W1可用于整个配置,而资源STATION_1的全局变量Z1只能用于该资源内的程序和功能块等。
全局变量被定义在配置、资源或程序层内部。全局变量提供了在两个不同程序和功能块之间非常灵活的交换数据的方法。
4.存取路径变量
存取路径用于将全局变量、直接表示变量和功能块的输入、输出和内部变量联系起来,实现信息的存取。它提供在不同配置之间交换数据和信息的方法。每一配置内的许多指定名称的变量可通过其他远程配置来存取。
(1)存取路径变量的存取方法
路径变量有两种存取方法:读写(READ_WRITE)方式表示通信服务能够改变变量的值;只读(READ_ONLY)方式表示能够读取变量的值但不能改变变量的值。当不规定存取路径方式时,默认约定的存取方式是只读方式。
例1-80中,CHARLIE变量没有声明其读写属性,表示该存取路径变量具有只读属性。图形表示时,具有只读属性的变量有可读取的箭头。读写属性的变量还有可写入其他变量的箭头(即有双向箭头)。
(2)存取路径变量的表示方法
存取路径变量声明的结构如下:
VAR_ACCESS
存取路径变量名:外部存取路径变量 : 存取路径的数据类型和读写属性;
END_VAR
例1-80中,ABLE是存取路径变量名,外部存取路径变量是STATION_1.%IX1.1,即从外部资源STATION_1的直接表示变量%IX1.1存取数据。存取路径的数据类型是布尔量(BOOL),存取方式是只读READ_ONLY(也可不列出),表示从%IX1.1读取布尔型数据。
外部存取路径采用串联方式表示。外部存取路径的变量格式如下:
资源名.程序实例名.功能块实例名.变量名
中间没有的名称可省略。例1-80中的存取变量ABLE是从外部读取的,因此,外部存取路径变量从资源STATION_1中直接表示变量%IX1.1获取。而BAKER从资源STATION_1中程序P1的变量X2获得,由于该变量是读写变量,因此,既可由X2写入BAKER的值,也可用BAKER来读取X2的值。
存取路径变量声明的图形表示如图1-42所示。
当变量是结构数据类型变量或数组数据类型变量时,一个存取路径变量只能存取一个结构数据类型变量的一个单项或数组数据类型变量的一个元素。
不能定义存取路径变量到在VAR_TEMP、VAR_EXTERNAL或VAR_IN_OUT段声明的变量。
需注意,在存取路径变量的数据类型声明时,该变量的数据类型应与其他地方对该变量声明的数据类型一致,否则会造成数据类型不匹配的错误。
读写属性有只读(READONLY)和读写(READWRITE)两种,它表示通信服务可以读和修改变量的值(读写)或读但不能修改值(只读)。系统约定属性是只读属性。
存取到声明为CONSTANT的变量或外部连接到其他变量的功能块输入时只能是只读。
(3)存取路径变量特性
存取路径变量的特性见表1-79。
表1-79 存取路径变量的特性
5.配置变量
配置变量用于对变量命名或给符号表示变量赋初始值。配置变量的声明格式如下:
VAR_CONFIG
实例特定地址符号表示变量:数据类型(:=用户初始值);
END_VAR
例如,例1-80中,STATION_1.P1.CNT:INT:=1;表示将资源STATION_1的程序P1中的CNT变量设置为整数类型,并赋初始值为1。声明格式中的括号项是可选项,用于用户设置该变量的初始值。与外部存取路径变量的命名类似,实例特定地址符号表示变量采用串联方式表示。实例特定地址符号表示变量格式如下:
资源名.程序实例名.功能块实例名.需定位或需初始化赋值的对象名
应用时需注意,由VAR_CONFIG…END_VAR结构提供的实例特定初始值通常超过该数据类型规定的初始约定值。此外,这里定义实例特定初始值的方法不能用于在VAR_TEMP、VAR_EXTERNAL、VAR_CONSTANT或VAR_IN_OUT结构中声明的变量。
6.软件模型的特点
IEC 61131-3软件模型的分层结构如图1-44所示。软件模型的特点如下:
图1-44 软件模型的分层结构
1)完善的结构化。IEC 61131-3软件模型能够灵活地用于宽范围的不同的PLC体系结构。它是符合国际标准的软件模型,它并不针对某一具体的PLC系统,因此,具有很强的适用性,能够应用于不同制造商的PLC产品,方便程序“自上而下”或“自下而上”的开发。
2)在一台PLC中可同时装载、启动和执行多个独立程序。IEC 61131-3标准允许一个配置内有多个资源,每个资源可支持多个程序。因此,在一台PLC中可以同时装载、启动和执行多个独立程序。而传统的PLC程序只能同时运行一个程序。
3)针对编程应用,提供选择编程语言灵活性,既能适合小规模系统,也能适合大型分散系统。
4)增强分级设计的分解。一个复杂程序软件可以通过分层分解,最终分解为可管理的POU。程序可被定义为一个功能模块和函数的网络。
5)软件模型的可复用性是IEC 61131-3软件模型的重要优点。软件能够被设计成可重复使用的POU,即程序、功能模块和函数,提供用于设计应用程序之间通信的必要功能,便于在不同环境下软件的重复使用。
6)实现对程序执行的完全控制能力。IEC 61131-3标准采用“任务”机制,保证PLC系统对程序执行的完全控制能力。传统PLC程序顺序扫描和执行程序,对某一段程序不能按用户实际要求定时执行,而IEC 61131-3程序允许程序的不同部分、在不同的时间、以不同的比率并行执行,扩大了PLC应用范围。
7)可经通信网络提供交换信息的工具。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。