S7-200 SMART 的存储区可以分为两大类:一是跟外部物理信号相关的输人/输出映像区/存储区;二是 CPU 内部的存储区。
(1)输入/输出映像区/存储区
数字量输入映像区(DI);数字量输出映像区(DO);模拟量输人存储区(AI);模拟量输出存储区(AO)。
(2)内部存储区
变量存储区(V);标志存储区(M);定时器(T);计数器(C);高速计数器(HC)累加器;特殊存储器(SM);局部存储区(L);顺序控制继电器存储区(S)。
CPU 在每个扫描周期的初期将物理外设的数字量输人信号扫描到数字量输人映像区(DI)中,程序在运行过程中的数字量输出值暂存在数字量输出映像区(DO)中,并在扫描周期的末期将数字量输出映像区的值刷新到物理输出模块。数字量输入/输出映像区是可读且可写的,在程序中对某些数字量输人位进行写操作,便可以模拟外部的数字量输入信号。CPU 对模拟量的处理有所不同,模拟量的值存放在模拟量输入/输出存储区中。
注意:模拟量的存放区被称为“存储区”而不是“映像区”或者“缓存区”。对于程序中
使用的模拟量,是直接从存储区进行读取或写入的。模拟输入(AI)存储区是只读的,模拟量输出(AO)存储区是只写的;变量存储区(V)用来存放程序在运行过程中的中间变量或者需要的配方数据;标志存储区(M)用来存放逻辑运算的中间结果。其实,在编程时,变量存储区和标志存储区没有明显的界限,也可以用变量存储区来存放逻辑运算的中间结果。两者都可以位、字节、字或者双字的方式进行访问,其区别在于变量存储区(V)比标志存储区(M)要大很多。比如,在 CPU ST40 中,变量存储区的范围为 VB0 ~VB16383,而标志存储区的范围为 MB0~MB31。程序运行过程中需要的配方数据,需要在数据块编辑器中设置并存放在变量存储区(V)中。
① 定时器用来计时。S7-200 SMART 定时器的时间基准有 1ms、10ms 和 100ms 三种。定时器有两种变量:当前值和定时器位。当前值是一个16位的无符号整数,用来记录当前的时间;定时器位是一个位,用来记录定时器是否已经被触发(当前值大于设定值)。以定时器的地址(T 编号)既可以访问当前值,也可以访问定时器位,取决于访问指令的类型。位操作指令访问的是定时器的位,字操作指令访问的是定时器的当前值。以图 3-19 为例:第一段程序是读取定时器 T3 的当前值,并将其存放到 VW10,属于字操作;第二段程序是读取定时器 T3 的位,并将其输出到 Q0.0,属于位操作。
图3 -19 定时器的字操作与位操作
① 计数器用来进行计数。S7-200 SMART 提供三种计数器:向上计数器、向下计数器和上下计数器。与定时器类似,计数器也有一个当前值(16 位无符号整数)和一个计数器位,其地址以字母 C加上编号表示(比如 C10)。使用字操作指令可以访问计数器的当前值,使用位操作指令可以访问计数器的的位。S7-200 SMART 的 CPU 最大支持 256个计数器(编号C0~C255)。
② 高速计数器 与普通的计数器不同,它不受 CPU 扫描周期的限制,可以用来对高速信号(比如脉冲)进行计数。高速计数器的值是一个32 位的有符号整数,其性质为只读,可以通过高速计数器的地址(HC 编号)进行访问。
③ 累加器 可以用来传递参数或存放指令运算的中间结果。S7-200SMART提供4个32 位的累加器(ACO~AC3)。累加器可以字节、字或者双字的方式进行访问。
④ 特殊存储器(SM) 存放着与系统运行有关的特殊变量。S7-200 SMART PLC 的操作系统会将系统状态等信息写人到特殊存储器中,用户程序通过访问特定的特殊存储器,就可以获取一些系统级的信息。比如,SM0.0 始终为 1,SM0.5 会产生 1s的时钟脉冲等。S7-200 SMART 有非常多的特殊存储器,可以参考 8.7 节中的常用特殊存储器。
⑤ 局部存储区(L) 用来保存程序块的运行信息。S7-200 SMART 为每一个程序组织单元(POU)分配了 64个字节的局部存储区,其中可以存放程序运行所需要的输人、输出输人输出及临时变量。局部存储区中的变量仅在当前 POU 运行时有效,POU 运行结束后将被释放。
⑥ 顺序控制继电器存储区(S) 与顺序控制继电器相关,在编写顺序控制流程图中使用。它可以位、字节、字和双字的方式进行访问,其地址符号为S,比如 S3.1、SB6等。
(3)程序结构
在S7-200 SMARTCPU的内部运行着两类程序:操作系统和用户程序。操作系统是厂家设计的、在出厂前固化到 CPU 内部的程序。操作系统是 PLC 的大管家,担负着管理统内存、执行用户程序、处理中断、状态诊断及各种通信处理。用户程序是由用户编写的用来完成某个或某些功能的程序。用户程序只有被操作系统调用后才能执行
从用户的角度来看,S7-200 SMART 的程序结构由三部分组成:主程序、子程序和中断程序。主程序的名称为“MAIN”,又称为组织块1(OB1),它是操作系统调用用户程用的接口,类似于C语言的 Main 函数。主程序中的指令按照从上到下的方向顺序执行,在每
一个循环扫描周期中,只能被执行一次。
在 PLC 的程序设计中,有一些功能代码可能需要反复调用。比如,现场有五个相同的电机,其控制方式完全相同。如果每一个电机都单独写一段控制代码,会增加很多工作量,有时候甚至是不太可能完成(想象下如果是五十个电机呢?)。而且这样做对于代码的阅话和日后的维护都非常不方便。这里,我们有一种简单的方案。S7-200 SMART 支持模块化程序设计。我们可以把常用的功能代码(比如上述例子中的电机控制)写成一个子程序,根据需要设计形参。子程序可以被主程序调用而执行,主程序在调用子程序时,根据实际情况,为其形参赋不同的实参值。
子程序中还可以调用其他子程序,这就是嵌套调用。S7-200 SMART CPU 支持最大嵌套深度为8层(从主程序开始算)。子程序的另一个好处是增加了程序的可移植型。
中断程序也是操作系统与用户程序的一种接口,用户把中断处理的代码写在中断程序中。当中断发生时,操作系统调用相应的中断程序,而执行中断处理。
S7-200 SMART 中,主程序、子程序和中断程序都被称为程序组织单元(POU)。
注意:OB 是 Organization Block 的缩写,中文翻译为“组织块”。