1.1 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模块上一个输入点的物理地址)。两者结合在一起,就是令CPU把操作数%IX0.0的状态0或1,赋值给CPU累加器(Accumulator)。如图1-1所示,则是一条图形符号指令。它的功能是使CPU累加器的现值赋值给输出点%Q0.0。再如图1-2所示,也是一条图形符号指令。它有3个操作数。两个输入(变量var1、var2),一个输出(变量var3)。目的是对两个输入变量进行加运算。结果输出给输出变量。
图1-1 “赋值”图形符号指令
图1-2 “加运算”图形符号指令
1.1.2 PLC功能(Function)
功能也称函数。PLC编程标准对它的定义是:“在执行时,它准确地产生一个数据元素和可能的其它输出变量,并且在文本语言中,可使用它的调用如同对表达式中的操作数那样”。说得通俗点,功能就是PLC一组指令的有序集合,能将若干它的输入按某个特定规律转换成一个数据类型的输出。而这个输出的结果则被返回给函数本身,即它的返回值。如其输出为数组或结构,虽有多个(元素),但实质还是一个(数组或结构)。
函数可直接调用,其输出不被保存。所以也称为没有记忆(without memory)的一组指令集合。这意味着用相同的输入调用函数时,其输出总是相同的。图1-3所示为和利时PLC系统提供的一个进行字符串处理函数。
其功能是字符串var1与字符串var2相加(合并),然后赋值给字符串var3。如var1=′abc′,var1=′efg′,此指令执行后则var3=′ab-cefg′。
一个函数还可调用另一个函数。但不能直接、间接地调用自身,即不允许递归调用。
PLC函数分系统函数与用户函数,分别集成在相关函数库中。系统函数由PLC厂商提供,西门子称SFC。PLC档次越高,厂商提供函数也越多。用户函数可由用户编写与生成,西门子称之为FC。
图1-3 字符串处理函数
1.1.3 PLC功能块(Function block)
根据PLC编程标准,对功能块的定义是:能对若干输入进行处理,进而产生输出(一般为多个),或能执行某个特定操作。功能块要用实例(Instance)调用。在程序中,可创建多个实例。每个实例应具有一个相关的标识符(实例名称)和包含其输出和内部变量的一个数据结构,以及与实例有关的输入值或输入的引用。
功能块与函数不同,它没有返回值。但它的输出被永久保存在功能块的实例中。所以也称为有记忆(with memory)的一组指令块。也因此,同样的实例,不同的程序扫描周期其输出可能是不同的。在功能块实例的外部,只有输入和输出可存取,而功能块的内部变量对功能块用户是隐藏的。
图1-4所示为和利时PLC系统提供的一个增计数的功能块。这里的实例命名为C1。
图1-4 增计数的功能块
它的功能是实现增计数。与西门子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厂商提供,西门子称SFB。PLC档次越高,厂商提供功能块也越多。用户功能块由用户编写与生成,西门子称自建的功能块为FB。
1.1.4 PLC程序块(POU)
程序块分为主程序块和一般程序块。主程序块是每个PLC程序所必须有的。PLC处于运行状态时,将周而复始或周期地运行此程序块。而其它程序块则必须经调用,或由PLC的事件触发才能运行。只是不同的PLC此程序块用的名称不同。如ABB、和利时PLC,其主程序称PLC-PRG(不能改名),再如西门子高档机为OB1。而非主程序块多可任意命名。
图1-5所示为西门子S7-1200机若干程序块。图中OB1为主程序块,它由PLC操作系统管理,并使其连续循环运行。而图中其它OB也是程序块,则与中断(事件)相关联。中断条件具备则被激活、运行。图中FB_1、FB_2分别是一个功能块及其实例数据块,其运行与否则由OB1块调用。
图1-5 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没有任务这个词。其程序就是由不同特性的程序块组成。从本质上讲,这都与PLC的实现控制方式有关。理解了PLC的实现控制方式的具体含义,这些概念也就好理解了。
1.1.6 PLC工程(Project)
工程是PLC编程以至于其它自动化程序的组织单位。包含有PLC硬件配置、程序块以及其它。建立工程是PLC编程的开始。PLC编程也就是组织工程的过程。一个工程的具体内含有多有少,与PLC品牌、类型、型号及与所使用的编程软件有关。
工程也是PLC编程的归宿,只有通过工程对所编程序进行编译、与PLC联机,并下载给PLC,所编的程序才能起作用。
工程还是PLC程序、设定及相关数据的存储容器。所存储的工程文件有的软件为一个,也有的为多个,并分布在多个子文件夹中。所存储文件格式,有的还可选择。可以是文本文件,也可是二进制文件。前者可用文本软件阅读,后者只能用编程软件阅读。但两者都可用编程软件打开。
多数编程软件建立的工程可对多个PLC,以至于对多个PLC网络进行配置(组态),并分别对多个PLC编程及调试。但有的PLC软件工程只能针对一个PLC(如AB等PLC编程软件)。
提示1:如使用简易编程器编程,其所有操作,包括种种设定,全用手工实现。所以,也谈不上什么工程
提示2:本节介绍的有关概念引自国标GB/T 15969.3-2005/IEC61131-3:2002及国标GB/T 15969.8-2007/IEC/TR61131-8:2003。详细内容请参阅上述标准。