西门子S7-1200 PLC的物理存储器如下。
装载存储器:非易失性的存储区,用于存储程序、数据和组态信息,类似于计算机的硬盘,具有断电保持功能。
工作存储器:集成在CPU中的高速存取RAM,类似于计算机的内存,断电时,内容丢失。
断电保持存储器:用来防止在关闭电源时丢失数据,可以用不同的方法设置变量的断电保持功能。
存储卡:用来存储程序或传送程序。
西门子S7-1200 PLC的基本数据类型见表1-2。
表1-2 西门子S7-1200 PLC的基本数据类型
续表
(1)布尔型数据类型
布尔型数据类型是“位”,可被赋予“TRUE”真(“1”)或“FALSE”假(“0”),占用1位存储空间。
(2)整型数据类型
整型数据类型可以是Byte、Word、DWord、SInt、USInt、Int、UInt、DInt及UDInt等。注意,当较长位的数据类型转换为较短位的数据类型时,会丢失高位信息。
(3)实型数据类型
实型数据类型主要包括32位或64位浮点数。Real和LReal是浮点数,用于显示有理数,可以显示十进制数据,包括小数部分,也可以被描述为指数形式。其中,Real是32位浮点数,LReal是64位浮点数。
(4)时间型数据类型
时间型数据类型主要是Time,用于输入时间数据。
(5)字符型数据类型
字符型数据类型主要是Char,占用8位,用于输入16#00~16#FF的字符。
8位二进制数字组成1个字节(Byte),如%MB100是由%M100.0~%M100.7共8位的状态构成的,如图1-34所示。
图1-34 MB100的构成
西门子S7-1200 PLC采用“字节.位”寻址方式,与位逻辑相对应的常见操作数为I(输入)、Q(输出)及M(中间变量),均为直接变量,见表1-3。
表1-3 直接变量
根据IEC61131-3标准,直接变量由百分数符号%开始,随后是位置前缀符号。如果有分级,则用整数表示分级,用由小数点“.”分隔的无符号整数表示直接变量,如%I3.2,如图1-35所示。
图1-35%I3.2寻址
在一般情况下,以起始字节的地址作为字和双字的地址,起始字节为最高位的字节,%MW100(字)和%MD100(双字)的寻址方式如图1-36所示。
图1-36%MW100(字)和%MD100(双字)的寻址方式
在西门子S7-1200 PLC中,CPU支持用OB、FC、FB、DB代码块创建程序。
①组织块(OB),用于定义程序的结构,有些OB具有预定义的行为和启动事件,可用于创建自定义启动事件的OB。
②函数(FC)和函数块(FB),包含与特定任务或参数组合相对应的程序代码,每个FC或FB都可以提供一组输入参数和输出参数,用于与调用的代码块共享数据。FB还可以使用相关联的数据块(DB)保存执行期间的值状态,程序中的其他代码块可以使用这些值状态。
③数据块(DB),用于存储程序可以使用的数据。
程序的执行顺序是,从一个或多个在进入RUN模式时运行一次的可选启动组织块(OB)开始,执行一个或多个循环执行的程序循环OB。OB也可以与中断事件(可以是标准事件或错误事件)关联,在相应的标准事件或错误事件发生时执行。
在创建用于完成自动化任务的程序时,需要将指令插入代码块。
①组织块(OB)对应CPU中的特定事件,可中断程序的执行。用于循环执行程序的默认组织块(OB 1)为程序提供基本的结构,是唯一一个必须使用的代码块。如果程序中包含其他的OB,则这些OB会中断OB 1的执行。其他的OB可执行特定的功能,如用于启动任务、处理中断和错误或按特定的时间间隔执行特定的程序。
②函数块(FB)是调用代码块(OB、FB或FC)时执行的子例程,将参数传递给FB,并标识特定数据块(DB),更改背景DB,使通用的FB控制一组设备的运行。例如,借助包含泵或阀门特定运行参数的不同背景DB,可用一个FB控制多个泵或阀门。
③函数(FC)是调用代码块(OB、FB或FC)时执行的子例程,将参数传递给FC,输出值必须写入存储器或全局DB中。
根据实际应用要求,程序的结构可以选择线性结构或模块化结构创建,如图1-37所示。
图1-37 程序的结构
程序的线性结构是按顺序逐条执行用于完成自动化任务的所有指令,通常将所有的指令都放入用于循环执行的OB 1中。
程序的模块化结构是调用执行特定任务的代码块,将复杂的自动化任务划分为与过程工艺功能相对应的次级任务,每个代码块都为每个次级任务提供程序段,通过调用该代码块可构建复杂的程序。
通过创建重复使用的通用代码块,可简化程序的设计和实现。
通用代码块具有许多优点:
①可为标准任务创建重复使用的代码块,并存储在不同应用或解决方案使用的库中。
②可将程序结构解析为模块化组件,易于理解、管理、更新或修改。
③可将程序构建为一组模块化程序段,易于调试。
④可缩短调试时间。
当用一个代码块调用另一个代码块时,CPU会首先执行被调用代码块中的程序,然后继续执行调用位置之后的程序,如图1-38所示。
图1-38 调用示意图
嵌套代码块的调用可以实现更加模块化的结构,如图1-39所示。
图1-39 嵌套代码块
西门子S7-1200 PLC的CPU有STOP模式、STARTUP模式及RUN模式等三种工作模式。
①在STOP模式下,CPU不执行任何程序,用户可以下载项目。
②在STARTUP模式下,执行一次启动OB(如果存在),在RUN模式的启动阶段不处理任何中断事件。
STARTUP模式的具体描述如下:只要工作状态从STOP模式切换到RUN模式,CPU就会清除过程映像输入、初始化过程映像输出、处理启动OB。启动OB时的指令对过程映像输入进行任何读访问时,读取到的只有0,不是当前的物理输入值,要在启动模式下读取物理输入的当前状态,就必须先执行立即读取操作,再执行启动OB及任何相关的FC和FB。如果存在多个启动OB,则按照OB编号依次执行各启动OB,OB编号最小的先执行。
③在RUN模式下,重复执行扫描周期,中断事件可能会在程序循环阶段的任何位置发生并执行,无法下载任何项目。
CPU执行的任务如图1-40所示。
图1-40 CPU执行的任务
在西门子S7-1200 PLC中,OB用于控制程序的执行,每个OB的编号必须唯一,200以下为一些默认OB编号,其他OB编号必须大于或等于200。
CPU中的特定事件将触发OB的执行。OB无法互相调用或通过FC、FB调用。只有启动事件(如诊断中断或时间间隔)可以启动OB的执行。CPU按优先等级处理OB,即先执行优先级较高的OB,然后执行优先级较低的OB。最低优先等级为1(对应主程序循环),最高优先等级为27(对应时间错误中断)。
OB实现的功能如下。
(1)程序循环
程序循环在CPU处于RUN模式时执行,主程序块是程序循环OB。允许使用多个程序循环OB,按编号顺序执行。OB 1是默认程序循环OB,其他程序循环OB必须标识为OB 200或更大。
(2)启动
启动OB在CPU从STOP模式切换到RUN模式时执行一次,包括处于RUN模式时和执行STOP模式到RUN模式切换命令时,之后执行主程序循环OB,允许有多个启动OB。OB 100是默认启动OB,其他启动OB必须是OB 200或更大。
(3)时间延迟
通过启动中断(SRT_DINT)指令组态事件后,时间延迟OB将以指定的时间间隔执行。延迟时间在该指令的输入参数中指定。当指定的延迟时间结束时,时间延迟OB将中断正常的程序循环。对任何给定的时间最多可以组态4个时间延迟事件。每个组态的时间延迟事件只允许对应一个OB。时间延迟OB必须是OB 200或更大。
(4)循环中断
循环中断OB将按用户定义的时间间隔(如2s)中断程序循环。最多可以组态4个循环中断事件。每个组态的循环中断事件只允许对应一个OB。该OB必须是OB 200或更大。
(5)硬件中断
硬件中断在发生相关的硬件事件时执行,包括内置数字输入端的上升沿和下降沿事件及HSC事件。硬件中断OB将中断正常的程序循环来响应硬件事件,可以在硬件配置的属性中定义事件。每个组态的硬件事件只允许对应一个OB。该OB必须是OB 200或更大。
(6)时间错误中断
时间错误中断在检测到时间错误时执行。如果超出最大循环时间,则时间错误中断OB将中断正常的程序循环。最大循环时间在PLC的属性中定义。OB 80是唯一支持时间错误事件的OB。可以组态没有OB 80时的动作:忽略错误或切换到STOP模式。
(7)诊断错误中断
诊断错误中断在检测到错误和报告诊断错误时执行。如果具有诊断错误功能的模块发现了错误(如果模块已启用诊断错误中断),则诊断错误OB将中断正常的程序循环。OB 82是唯一支持诊断错误事件的OB。如果程序中没有诊断错误OB,则可以组态CPU使其忽略错误或切换到STOP模式。