2.2PLC的工作原理与用户程序结构

2.2.1 逻辑运算

在数字量(或称开关量)控制系统中,变量仅有两种相反的工作状态,例如高电平和低电平、继电器线圈的通电和断电,可以分别用逻辑代数中的1和0来表示这些状态,在波形图中,用高电平表示1状态,用低电平表示0状态。

使用数字电路或PLC的梯形图都可以实现数字量逻辑运算。用继电器电路或梯形图可以实现基本的逻辑运算,触点的串联可以实现“与”运算,触点的并联可以实现“或”运算,用常闭触点控制线圈可以实现“非”运算。多个触点的串、并联电路可以实现复杂的逻辑运算。图2-3的上面是PLC的梯形图,下面是对应的函数块图。

图2-3中的I0.0~I0.4为数字量输入变量,Q4.0~Q4.2为数字量输出变量,它们之间的“与”“或”“非”逻辑运算关系见表2-1。表中的0和1分别表示输入点的常开触点断开和接通,和表示线圈断电和通电。

978-7-111-57703-4-Chapter02-4.jpg

图2-3 基本逻辑运算

a)与 b)或 c)非

图2-4是用交流接触器控制异步电动机的主电路、控制电路和有关的波形图。按下起动按钮SB1,它的常开触点接通,电流经过SB1的常开触点和停止按钮SB2的常闭触点,流过交流接触器KM的线圈,接触器的衔铁被吸合,使主电路中KM的3对常开触点闭合,异步电动机的三相电源接通,电动机开始运行,控制电路中接触器KM的辅助常开触点同时接通。

2-1 逻辑运算关系表

978-7-111-57703-4-Chapter02-5.jpg

放开起动按钮后,SB1的常开触点断开,电流经KM的辅助常开触点和SB2的常闭触点流过KM的线圈,电动机继续运行。KM的辅助常开触点实现的这种功能称为“自锁”或“自保持”,它使继电器电路具有类似于R-S触发器的记忆功能。

978-7-111-57703-4-Chapter02-6.jpg

图2-4 继电器控制电路

在电动机运行时按下停止按钮SB2,它的常闭触点断开,使KM的线圈失电,KM的主触点断开,异步电动机的三相电源被切断,电动机停止运行,同时控制电路中KM的辅助常开触点断开。当停止按钮SB2被放开,其常闭触点闭合后,KM的线圈仍然失电,电动机继续保持停止运行状态。图2-4给出了有关信号的波形图,图中用高电平表示1状态(线圈通电、按钮被按下),用低电平表示0状态(线圈断电、按钮被放开)。

图中的热继电器FR用于过载保护,电动机过载时,经过一段时间后,FR的常闭触点断开,使KM的线圈断电,电动机停转。图2-4中的继电器电路称为起动-保持-停止电路。

图2-4中的继电器控制电路实现的逻辑运算可以用逻辑代数表达式表示为

978-7-111-57703-4-Chapter02-7.jpg

在继电器电路图和梯形图中,线圈的状态是输出量,触点的状态是输入量。上式左边的KM与图中的线圈相对应,右边的KM与线圈的常开触点相对应,上划线表示作逻辑“非”运算,978-7-111-57703-4-Chapter02-8.jpg对应于SB2的常闭触点。上式中的加号表示逻辑“或”运算,小圆点(乘号)或星号表示逻辑“与”运算。

与普通算术运算“先乘除后加减”类似,逻辑运算的规则为先“与”后“或”。上式为了先作“或”运算(触点的并联),用括号将“或”运算式括起来,括号中的运算优先执行。

2.2.2 用户程序结构简介

S7-1200与S7-300/400的用户程序结构基本上相同。

1.模块化编程

模块化编程将复杂的自动化任务划分为对应于生产过程的技术功能的较小的子任务,每个子任务对应于一个称为“块”的子程序,可以通过块与块之间的相互调用来组织程序。这样的程序易于修改、查错和调试。块结构显著地增加了PLC程序的组织透明性、可理解性和易维护性。各种块的简要说明见表2-2,其中的OB、FB、FC都包含程序,统称为代码(Code)块。代码块的个数没有限制,但是受到存储器容量的限制。

2-2 用户程序中的块

978-7-111-57703-4-Chapter02-9.jpg

被调用的代码块又可以调用别的代码块,这种调用称为嵌套调用。从程序循环OB或启动OB开始,嵌套深度为16;从中断OB开始,嵌套深度为6。

在块调用中,调用者可以是各种代码块,被调用的块是OB之外的代码块。调用函数块时需要为它指定一个背景数据块。

2.

组织块(Organization Block,OB)是操作系统与用户程序的接口,由操作系统调用,用于控制扫描循环和中断程序的执行、PLC的启动和错误处理等。组织块的程序是用户编写的。

每个组织块必须有一个唯一的OB编号,123之前的某些编号是保留的,其他OB的编号应大于等于123。CPU中特定的事件触发组织块的执行,OB不能相互调用,也不能被FC和FB调用。只有启动事件(例如诊断中断事件或周期性中断事件)可以启动OB的执行。

