非安全相关计划(NonSafe PRGs)
从编译器和运行时版本 V3.5.4.0 开始,安全 SIL2 应用程序中的 PRG 也可能包含与安全无关的代码。默认情况下,所有 PRG 都包含与安全相关的代码。这由黄色图标表示 在 POU 的默认图标旁边。

如果满足上述编译器版本和运行时系统版本的要求,则有 特性- PRG 的对话框它自己的选项卡 SIL2 属性 带有复选框 安全相关 PRG, 与财产 包含与安全相关的代码 可以停用 PRG 的。通过上下文菜单命令打开 PRG 的属性对话框 特性.
如果 PRG 不包含与安全相关的代码,也会用灰色符号直观地表示出来 标记在 POU 的标准图标旁边。

使用非安全相关程序的注意事项
以下注释描述了非安全相关程序的推荐使用。此外,必须遵守控制器制造商的手册。
一般的
非安全相关 PRG 主要用于在一般安全关键应用程序中执行单个非安全相关部分功能。
这些非安全相关的 PRG 不得对安全相关的部分产生任何影响。安全数据不受干扰是通过内存保护实现的。
POU 不得插入非安全相关 PRG(例如方法、操作)下方。
非安全相关的 PRG 不得在 POU 池中声明。共享 POU 应在库中进行管理。
数据访问和调用层次结构
本地和全球数据
来自 POU 的本地数据的位置取决于类型:
功能
局部变量在栈中
FB实例
FB 的局部变量位于 FB 实例中。
对于全局数据,可以观察到以下 POU 类型:
GVL(以及 EVL)
全局变量(标准数据类型、FB 实例、DUT)
PRG
全局变量(标准数据类型、FB 实例、DUT)
下表显示了通常允许哪些数据访问:
上下文\访问类型 | 安全相关数据 | 非安全相关数据 | ||
---|---|---|---|---|
读 | 写 | 读 | 写 | |
安全相关代码 | 好的 | 好的 | 好的 | 好的 |
非安全相关代码 | 好的 | 不允许 | 好的 | 好的 |
调用层次结构
使用与安全无关的 PRG(调用这些 POU 或从这些 POU 调用)受到特定限制,因为未经授权的访问可能导致 PLC 处于安全状态。
呼叫/呼叫 | 安全 PRG | 功能(安全可用) | 安全 FB 实例 | 非安全 PRG | 功能(非安全可用) | 非安全 FB 实例 |
---|---|---|---|---|---|---|
安全 PRG | 好的 | 好的 | 好的 | 不好 | 不好 | 不好 |
功能(安全可用) | 好的 | 好的 | 好的 | 不好 | 不好 | 不好 |
安全 FB 实例 | 好的 | 好的 | 好的 | 不好 | 不好 | 不好 |
非安全 PRG | 不好 | 不好 | 不好 | 好的 | 好的 | 好的 |
功能(非安全可用) | 不好 | 不好 | 不好 | 好的 | 好的 | 好的 |
非安全 FB 实例 | 不好 | 不好 | 不好 | 好的 | 好的 | 好的 |
FB 实例通常被认为与安全相关。例外情况如下:
FB 在非安全 PRG 中实例化。
FB 在 EVL 中实例化。
FB 实例通过“属性位置”移动。
FB 声明位于非安全相关库中。
标准库 (Safe) 中的 TON 在 PRG (Safe) 中实例化。
结果:TON 实例位于安全内存中。
标准库 (Safe) 中的 TON 在 NonSafe PRG 中实例化。
结果:TON 实例位于非安全内存中。
Util 库 (NonSafe) 中的 PD 在 PRG (Safe) 中实例化。
结果:PD 实例位于非安全内存中。
重要
不允许在安全 PRG 中使用来自非安全库的 POU。
Util 库 (NonSafe) 中的 PD 在 NonSafe PRG 中实例化。
结果:PD 实例位于非安全内存中。