在上一章节中我们对符号寻址进行了系统学习,(参见西门子PLC控制器技术之六:符号寻址 http://www.jianshu.com/p/32170b46351b ),知道了什么是绝对寻址,什么是符号寻址,以及符号表及其相关功能的应用。
通过前面章节的学习,我们已经能够创建自己项目的硬件组态、找到现场设备的I/O点,对CPU属性等参数进行相关设置,编辑项目所需要的符号表等,本章将学习CPU运行机制及原理的重要内容——CPU程序块块结构。
程序块的类型
在PLC项目程序中,Blocks中常见的块有组织块OB、功能FC、功能块FB、数据块DB、以及系统功能SFC、系统功能块SFB和系统数据块SDB。
那么,它们之间的关系是怎样的呢?如下图所示,所有的块都是通过组织块进行组织的,而组织块是可以直接被编程电脑的操作系统直接调用。其他诸如FC、FB、SFC、SFB中都可以编写程序,但是最终一定要被组织块OB调用;DB是用来存放数据的,分为共享数据和背景数据块,共享数据块中的数据可以被全部的块调用,而背景数据是私有的,每一个FB/SFB在调用时都需要一个背景数据块DB/SDB。
组织块又分为循环、定时、过程诊断、故障处理等类型,最常用的是循环组织块OB1,当然还有OB10、OB35、OB80~86,OB121、OB122等,组织块的具体用法我们在后续组织块章节中详细讲解。
注意,每一个组织块的功能都是特定的,不能像FB或者FC那样随意创建块的序号。如果你对某一个组织块功能不了解,这里推荐一个简便的方法,选中某一不了解的组织块,按F1,会弹出相关的帮助文档。
输入/输出过程映像
西门子PLC一个重要的运行原理机制就是过程映像区,包括输入和输出两个区域。这是CPU的两个内部存储区域。
PII:Process-Image Input Table,输入过程映像区,在程序周期开始的时候读入该映像;
PIQ:Process-Image Output Table,输出过程映像区,在程序周期结束时传送给输出模块。
如下图所示,在程序扫描周期开始的时候,输入模块上的信号点状态将会被一次性读入到过程映像输入区PII中,数据在PII中保存,并且在程序执行的一个扫描周期时间内保持不变。
在程序扫描周期的过程中,程序每需要用到一个输入值,都直接从PII中读取,而非在输入模块上读取;同时将程序中产生的输出值保存在过程映像输出区中,而不是直接输出给输出模块。
在程序扫描周期结束的时候,过程映像输出区PIQ一次性将输出值输出到输出模块。
明白了上述CPU程序的运行机制,就容易理解为什么对某一个输出点重复赋值会出现严重的逻辑错误了吧?而且重复赋值的错误系统是不会自动检测出来的,但是我们期望实现的功能不能被实现。
循环程序执行
明白了CPU 程序块结构和过程映像区的原理机制后,我们可以看看CPU中循环程序运行的过程是怎样的。
如下图所示,从暖启动开始,首先调用启动组织块OB100,执行一次OB100程序,有输出就输出PIQ一次;然后开启循环监视时间,在进入主程序前从输入模块读入信号状态,并将其存放在过程映像输入区PII,然后执行OB1主循环程序,程序扫描到最后,将得到的过程映像输出区PIQ的值输出到输出模块,开启下一次循环。
以上就是本章专题的主要内容,思考以下几个问题,可以帮您巩固所学内容:
STEP7中有哪些类型程序块?
为什么要设置过程映像输入输出区?
说说循环程序执行的过程?