1.1 PLC程序概念
关键词:程序、指令、PLC函数、PLC功能块、PLC程序块、PLC程序组织单元(POU)、PLC任务、PLC工程
PLC编程标准对程序的定义是:“所有编程语言元素和结构的一个逻辑集合”。传统或低档PLC编程语言元素和结构只是指令(包含操作数),它的程序简单地说,就是PLC指令的一个有序(逻辑)集合。所以,它的编程使用手持编程器也就可以了。
新一代或高档PLC的语言元素和结构,除了指令,还有功能、功能块。其PLC程序则是由若干程序块组成。而一个程序块可以调用指令、函数块、功能块,也可调用其他程序块。程序块还可与任务相关联,由不同的任务激活。而任务则通过工程与使用PLC硬件资源相关联。所以,它的编程要用计算机,使用编程软件,通过建立工程予以实施。
PLC就是依靠运行这个程序,才得以实现它的功能。PLC的程序一般由用户设计,PLC厂商或代销商不提供。以下将对以上与编程相关概念作简要说明。
1.1.1 PLC指令
PLC指令(Instruction),也有的厂商叫操作(Operation),是用以告知PLC做什么,以及怎样去做的文字代码或图形符号。这里的做什么、怎样去做,主要是指CPU对PLC的各种寄存器、内存及外设的缓冲器的各种数据传送或变换。
依使用PLC编程语言的不同,这些代码或符号也不相同。但从本质上讲,指令只是一些二进制代码,即机器码。这点,PLC与普通计算机是完全相同的。如同普通计算机一样,PLC编程软件也有编译系统。它可把一些文字代码或图形符号编译成机器代码。所以,用户所看到的PLC指令一般不是机器代码,而是文字代码或图形符号。
如LD%IX0.0,就是一条文字指令。它由两部分组成。LD为装载操作码,%IX0.0为操作数(一个输入点的物理地址)。两者结合在一起,就是令CPU把操作数%I0.0的状态0或1,赋值给CPU累加器(Accumulator)。如
则是一条图形符号指令。它功能是使CPU累加器的现值赋值给输出点%Q0.0。再如
也是一条图形符号指令。它有3个操作数。两个输入(变量var1、var2),一个输出(变量var3)。目的是对两个输入变量进行加运算。结果输出给输出变量。
1.1.2 PLC功能(Function)
功能也称函数。PLC编程标准对它的定义是:“在执行时,它准确地产生一个数据元素和可能的其他输出变量,并且在文本语言中,可使用它的调用如同对表达式中的操作数那样”。说得通俗点,功能就是,PLC一组指令的有序集合,能将若干输入变量按某个特定规律转换成一个数据类型的输出。而这个输出的结果则被返回给函数本身,即它的返回值。如其输出为数组或结构,虽有多个(元素),但实质还是一个(数组或结构)。
函数可直接调用,其输出不被保存。所以也称没有记忆(without memory)的一组指令集合。这意味着,用相同的输入调用函数时,其输出总是相同的。图1-1所示为和利时PLC系统提供的一个进行字符串处理的函数。
图1-1 字符串处理函数
其功能是字符串var1与字符串var2相加(合并),然后赋值给字符串var3。如var1=abc,var1=efg,此指功能执行后则var3=abcdef。
一个函数还可调用另一个函数。但不能直接、间接地调用自身,即不允许递归调用。
函数是建立在指令基础之上的。简单的函数也可看成是指令。如三角函数、对数函数,也可看成数学计算指令。传统的PLC及其他很多PLC也都是这么处理的。
PLC函数分系统函数与用户函数,分别集成在相关函数库中。系统函数由PLC厂商提供,西门子称SFC。PLC档次越高,厂商提供函数也越多。用户函数可由用户编写与生成,西门子称之为FC。
1.1.3 PLC功能块(Functionblock)
根据PLC编程标准对功能块的定义是,能对若干输入变量进行处理,进而产生输出(一般为多个),或能执行某个特定操作。功能块要用实例(Instance)调用。在程序中,可创建多个实例。每个实例应具有一个相关的标识符(实例名称)和包含其输出和内部变量的一个数据结构,以及与实例有关的输入变量值或输入变量的引用。
功能块与函数不同,它没有返回值。但它的输出被永久保存在功能块的实例中。所以也称有记忆(with memory)的一组指令块。也因此,同样的实例,不同的程序扫描周期其输出可能是不同的。在功能块实例的外部,只有输入和输出变量可存取,而功能块的内部变量对功能块的用户是隐藏的。
图1-2所示为和利时PLC系统提供的一个增计数的功能块。这里的实例命名为C1。
图1-2 增计数的功能块
它的功能是实现增计数。与西门子PLC增计数指令的功能相同。该图上方的C1为实例名。图形左边的CU、RESET、PV(使用时的书写为C1.CU、C1.RESET、C1.PV)为功能块的输入端,右边的Q、CV(使用时的书写为C1.Q、C1.CV)为功能块的输出端。当这里的复位端(RESET)OFF,计数输入端(CU)信号每从OFF到ON一次,则计数功能块实例C1的现值加1。计数功能块现值输出(CV)端,输出计数功能块的当前计数值。当计数值大、等于计数设定值(PV)时,计数功能块输出(Q)端ON。当复位端ON时,停止计数,且计数功能块现值复位为0。
一个功能块还可调用另一个功能块。但不能直接、间接地调用自身,即也不允许递归调用。
生成功能块要用到指令或函数。所以,功能块是建立在指令与函数基础之上的。简单的功能块也可看成是指令。如上述计数功能块也可说成是增计数指令。传统的PLC及其他很多PLC也都是这么处理的。所不同的只是计数功能块指定实例的数量多少不受限制。而计数指令要用到PLC内部器件(计数器),其使用数量要受PLC提供的计数器数量限制。
功能块也可只有一个输出。这样的功能块与函数没有什么太大区别。所以,有的PLC,如欧姆龙,就只有功能块,而不用函数。只是函数可在结构化文本语言的表达式的中调用,而功能块则不能。
PLC功能块也分系统功能块与用户功能块,分别集成在相关功能块库中。系统功能块由PLC厂商提供,西门子称SFB。PLC档次越高,厂商提供功能块也越多。用户功能块由用户编写与生成,西门子称自建的功能块为FB。
1.1.4 PLC程序块(POU)
以上介绍的函数、功能块,PLC编程标准称之为程序组织单元(Program Organization Unit)。而这里介绍的程序块也是POU。函数、功能块虽是POU,但它们不能独立运行。只有程序块这个POU可通过系统管理使其独立运行。
程序块分为主程序块和一般程序块。主程序块是每个PLC程序所必须有的。PLC处运行状态时,将周而复始或周期地运行此程序块。而其他程序块则必须经调用,或由PLC的事件触发才能运行。只是不同的PLC此程序块用的名称不同。如ABB、和利时PLC,其主程序称PLC-PRG(不能改名)。再如西门子高档机为OB1。而非主程序块多可任意命名。
低档或传统PLC程序只有一个程序块。但其中含有很多子程序。而新一代或高档PLC可以没有子程序。但程序块都可相互调用。只是不能直接或间接调用自己,即也不能递归调用。
图1-3所示为西门子S7-1200机若干程序块。图中OB1为主程序块。它由PLC操作系统管理,并使其连续循环运行。而图中其他OB也是程序块,则与中断(事件)相关联。中断条件具备则被激活、运行。图中FB_1、FB_2分别就是一个功能块及其实例数据块,其运行与否则由OB1块调用。
图1-3 S7-1200机程序块
提示:程序块也称程序。正如白马也是马一样。一般讲,程序(块)、白马是个别概念,而程序、马是集合概念。弄清之间关系,为了与一般叙述一致,本书后续把程序块多说成程序。
1.1.5 PLC任务(Task)
根据PLC编程标准定义,任务为周期或触发相关程序组织单元(POU)执行而提供的控制元素。PLC程序块总是与具体的任务相联系的。而PLC程序则是由若干任务构成的。
不同的PLC有不同的任务划分。如欧姆龙PLC,其任务一般分为循环任务与中断任务。前者为定时循环执行,后者由事件触发,条件具备才执行。在循环任务中,有个基本的任务为循环任务00(启动),当PLC运行时,与其联系的程序(块)将周而复始执行着。传统PLC一般也就只有这样一个程序(块)。
再如和利时PLC,其任务有循环(Cyclic)任务、自由运行(Freewheeling)任务、事件触发(Triggered by Event)任务及外部事件触发(Triggered by External Event)任务。创建什么样的任务,以及任务与什么程序块建立什么关系,则用编程软件,在编程时,由编程人员确定。而在循环任务中,有个默认程序块,称PLC_PRG,当PLC处于运行状态,就一直周而复始地运行着。其他程序块则由PLC_PRG调用,也可由其他相关任务(Task)调用。
有的PLC没有任务这个词。其程序就是由不同特性的程序块组成。从本质上讲,这都与前面已介绍的PLC的实现控制方式有关。理解了PLC的实现控制方式的具体含义,这些概念也就好理解了。
1.1.6 PLC工程(Project)
工程是PLC编程及其他自动化程序的组织单位。运用它便于PLC面向对象编程及实现程序结构化。这是因为,工程包含有PLC硬件配置、程序块以及其他自动化应用。而每个配置、程序块或应用都有特定的功能。这样组织的程序既便于理解与调试,又便于平行开发,可单独开发许多单体或OEM产品,然后再予以集成与重用。
建立工程是PLC编程的开始。PLC编程也就是组织工程的过程。其基本步骤有:第一步是打开编程软件,创建(新)工程,确定工程名称,编辑工程属性;第二步是选定PLC类型、CPU型号、电源及I/O等模块,进行硬件配置(组态);第三步是做好I/O地址分配以及有关模块的设定;最后才进行编程,如确定任务、建立程序块、调用功能及功能块等。此外,有的编程软件还可编辑图形界面,类似计算机监控软件,可用其形象地监控PLC控制系统工作,因而还有它的扩展步骤。一个工程的具体内含有多有少,与PLC品牌、类型及型号,特别与所用的编程软件有关。
工程也是PLC编程的归宿,只有通过工程对所编程序进行编译、与PLC联机,并下载程序、设定等给PLC,所编的程序才能起作用。
工程还是PLC编程及设定等数据存储的容器。没有工程,这些数据无法保存,也无法调用。所存储的工程文件有的软件为一个,也有的为多个,并分布在多个子文件夹中。所存储文件格式,有的还可选择。可以是文本文件,也可是二进制文件。前者可用文本软件阅读,后者只能用编程软件阅读。但两者都可用编程软件打开。
多数编程软件建立的工程可对多个PLC,以至于对多个PLC网络进行配置(组态),并分别对多个PLC编程及调试。但有的PLC软件工程只能针对一个PLC(如AB等PLC编程软件)。要对多个PLC编程可打开多个编程软件实例,分别处理不同的PLC。
提示:如使用简易编程器编程,其所有操作,包括种种设定,全用手工实现。所以,也谈不上什么工程。
提示:本节介绍的有关概念引自国标GB/T 15969.3—2005/IEC61131-3:2002及国标GB/T 15969.8—2007/IEC/TR61131-8:2003。更准确的界定请参阅该标准。