可以使用编程软件在线工具中的“STOP”或“RUN”命令(页 1217)更改当前工作模式。也可在程 序中包含 STP 指令 (页 302),以使 CPU 切换到 STOP 模式。可通过该指令根据程序逻辑停止 程序的执行。 • 在 STOP 模式下,CPU 处理所有通信请求(如果适用)并执行自诊断。CPU 不执行用户程 序。过程映像也不会自动更新。 • 在 STARTUP 和 RUN 模式下,CPU 执行下图所示的任务: $ % & ' ( ཱ ུ ི ཱི STARTUP RUN A 将物理输入的状态复制到 I 存储器 ① 将 Q 存储器写入物理输出 B 将 Q 输出(映像)存储区初始化为 零、上一个值或组态的替换值将 PB、PN 和 AS-i 输出设为零 ② 将物理输入的状态复制到 I 存储器 C 将非保持性 M 存储器和数据块初始 化为其初始值,并启用组态的循环 中断事件和时钟事件。 执行启动 OB。 ③ 执行程序循环 OB D 将所有中断事件存储到要在进入 RUN 模式后处理的队列中 ④ 执行自检诊断 E 启用 Q 存储器到物理输出的写入操 作 ⑤ 在扫描周期的任何阶段处理中断和通信 说明 包括 HMI 通信在内的通信不能中断程序循环 OB 以外的其它 OB。 启动过程 只要工作模式从 STOP 切换到 RUN,CPU 就会清除过程映像输入、初始化过程映像输出并处 理启动 OB。通过“启动 OB”中的指令对过程映像输入进行任何的读访问,都只会读取零值, 而不是读取当前物理输入值。因此,要在启动模式下读取物理输入的当前状态,必须执行立 即读取操作。接着,CPU 再执行启动 OB 以及任何相关的 FC 和 FB。如果存在多个启动 OB, 则按照 OB 编号依次执行各 OB,编号*小的 OB 优先执行。 PLC 概念 5.1 用户程序的执行 S7-1200 可编程控制器 70 系统手册, V4.6 11/2022, A5E02486685-AP 每个启动 OB 都包含帮助您确定保持性数据和时钟有效性的启动信息。可以在启动 OB 中编 写指令,以检查这些启动值,从而采取适当的措施。启动 OB 支持以下启动位置: 表格 5-1 启动 OB 支持的启动位置 输入 数据类型 描述 LostRetentiv e Bool 如果保持性数据存储区丢失,该位为真 LostRTC Bool 如果时钟(实时时钟)丢失,该位为真 在启动过程中,CPU 还会执行以下任务: • 在启动阶段,对中断进行排队但不加以处理 • 在启动阶段,不执行任何循环时间监视 • 在启动模式下,可以更改 HSC(High-Speed Counter,高速计数器)、PTO(Pulse Train Output,脉冲串输出)以及 PtP(Point-to-Point Communication,点对点通信)模块的 组态 • 只有在 RUN 模式下才会真正运行 HSC、PTO 和点对点通信模块 执行完启动 OB 后,CPU 将进入 RUN 模式并在连续的扫描周期内处理控制任务。 5.1.2 在 RUN 模式下处理扫描周期 在每个扫描周期中,CPU 都会写入输出、读取输入、执行用户程序、更新通信模块以及响应 用户中断事件和通信请求。 在扫描期间会定期处理通信请求。 以上操作(用户中断事件除外)按先后顺序定期进行处理。 对于已启用的用户中断事件,将 根据优先级按其发生顺序进行处理。对于中断事件,如果适用的话,CPU 将读取输入、执行 OB,然后使用关联的过程映像分区 (PIP) 写入输出。
系统要保证扫描周期在一定的时间段内(即*大循环时间)完成;否则将生成时间错误事件。 • 在每个扫描周期的开始,从过程映像重新获取数字量及模拟量输出的当前值,然后将其 写入到 CPU、SB 和 SM 模块上组态为自动 I/O 更新(默认组态)的物理输出。 通过指令 访问物理输出时,输出过程映像和物理输出本身都将被更新。 • 随后在该扫描周期中,将读取 CPU、SB 和 SM 模块上组态为自动 I/O 更新(默认组态)的 数字量及模拟量输入的当前值,然后将这些值写入过程映像。 通过指令访问物理输入时, 指令将访问物理输入的值,但输入过程映像不会更新。 • 读取输入后,系统将从第一条指令开始执行用户程序,一直执行到*后一条指令。 其中 包括所有的程序循环 OB 及其所有关联的 FC 和 FB。 程序循环 OB 根据 OB 编号依次执行, OB 编号*小的先执行。 在扫描期间会定期处理通信请求,这可能会中断用户程序的执行。 自诊断检查包括定期检查系统和检查 I/O 模块的状态。 中断可能发生在扫描周期的任何阶段,并且由事件驱动。事件发生时,CPU 将中断扫描循环, 并调用被组态用于处理该事件的 OB。 OB 处理完该事件后,CPU 从中断点继续执行用户程序。 5.1.3 组织块 (OB) OB 控制用户程序的执行。CPU 中的特定事件将触发组织块的执行。OB 无法互相调用。FC 或 FB 不能调用 OB。只有发生诊断中断或时间延迟这类事件才能启动 OB 的执行。CPU 按照 OB 对应的优先级对其进行处理,遵从高优先级在前低优先级在后的顺序执行 OB。 参见 事件执行的优先级与排队 (页 83) 5.1.3.1 程序循环 OB 程序循环 OB 在 CPU 处于 RUN 模式时循环执行。主程序块是一种程序循环 OB。您可在此处 放置控制程序的说明和调用其他用户块。您可以拥有多个程序循环 OB,CPU 将按编号顺序 执行这些 OB。主 (OB 1) 是默认程序循环。 PLC 概念 5.1 用户程序的执行 S7-1200 可编程控制器 72 系统手册, V4.6 11/2022, A5E02486685-AP 程序循环事件 程序循环事件在每个程序循环(扫描)期间发生一次在程序循环期间,CPU 写入输出、读取 输入和执行程序循环 OB。程序循环事件是必需的,并且一直启用。可以没有任何程序循环 OB,也可以有多个程序循环 OB。程序循环事件发生后,CPU 将执行编号*小的程序循环 OB (通常为“Main”OB 1)。在程序循环中,CPU 会依次(按编号顺序)执行其它程序循环 OB。 程序循环执行,因此将在以下时刻发生程序循环事件: • 上一个启动 OB 执行结束 • 上一个程序循环 OB 执行结束 表格 5-2 程序循环 OB 的起始信息 输入 数据类型 描述 Initial_Call Bool 初始调用 OB 时为“True” Remanence Bool 保持性数据可用时为“True” 5.1.3.2 启动 OB 启动 OB 在 CPU 的操作模式从 STOP 切换到 RUN 时执行一次,包括处于 RUN 模式时和执行 STOP 到 RUN 切换命令时上电。之后将开始执行主“程序循环”OB。请参见“CPU 的工作模式 (页 68)”中的“开始处理” 5.1.3.3 延时中断 OB 延时中断 OB 在组态的时延后执行。 延时中断事件 将延时中断事件组态为在经过一个指定的延时后发生。延迟时间可通过 SRT_DINT 指令分配。 延时事件负责中断程序循环,以执行相应的延时中断 OB。一个延时事件只可连接一个延时 中断 OB。CPU 支持四个延时事件。 表格 5-3 延时中断 OB 的启动信息 输入 数据类型 说明 Sign Word 传递给 SRT_DINT 调用触发的标识符 PLC 概念 5.1 用户程序的执行 S7-1200 可编程控制器 系统手册, V4.6 11/2022, A5E02486685-AP 73 5.1.3.4 循环中断 OB 循环中断 OB 以指定的时间间隔执行。*多可组态四个循环中断事件,每个循环中断事件对 应一个 OB。 循环中断事件 用户可通过循环中断事件组态中断 OB 在组态的周期时间执行。创建循环中断 OB 时即可组 态初始周期时间。循环事件负责中断程序循环并执行相应的循环中断 OB。请注意,循环中 断事件的优先级比程序循环事件更高。 一个循环事件只可连接一个循环中断 OB。 可为每一个循环中断分配一个相移,从而使循环中断彼此错开一定的相移量执行。例如,如 果有 5 ms 的循环事件和 10 ms 的循环事件,并且这两个事件每 10 毫秒同时发生一次。如 果将 5 ms 的事件相移 1 到 4 ms,将 10 ms 的事件相移 0 ms,则这两个事件不再会同时发生。 默认相位偏移为 0。要更改初始相移,或更改循环事件的循环时间,请执行以下步骤: 1. 在项目树中右键单击循环中断 OB。 2. 从上下文菜单中选择“属性”(Properties)。 3. 单击“循环中断 [OB 30]”(Cyclic interrupt [OB 30]) 对话框中的“循环中断”(Cyclic interrupt), 然后输入新的初始值。 *大相移为 6000 ms(6 秒)或为*大循环时间,选择两者中的较小者。 还可以用 Query 循环中断 (QRY_CINT) 和 Set 循环中断 (SET_CINT) 指令在程序中查询并更改 扫描时间和相移。SET_CINT 指令设置的扫描时间和相移不会在上电循环或切换到 STOP 模式 的过程中保持不变;扫描时间和相移值会在上电循环或切换到 STOP 模式后重新变为初始值。 CPU 共支持四个循环中断事件。 5.1.3.5 硬件中断 OB 硬件中断 OB 在发生相关硬件事件时执行。硬件中断 OB 将中断正常的循环程序执行来响应 硬件事件信号。 硬件中断事件 硬件发生变化时将触发硬件中断事件,例如输入点上的上升沿/下降沿事件或者 HSC(High Speed Counter,高速计数器)事件。S7‑1200 支持为每个硬件中断事件使用一个中断 OB。 可在设备组态中启用硬件事件,并在设备组态中为事件分配 OB,也可在用户程序中通过 ATTACH 指令进行分配。CPU 支持多个硬件中断事件。具体的可用事件由 CPU 型号和输入点 数决定。 硬件中断事件数具有以下限制: