1.
西门子
S7-1200 PLC
的物理存储器
西门子
S7-1200 PLC
使用的物理存储器类型包括
RAM
、
ROM
、
Flash EPROM
(简称为
FEPROM
)。
装载存储器:非易失性的存储区,用于保存用户的程序、数据和组态信息。所有的
CPU
都有内部的装载存储器,CPU
插入存储卡后,用存储卡可作为装载存储器,类似于计算机的硬盘,具有断电保持功能。
工作存储器:集成在
CPU
中的高速存取
RAM
,类似于计算机的内存,断电时,内容丢失。
断电保持存储器:用来防止在关闭电源时丢失数据,可以用不同的方法设置变量的断电保持功能。
存储卡:可选的存储卡用来存储用户程序或传送程序。
2.
西门子
S7-1200 PLC
的基本数据类型
西门子
S7-1200 PLC
的基本数据类型见表
1-3
。
表
1-3
西门子
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
的字符。
3.
位、字节、字与双字的寻址
8
位二进制数组成
1
个字节(
Byte
),如
%MB100
是由
%M100.0
到
%M100.7
共
8
位的状态构成的,如
图
1-47
所示。

图1-47 MB100的构成
西门子
S7-1200 PLC
采用
“
字节
.
位
”
寻址方式,与位逻辑相对应的常见操作数为
I
(输入)、
Q
(输出)及M
(中间变量),均为直接变量,见表
1-4
。

根据
IEC61131-3
标准,直接变量由百分数符号
%
开始,随后是位置前缀符号。如果有分级,则用整数表示分级,并用由小数点符号“.”
分隔的无符号整数表示直接变量。
如
%I3.2
,首位字母表示存储器的标识符,
I
表示输入过程映像区,如图
1-48
所示。
一般而言,以起始字节的地址作为字和双字的地址,起始字节为最高位的字节。图
1- 49是
%MW100
(字)和
%MD100
(双字)的寻址方式。

图1-48 %I3.2寻址

图1-49 %MW100(字)和
%MD100
(双字)的寻址方式
4.
用户程序的执行
1.
代码块的种类
在西门子
S7-1200 PLC
中,
CPU
支持
OB
、
FC
、
FB
、
DB
代码块,可以创建有效的用户程序结构。
①组织块(
OB
)用于定义程序的结构。有些
OB
具有预定义的行为和启动事件,用户可以创建具有 自定义启动事件的OB
。
②功能(
FC
)和功能块(
FB
)包含与特定任务或参数组合相对应的程序代码。每个
FC
或
FB
都可以提供一组输入和输出参数,用于与调用块共享数据。FB
还可以使用相关联的数据块(被称为背景数据块)保存执行期间的值状态,程序中的其他块可以使用这些值状态。
③数据块(
DB
)用于存储程序块可以使用的数据。
用户程序的执行顺序是,从一个或多个在进入
RUN
模式时运行一次的可选启动组织块(
OB
)开
始,然后执行一个或多个循环执行的程序循环
OB
。
OB
也可以与中断事件(可以是标准事件或错误事件)相关联,并在相应的标准或错误事件发生时执行。
2.
用户程序的结构
创建用于自动化任务的用户程序时,需要将程序的指令插入代码块中。
①组织块(
OB
)对应
CPU
中的特定事件,可中断用户程序的执行。用于循环执行用户程序的默认 组织块(OB 1
)为用户程序提供基本的结构,是唯一一个用户所必需的代码块。如果程序中包括其他的OB
,则这些
OB
会中断
OB 1
的执行。其他的
OB
可执行特定的功能,如用于启动任务、处理中断和错误或者按特定的时间间隔执行特定的程序代码。
②功能块(
FB
)是从另一个代码块(
OB
、
FB
或
FC
)进行调用时执行的子例程。调用块将参数传递到FB
,并标识可存储特定调用数据或该
FB
实例的特定数据块(
DB
)。更改背景
DB
可使通用的
FB
控制一组设备的运行。例如,借助包含每个泵或阀门特定运行参数的不同背景DB
,则一个
FB
可控制多个泵或阀。
③功能(
FC
)是从另一个代码块(
OB
、
FB
或
FC
)进行调用时执行的子例程。
FC
不具有相关的背景DB
。调用块将参数传递给
FC
。
FC
中的输出值必须写入存储器地址或全局
DB
中。
根据实际应用要求,可选择线性结构或模块化结构创建用户程序,如图
1-50
所示。

