两个 F 运行组中安全程序的结构可以将安全程序分为两个 F运行组。通过让部分安全程序(一个 F运行组)以较高的优先级等级运行,可加快安全回路的运行速度并缩短响应时间。软件单元(安全单元)(S7-1500)中的安全程序简介如果想要将软件单元的优势也用于安全程序(例如独立编译和加载),可以使用安全单元。随后,安全程序的块仅位于安全单元中,不能再直接在F-CPU 下方的“程序块”(Programblocks) 文件夹中创建。创建 F-CPU 之前,必须为安全单元进行决策。创建F-CPU 后,对该 F-CPU 的决策不可再更改。要求• F-CPU S7-1500(固件版本 V2.6 及更高版本)•已在“选项/设置/STEP 7 Safety”(Options/Settings/STEP 7 Safety)下选中“在“安全单元”环境中管理安全程序”(Manages safety program in 'Safety Units'environment)。• F-CPU 是新创建的。编程5.1 编程概述122 编程和操作手册, 11/2022,A5E33215622-AM安全单元中的安全程序创建新的 F-CPU之后,安全程序位于安全单元中。要在安全程序与标准用户程序之间进行数据交换,请使用在安全单元中创建为全局标准DB 的传输数据块 (页206)。有关软件单元的信息,请参见 STEP 7 帮助中“使用软件单元”下的内容。特性• 不能将安全单元存储在库中。•不能发布安全单元中的系统块。编程5.1 编程概述编程和操作手册, 11/2022, A5E33215622-AM 1235.1.4故障安全块F 运行组的 F 块下表列出了在 F 运行组中使用的 F 块:F 块 功能S7-300/400F-CPUS7-1200/1500F-CPU主安全块 编写安全程序的第一步是编写主安全块。S7-300/400F-CPU 中的主安全块是 F-FC 或 F-FB(带背景 DB),通过标准用户程序中的标准块(建议:OB35)调用。S7-1200/1500 F-CPU 中的主安全块是 F-FC 或 F-FB(带背景 DB),通过 F-OB进行调用。F-FB/F-FC 这两个块均位于主安全块以及其它 F-FB 和 F-FC 中,且可以执行下列操作:• 使用 FBD 或LAD 中适用于 F 块的指令对安全程序进行编程。• 调用其它已创建的 F-FB/F-FC 以构建安全程序• 从项目库或全局库插入 F块F-DB 可以在整个安全程序中读取和写入的可选故障安全数据块。 F-I/O DB 组态时,为每个 F-I/O 自动生成一个F-I/O DB。您可以或必须访问与F-I/O 访问相关的 F-I/O DB 的变量。F 共享 DB F 共享 DB是一个故障安全数据块,它包含安全程序的所有共享数据和 F 系统所需的其它信息。F 运行组信息DBF 运行组信息 DB 随 F运行组一起创建。F 运行组信息 DB 包含与 F 运行组相关的信息以及整个安全程序的相关信息。—说明不得在主安全块/F-FB/F-FC中插入“系统块”(System blocks) 文件夹中的 F 系统块。安全程序的指令在“指令”(Instructions)任务卡上,提供了适用于 F-CPU的指令以及可用于编程安全程序的指令。还提供了标准用户程序指令,例如位逻辑运算、数学函数、程序控制函数和字逻辑运算。还包含一些具有安全功能的指令(如,双手操作监视、差异分析、暂时失效、急停/紧急关断、安全门监视和反馈回路监视等功能)和F-CPU 间进行安全相关通信的指令。更多信息有关安全程序指令的详细说明,请参见指令概述 (页417)。使用指令版本与标准用户程序的指令相同,安全程序指令的版本可能不同。有关指令版本的更多信息,请参见 STEP 7帮助中的“指令版本的基本信息”。有关安全程序中各指令版本间不同之处的详细信息,请参见这些指令的相关章节。说明注意事项:•在任务卡“指令”(Instructions)中,如果安全程序中所用的指令版本更改后,没有对应的同功能版本,则在重新编译安全程序后,安全程序的功能可能会发生变化。除了使用该指令的F 块签名之外,安全程序的集体 F 签名和集体 F-SW 签名也将改变。此时,可能需要执行一次验收测试 (页 401)。•(S7-300/400) 在安全程序中使用具有专有技术保护的 F块,该安全程序使用的指令与在任务卡“指令”(Instructions) 中设置的版本不同,如果在编译该程序时未输入具有专有技术保护F 块的密码,则版本将自动调整为任务卡“指令”(Instructions)中所设置的版本,前提是指令版本的接口相同。如果指令各版本的功能不同,则专有技术保护 F块功能可能发生变更,签名始终会发生变更。编程语言FBD/LAD 的限制LAD 和 FBD 编程语言通常情况下,F-CPU中的用户程序由标准用户程序和安全程序组成。标准用户程序是使用标准编程语言(例如,SCL、STL、LAD 或FBD)创建的。对于安全程序,LAD 或 FBD的使用在指令及适用的数据类型和操作数区域方面存在一些限制。另请注意各个指令的限制。支持的指令可用指令取决于所用的F-CPU。有关支持的指令,请参见指令说明(从 STEP 7 Safety V18指令 (页 417)开始)。说明不能连接使能输入EN 与使能输出 ENO。例外:(S7-1200,S7-1500)以下指令可以通过连接使能输出 ENO 来编写溢出检测程序:•ADD:加 (STEP 7 Safety V18) (页 555)• SUB:减 (STEP 7 Safety V18) (页558)• MUL:乘 (STEP 7 Safety V18) (页 561)• DIV:除 (STEP 7 Safety V18)(页 564)• NEG:求二进制补码 (STEP 7 Safety V18) (页 567)• ABS:形成juedui值(STEP 7 Safety V18)(S7-1200、S7-1500) (页 571)• CONVERT:转换值 (STEP 7Safety V18) (页 584)编程5.1 编程概述126 编程和操作手册, 11/2022,A5E33215622-AM支持的数据类型和参数类型仅支持以下数据类型:• BOOL• INT• WORD• DINT• DWORD(S7-300、S7-400)• TIME• ARRAY、 ARRAY[*],使用指令 RD_ARRAY_I:读取 INT F数组中的值 (STEP 7 SafetyV18) (S7-1500) (页 574) 和 RD_ARRAY_DI:读取 DINT F数组中的值 (STEP 7 SafetyV18) (S7-1500) (页 577) 时。限制:– ARRAY 仅在 F 全局 DB中– ARRAY 限制:0 到Zui大 10000– ARRAY[*] 仅作为 F-FC 和 F-FB 中的输入输出参数 (InOut)–不允许 ARRAY of UDT– 不允许 ARRAY of Bool– 不允许 ARRAY of Word– 不允许 ARRAYof Time• F 型 PLC 数据类型 (UDT)(S7-1200 和S7-1500)说明如果指令结果超出该数据类型所允许的范围,则该 F-CPU 会切换到 STOP 状态。在F-CPU的诊断缓冲区中输入引起该诊断事件的原因。必须确保在创建程序时遵守数据类型所允许的范围,或选择一个匹配的数据类型,或使用ENO 输出。注意各指令描述。不允许的数据类型和参数类型以下为不允许的数据类型和参数类型:•“支持的数据类型和参数类型”部分中未列出的所有类型(例如,BYTE、REAL)• 复杂数据类型(例如,STRING, ARRAY(S7-300、S7-400、S7-1200),STRUCT, PLC数据类型 (UDT) (S7-300, S7-400))•参数类型(例如,BLOCK_FB、BLOCK_DB 和 ANY)支持的操作数区域F-CPU 的系统存储器被分为与标准 CPU的系统存储器相同的操作数区域。您可以在安全程序中访问下表列出的操作数区域。表格 5- 1 支持的操作数区域操作数区域说明输入的过程映像• F-I/O 的 只能对 F-I/O 输入通道进行只读访问。不能传送至 F-FB 或 F-FC 的IN_OUT 参数。F-I/O 输入的过程映像将在主安全块启动前更新。• 标准 I/O 的 标准 I/O的输入通道仅可为只读通道。不能传送至 F-FB 或 F-FC 的 IN_OUT参数。还需要进行过程特定的有效性检查。有关标准 I/O 的输入过程映像的更新时间,请参见 STEP 7 帮助。操作数区域说明输出的过程映像• F-I/O 的 只能对 F-I/O 输出通道进行只写访问。不能传送至 F-FB 或 F-FC 的IN_OUT 参数。在安全程序中,将计算 F-I/O 的输出值,并将其存储在输出过程映像中。F-I/O输出过程映像应在主安全块结束后更新。• 标准 I/O 的 标准 I/O 的输出通道为只写通道。不能传送至 F-FB 或 F-FC的 IN_OUT 参数。在安全程序中,还将计算标准 I/O 的输出值,并根据需要将其存储在输出过程映像中。有关标准 I/O的输出过程映像的更新时间,请参见 STEP 7 帮助。位存储器该区域用于与标准用户程序进行数据交换。读取访问需要进行过程特定的有效性检查。可在安全程序中读或写特殊位存储器元素。不能传送至F-FB 或 F-FC 的 IN_OUT 参数。请注意,位存储器只能用于连接标准用户程序和安全程序;不能将其用作 F数据的缓冲区。数据块• F-DB 数据块存储程序信息。可将这些数据块定义为全局数据块,以使所有 F-FB、F-FC或主安全块均可对其进行访问,也可以将其指定给特定的 F-FB 或主安全块(背景 DB)。共享数据块的变量只能从一个 F运行组访问,背景数据块的变量只能从调用相应 F-FB/指令的 F 运行组来访问。• DB该区域用于与标准用户程序进行数据交换。读取访问需要进行过程特定的有效性检查。对于数据块的变量,可以在安全程序中进行读取访问或写访问。不能传送至F-FB 或 F-FC 的 IN_OUT 参数。请注意,DB 的变量只能用于在标准用户程序和安全程序间传送数据;不能将 DB 用作 F数据的缓冲区。操作数区域 说明临时本地数据 执行该 F 块时,该存储区用于存储块(或 F块)的临时变量。本地数据栈还提供用于传送块参数和保存中间结果的存储器。数据类型转换与标准用户程序相同,安全程序中的数据类型转换有两种情况。•隐式转换隐式转换的执行过程与在标准用户程序中的执行过程相同,但存在以下限制:源数据类型的位长度必须与目标数据类型的位长度相匹配。•显式转换在执行实际指令之前,使用的是显式转换指令 (页584)。片段访问安全程序不支持片段访问。不允许的操作数区域不允许通过未在上表中列出的单元进行访问。这同样适用于对未列出的操作数区域的访问,尤其是:•自动添加的数据块例外:F-I/O DB (页 177) 以及 F 共享 DB(S7-300、S7-400) (页 164)或 F运行组信息DB(S7-1200 和 S7-1500) (页 165)中的某些变量• I/O 区:输入• I/O区:输出布尔常量“0”或“FALSE”以及“1”或“TRUE”(S7-300 和S7-400)布尔常量“0”或“FALSE”以及“1”或“TRUE”可供 S7-300/400 F-CPU 用作 F 全局 DB中的“变量”、“RLO0”和“RLO1”。可通过完全资格的 DB 访问("F_GLOBDB".RLO0或"F_GLOBDB".RLO1)访问它们。布尔常量“0”或“FALSE”以及“1”或“TRUE”(S7-1200 和S7-1500)布尔常量“0”或“FALSE”以及“1”或“TRUE”可供 S7-1200/1500 F-CPU在调用块时分配参数。可以直接使用 FBD 或 LAD 将其输入到相应的块输入中。