CPU 提供了以下用于存储用户程序、数据和组态的存储区: • 装载存储器,用于非易失性地存储用户程序、数据和组态。将项目下载到 CPU 后,CPU 会 先将程序存储在装载存储区中。该存储区位于 SIMATIC 存储卡(如存在)或 CPU 中。CPU 能够在断电后继续保持该非易失性存储区。存储卡支持的存储空间比 CPU 内置的存储空 间更大。 • 工作存储器是易失性存储器,用于在执行用户程序时存储用户项目的某些内容。CPU 会 将一些项目内容从装载存储器复制到工作存储器中。该易失性存储区将在断电后丢失,而 在恢复供电时由 CPU 恢复。 • 保持性存储器,用于非易失性地存储限量的工作存储器值。断电过程中,CPU 使用保持 性存储区存储所选用户存储单元的值。如果发生断电或掉电,CPU 将在上电时恢复这些 保持性值。 要显示编译程序块的存储器使用情况,请右键单击 STEP 7 项目树中“程序块”(Program blocks) 文件夹中的块,然后从上下文菜单中选择“属性”(Properties)。“编译属性” (Compiliation properties) 显示了编译块的装载存储器和工作存储器。 要显示在线 CPU 的存储器使用情况,请双击 STEP 7 中的“在线和诊断”(online and diagnostics),展开“诊断”(Diagnostics),然后选择“存储器”(Memory)。 PLC 概念 5.1 用户程序的执行 S7-1200 可编程控制器 90 系统手册, V4.6 11/2022, A5E02486685-AP 保持性存储器 将某些数据标记为保持性数据可以避免发生电源故障后造成数据丢失。该 CPU 允许您将以 下数据配置为保持性数据: • 位存储器 (M):可以在 PLC 变量表或分配列表中定义位存储器的保持性存储器的大小。保 持性位存储器总是从 MB0 开始向上连续贯穿指定的字节数。通过 PLC 变量表或在分配列 表中通过单击“保持性”(Retain) 工具栏图标指定该值。输入从 MB0 开始保留的 M 字节 个数。 注:对于任何块,都可通过在“程序块”(Program Blocks) 文件夹中选择块,然后选择“工 具 > 分配列表”(Tools > Assignment list) 菜单命令来显示分配列表。 • 函数块 (FB) 的变量:如果 FB 为“优化块访问”(Optimized block access) 类型,则该 FB 的 接口编辑器将包含“保持”(Retain) 列。在该列中,可以单独为每个变量选择“保持” (Retain)、“非保持”(Non-retain) 或“在 IDB 中设置”(Set in IDB)。将此类 FB 置于程序中 时,和该 FB 对应的实例 DB 也将包含此“保持”(Retain) 列。在优化的 FB 中,如果在变量的 “保持性”(Retain) 选项中选择“在 IDB 中设置”(Set in IDB)(在背景数据块中设置),那 么只能更改背景 DB 接口编辑器中某个变量的保持性状态。 如果 FB 非“优化块访问”(Optimized block access) 类型,则该 FB 的接口编辑器将不包含 “保持”(Retain) 列。将此类 FB 置于程序中时,和该 FB 对应的实例 DB 仍将包含一个可 进行编辑的“保持”(Retain) 列。如果是这种情况,在选择所有变量时为任意变量结果选择 “保持”(Retain) 选项。同样,在取消选择所有变量时为任意变量结果取消选择该选项。 要查看或修改 FB 是否已优化,打开 FB 属性然后选则属性。 • 全局数据块的变量:如果为数据块属性的特性选择“优化块访问”(Optimized block access),则可将各变量设置为保持性或非保持性。如果未选择“优化块访问”(Optimized block access),则所有数据块变量具有相同的状态。变量均为保持性,或均为非保持性。 对于下载到固件版本为 V4.5 或更高版本的 PLC 中的 V4.5 或更高版本的项目,该 CPU *多 支持 14336 字节的保持性数据。对于 V4.x 项目,保持数据为 10240 字节。在 PLC 变量表 或分配列表中,单击“保持”(Retain) 工具栏图标,查看可用的存储空间。这是为 M 存储器 指定保持范围的位置,第二个箭头会指示可用于 M 和 DB 的总剩余存储空间。请注意,要保 证该值的准确性,必须编译带有保持性变量的所有数据块。 说明 下载程序不会清除或更改保持性存储器中的现有值。如果要在下载之前清除保持性存储器, 请在下载程序前将 CPU 复位为出厂设定。
系统和时钟存储器 使用 CPU 属性来启用“系统存储器”和“时钟存储器”的字节。程序逻辑可通过这些函数 的变量名称来引用它们的各个位。 • 可以将 M 存储器的一个字节分配给系统存储器。该系统存储器字节提供了以下四个位, 用户程序可通过以下变量名称引用这四个位: – 第一个周期:(变量名称“FirstScan”)在启动 OB 完成后的第一次扫描期间内,该位设 置为 1。(执行了第一次扫描后,“首次扫描”位将设置为 0。) – 诊断状态变化:(变量名:“DiagStatusUpdate”)在 CPU 记录诊断事件后的第一次扫 描期间内,该位设置为 1。由于直到首次程序循环 OB 执行结束,CPU 才能置位 “DiagStatusUpdate”位,因此用户程序无法检测在启动 OB 执行期间或首次程序循环 OB 执行期间是否发生过诊断更改。 – 始终为 1(高)(Always 1 (high)):(变量名称“AlwaysTRUE”),该位始终设置为 1。 – 始终为 0(低)(Always 0 (low)):(变量名称“AlwaysFALSE”),该位始终设置为 0。 • 可以将 M 存储器的一个字节分配给时钟存储器。被组态为时钟存储器的字节中的每一位 都可生成方波脉冲。时钟存储器字节提供了 8 种不同的频率,其范围从 0.5 Hz(慢)到 10 Hz(快)。这些位可作为控制位(尤其在与沿指令结合使用时),用于在用户程序中 周期性触发动作。 CPU 在从 STOP 模式切换到 STARTUP 模式时初始化这些字节。时钟存储器的位在 STARTUP 和 RUN 模式下会随 CPU 时钟同步变化。 小心 覆盖系统存储器位或时钟存储器位时的风险 改写系统存储器或时钟存储器的各个位可能会破坏这些功能中的数据,同时还可能导致用 户程序错误运行,进而造成设备损坏和人员伤害。 因为时钟存储器和系统存储器都不是预留的 M 存储器,所以指令或通信可以写入这些单元 并破坏其中的数据。 避免向这些单元写入数据以确保这些功能正常运行,并且应始终为过程或机器使用紧急停 止电路。 系统存储器位具有特定含义,如下表所示: PLC 概念 5.1 用户程序的执行 S7-1200 可编程控制器 92 系统手册, V4.6 11/2022, A5E02486685-AP 表格 5-18 系统存储器 7 6 5 4 3 2 1 0 保留 值 0 始终熄灭 值 0 常开 值 1 诊断状态指示 • 1:变化 • 0:无更改 首次扫描指示 • 1:启动后首次扫描 • 0:不是首次扫描 时钟存储器组态了一个字节,该字节的各个位分别按固定的时间间隔循环启用和禁用。每个 时钟位都会在相应的 M 存储器位产生一个方波脉冲。这些位可作为控制位(尤其在与沿指 令结合使用时),用于在用户代码中周期性触发动作。 PLC 概念 5.1 用户程序的执行 S7-1200 可编程控制器 系统手册, V4.6 11/2022, A5E02486685-AP 93 表格 5-19 时钟存储器 位号 7 6 5 4 3 2 1 0 变量名称 周期 (s) 2.0 1.6 1.0 0.8 0.5 0.4 0.2 0.1 频率 (Hz) 0.5 0.625 1 1.25 2 2.5 5 10 由于时钟存储器与 CPU 周期异步运行,因此,时钟存储器的状态可能会在一个长周期中发生多 次改变。 5.1.6 诊断缓冲区 CPU 提供了一个诊断缓冲区,其中包含的每个条目对应一个诊断事件。每个条目都包含了事 件发生的日期和时间、事件类别及事件描述。条目按时间顺序显示,*新发生的事件位于* 上面。此日志*多可提供 50 个*近发生的事件。日志填满后,新事件将替换日志中*早的 事件。如果 CPU 断电,诊断缓冲区将被保留。 诊断缓冲区中记录以下事件类型: • 所有系统诊断事件;例如,CPU 错误和模块错误 • CPU 的每次状态切换(每次上电、每次切换到 STOP 模式、每次切换到 RUN 模式) 必须在线访问诊断缓冲区(页1218)。从“在线和诊断”(online & diagnostics) 视图中,在“诊 断 > 诊断缓冲区”(Diagnostics > Diagnostics buffer) 下查找诊断缓冲区。 减少安全诊断事件的数量 部分安全事件会在诊断缓冲区中生成重复条目。这些消息可能会堵塞诊断缓冲区,从而可能 阻碍其它事件消息。您可以组态 PLC 限定安全事件的诊断消息数量。可以在 CPU 的设备组态 (其中可以抑制循环消息)中基于时间间隔进行选择: 如果选择在时间间隔内总结安全事件,您可以将时间间隔的单位设置为秒、分钟或小时,数 值范围设置为 1 ...255。 PLC 概念 5.1 用户程序的执行