图1-50 用户程序的结构
线性程序按顺序逐条执行用于自动化任务的所有指令。通常,线性程序将所有的程序指令都放入用于循环执行程序的OB
(
OB 1
)中。
模块化程序调用可执行特定任务的特定代码块。创建模块化结构需要将复杂的自动化任务划分为与 过程的工艺功能相对应的更小的次级任务,每个代码块都为每个次级任务提供程序段,通过调用该代码块来构建复杂的程序。
通过创建可在用户程序中重复使用的通用代码块,可简化用户程序的设计和实现。
使用通用代码块具有许多优点:
①可为标准任务创建能够重复使用的代码块,如用于控制泵或电动机,也可以将这些通用代码块存
储在可由不同的应用或解决方案使用的库中。
②将用户程序构建到与功能任务相关的模块化组件中,可使程序的设计更易于理解和管理。模块化
组件不仅有助于标准化的程序设计,也有助于使更新或修改程序代码更加快速和容易。
③创建模块化组件可简化程序的调试,并将整个程序构建为一组模块化程序段,且在完成代码开发
后测试功能。
④创建与特定工艺功能相关的模块化组件,有助于简化对已完成应用程序的调试,并减少在调试过
程中所用的时间。
3.
使用块来构建程序
通过设计
FB
和
FC
执行通用任务,创建模块化代码块,然后通过由其他代码块调用这些可重复使用的模块来构建程序,调用块将设备特定的参数传递给被调用块,如图1-51
所示。当一个代码块调用另一个代码块时,CPU
会执行被调用块中的程序代码。执行完被调用块后,
CPU
会继续执行该调用块之后的指令。

图1-51 块被调用示意
如图
1-52
所示,可嵌套块的调用可以实现更加模块化的结构。

图
1-52
可嵌套块
5.西门子
S7-1200 PLC
实现控制的过程
1.CPU
的三种工作模式
西门子
S7-1200 PLC
的
CPU
有以下三种工作模式:
STOP
模式、
STARTUP
模式及
RUN
模式。
CPU
前面的状态LED
灯用于指示当前的工作模式。
①在
STOP
模式下,
CPU
不执行任何程序,用户可以下载项目。
②在
STARTUP
模式下,执行一次启动
OB
(如果存在),在
RUN
模式的启动阶段不处理任何中断事件。
STARTUP
模式的具体描述如下:只要工作状态从
STOP
切换到
RUN
,
CPU
就会清除过程映像输入、初始化过程映像输出并处理启动OB
。启动
OB
中的指令对过程映像输入进行任何读访问时,读取到的都只有零,而不是当前的物理输入值。因此,要在启动模式下读取物理输入的当前状态,就必须执行立即读取操作,再执行启动OB
及任何相关的
FC
和
FB
。如果存在多个启动
OB
,则按照
OB
编号依次执行各启动OB
,
OB
编号最小的先执行。
③在
RUN
模式下,重复执行扫描周期。中断事件可能会在程序循环阶段的任何点发生并进行处理,处于RUN
模式下时无法下载任何项目。
RUN
模式下
CPU
执行的任务如图
1-53
所示。

图
1-53 RUN
模式下
CPU
执行的任务
2.OB
的实现功能
在西门子
S7-1200 PLC
中,
OB
控制用户程序的执行,每个
OB
的编号必须唯一,
200
以下的一些默 认OB
编号被保留,其他
OB
编号必须大于或等于
200
。CPU中的特定事件将触发组织块的执行。
OB
无法互相调用或通过
FC
或
FB
调用。只有启动事件(如诊断中断或时间间隔)可以启动OB
的执行。
CPU
按优先等级处理
OB
,即先执行优先级较高的
OB
,然后执行优先级较低的OB
。最低优先等级为
1
(对应主程序循环),最高优先等级为
27
(对应时间错误中
断)。
OB
可以控制的操作如下。
(
1
)程序循环
程序循环在
CPU
处于
RUN
模式时循环执行,主程序块是程序循环
OB
。用户在其中放置控制程序的
指令及调用其他用户块。允许使用多个程序循环
OB
,按编号顺序执行。
OB 1
是默认循环
OB
,其他程序循环OB
必须标识为
OB 200
或更大。
(
2
)启动
启动在
CPU
的工作模式从
STOP
切换到
RUN执行一次,包括处于RUN
模式时和执 行STOP
到
RUN
切换命令时上电,之后将开始执行主程序循环
OB
,允许有多个启动
OB
。
OB100
是默认启动OB
,其他启动
OB
必须是
OB200
或更大。
(
3
)时间延迟
通过启动中断(
SRT_DINT
)指令组态事件后,时间延迟
OB
将以指定的时间间隔执行。延迟时间在扩展指令SRT_DINT
的输入参数中指定。指定的延迟时间结束时,时间延迟
OB
将中断正常的循环程序执行。对任何给定的时间最多可以组态4
个时间延迟事件。每个组态的时间延迟事件只允许对应一个
OB
。时间延迟OB
必须是
OB200
或更大。
(
4
)循环中断
循环中断
OB
将按用户定义的时间间隔(如每隔
2 s
)中断循环程序执行。最多可以组态
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
模式。