(1)程序循环组织块

OB1是用户程序中的主程序,CPU循环执行操作系统程序,在每一次循环中,操作系统程序调用一次OB1。因此OB1中的程序也是循环执行的。允许有多个程序循环OB,默认的是OB1,其他程序循环OB的编号应大于等于123。

(2)启动组织块

当CPU的工作模式从STOP切换到RUN时,执行一次启动(STARTUP)组织块,来初始化程序循环OB中的某些变量。执行完启动OB后,开始执行程序循环OB。可以有多个启动OB,默认的为OB100,其他启动OB的编号应大于等于123。

(3)中断组织块

中断处理用来实现对特殊内部事件或外部事件的快速响应。如果没有中断事件出现,CPU循环执行组织块OB1和它调用的块。如果出现中断事件,例如诊断中断和时间延迟中断等,因为OB1的中断优先级最低,操作系统在执行完当前程序的当前指令(即断点处)后,立即响应中断。CPU暂停正在执行的程序块,自动调用一个分配给该事件的组织块(即中断程序)来处理中断事件。执行完中断组织块后,返回被中断的程序的断点处继续执行原来的程序。

这意味着部分用户程序不必在每次循环中处理,而是在需要时才被及时地处理。处理中断事件的程序放在该事件驱动的OB中。

4.3 节详细介绍了各种中断组织块和中断事件的处理方法。

3.函数

函数(Function,FC)是用户编写的子程序,STEP 7 V5.5称为功能。它包含完成特定任务的代码和参数。FC和FB(函数块)有与调用它的块共享的输入参数和输出参数。执行完FC和FB后,返回调用它的代码块。

函数是快速执行的代码块,可用于完成标准的和可重复使用的操作,例如算术运算。或完成技术功能,例如使用位逻辑运算的控制。

可以在程序的不同位置多次调用同一个FC或FB,这样可以简化重复执行的任务的编程。函数没有固定的存储区,函数执行结束后,其临时变量中的数据就丢失了。

4.函数块

函数块(Function Block,FB)是用户编写的子程序,STEP 7 V5.5称为功能块。调用函数块时,需要指定背景数据块,后者是函数块专用的存储区。CPU执行FB中的程序代码,将块的输入、输出参数和局部静态变量保存在背景数据块中,以便在后面的扫描周期访问它们。FB的典型应用是执行不能在一个扫描周期完成的操作。在调用FB时,自动打开对应的背景数据块,后者的变量可以供其他代码块使用。

调用同一个函数块时使用不同的背景数据块,可以控制不同的对象。

5.数据块

数据块(Data Block,DB)是用于存放执行代码块时所需的数据的数据区,与代码块不同,数据块没有指令,STEP7按变量生成的顺序自动地为数据块中的变量分配地址。

有两种类型的数据块:

1)全局数据块存储供所有的代码块使用的数据,所有的OB、FB和FC都可以访问它们。

2)背景数据块存储的数据供特定的FB使用。背景数据块中保存的是对应的FB的输入、输出参数和局部静态变量。FB的临时数据(Temp)不是用背景数据块保存的。

2.2.3PLC的工作过程

1.操作系统与用户程序

CPU的操作系统用来实现与具体的控制任务无关的PLC的基本功能。操作系统的任务包括处理暖启动、刷新过程映像输入/输出、调用用户程序、检测中断事件和调用中断组织块、检测和处理错误、管理存储器,以及处理通信任务等。

用户程序包含处理具体的自动化任务必需的所有功能。用户程序由用户编写并下载到CPU,用户程序的任务包括:

1)检查是否满足暖启动需要的条件,例如限位开关是否在正确的位置。

2)处理过程数据,例如用数字量输入信号来控制数字量输出信号,读取和处理模拟量输入信号,输出模拟量值。

3)用OB(组织块)中的程序对中断事件作出反应,例如在诊断错误中断组织块OB82中发出报警信号,和编写处理错误的程序。

2.CPU的工作模式

CPU有3种工作模式:RUN(运行)、STOP(停机)与STARTUP(启动)。CPU面板上的状态LED(发光二极管)用来指示当前的工作模式,可以用编程软件改变CPU的工作模式。

在STOP模式,CPU仅处理通信请求和进行自诊断,不执行用户程序,不会自动更新过程映像。上电后CPU进入STAPTUP(启动)模式,进行上电诊断和系统初始化,检查到某些错误时,将禁止CPU进入RUN模式,保持在STOP模式。

在CPU内部的存储器中,设置了一片区域来存放输入信号和输出信号的状态,它们被称为过程映像输入区和过程映像输出区。从STOP模式切换到RUN模式时,CPU进入启动模式,执行下列操作(见图2-5中各阶段的符号):

阶段A复位过程映像输入区(I存储区)。

阶段B用上一次RUN模式最后的值或替代值来初始化输出。

阶段C执行一个或多个启动OB,将非保持性M存储器和数据块初始化为其初始值,并启用组态的循环中断事件和时钟事件。

阶段D将外设输入状态复制到过程映像输入区。

阶段E(整个启动阶段)将中断事件保存到队列,以便在RUN模式进行处理。

阶段F将过程映像输出区(Q区)的值写到外设输出。

978-7-111-57703-4-Chapter02-10.jpg

图2-5 启动与运行过程示意图

启动阶段结束后,进入RUN模式。为了使PLC的输出及时地响应各种输入信号,CPU反复地分阶段处理各种不同的任务(见图2-5中各阶段的符号):

阶段①将过程映像输出区的值写到输出模块。

阶段②将输入模块处的输入传送到过程映像输入区。

阶段③执行一个或多个程序循环OB,首先执行主程序OB1。

阶段④处理通信请求和进行自诊断。

上述任务是按顺序循环执行的,这种周而复始的循环工作方式称为扫描循环。

在扫描循环的任意阶段(阶段⑤)出现中断事件时,执行中断程序。

3.工作模式的切换

CPU模块上没有切换工作模式的模式选择开关,只能用STEP7在线工具中的CPU操作面板(见图6-26),或工具栏上的978-7-111-57703-4-Chapter02-11.jpg按钮和978-7-111-57703-4-Chapter02-12.jpg按钮,来切换STOP或RUN工作模式。也可以在用户程序中用STP指令使CPU进入STOP模式。

4.冷启动与暖启动

下载了用户程序的块和硬件组态后,下一次切换到RUN模式时,CPU执行冷启动。冷启动时复位输入,初始化输出;复位存储器,即清除工作存储器、非保持性存储区和保持性存储区,并将装载存储器的内容复制到工作存储器。存储器复位不会清除诊断缓冲区,也不会清除永久保存的IP地址。

冷启动之后,在下一次下载之前的STOP到RUN模式的切换均为暖启动。暖启动时所有非保持的系统数据和用户数据被初始化,不会清除保持性存储区。

暖启动不对存储器复位,可以用在线与诊断视图的“CPU操作面板”上的“MRES”按钮(见图6-26)来复位存储器。

移除或插入中央模块将导致CPU进入STOP模式。

5.RUN模式CPU的操作

下面是RUN模式各阶段任务的详细介绍。

(1)写外设输出

在扫描循环的第一阶段,操作系统将过程映像输出中的值写到输出模块并锁存起来。梯形图中某输出位的线圈“通电”时,对应的过程映像输出位中的二进制数为1。信号经输出模块隔离和功率放大后,继电器型输出模块中对应的硬件继电器的线圈通电,其常开触点闭合,使外部负载通电工作。若梯形图中某输出位的线圈“断电”,对应的过程映像输出位中的二进制数为0。将它送到继电器型输出模块,对应的硬件继电器的线圈断电,其常开触点断开,外部负载断电,停止工作。

可以用指令立即改写外设输出点的值,同时将刷新过程映像输出。

(2)读外设输入

在扫描循环的第二阶段,读取输入模块的输入,并传送到过程映像输入区。外接的输入电路闭合时,对应的过程映像输入位中的二进制数为1,梯形图中对应的输入点的常开触点接通,常闭触点断开。外接的输入电路断开时,对应的过程映像输入位中的二进制数为0,梯形图中对应的输入点的常开触点断开,常闭触点接通。

可以用指令立即读取数字量或模拟量的外设输入点的值,但是不会刷新过程映像输入。

(3)执行用户程序

PLC的用户程序由若干条指令组成,指令在存储器中按顺序排列。读取输入后,从第一条指令开始,逐条顺序执行用户程序中的指令,包括程序循环OB调用FC和FB的指令,直到最后一条指令。

在执行指令时,从过程映像输入/输出或别的位元件的存储单元读出其0、1状态,并根据指令的要求执行相应的逻辑运算,运算的结果写入相应的过程映像输出和其他存储单元,它们的内容随着程序的执行而变化。

程序执行过程中,各输出点的值被保存到过程映像输出,而不是立即写给输出模块。

在程序执行阶段,即使外部输入信号的状态发生了变化,过程映像输入的状态也不会随之而变,输入信号变化了的状态只能在下一个扫描周期的读取输入阶段被读入。执行程序时,对输入/输出的访问通常是通过过程映像,而不是实际的I/O点,这样做有以下好处:

1)在整个程序执行阶段,各过程映像输入点的状态是固定不变的,程序执行完后再用过程映像输出的值更新输出模块,使系统的运行稳定。

2)由于过程映像保存在CPU的系统存储器中,访问速度比直接访问信号模块快得多。

(4)通信处理与自诊断

在扫描循环的通信处理和自诊断阶段,处理接收到的报文,在适当的时候将报文发送给通信的请求方。此外还要周期性地检查固件和I/O模块的状态。

(5)中断处理

事件驱动的中断可以在扫描循环的任意阶段发生。有事件出现时,CPU中断扫描循环,调用组态给该事件的OB。OB处理完事件后,CPU在中断点恢复用户程序的执行。中断功能可以提高PLC对事件的响应速度。