我们知道,PLC中其实运行着两类程序:操作系统和用户程序。操作系统预留各种接口,通过这些接口来调用用户程序。对于西门子PLC而言,这些接口被称为组织块(OrganizationBlock),简称为OB。组织块有很多类型,大体上可以分为两个大类:程序循环组织块和中断组织块(后者又包括循环中断、硬件中断、日期时间中断等等)。组织块具有不同的优先级,程序循环组织块的优先级低。
对于西门子标准型CPU模块,它的用户程序被称为标准程序。标准程序的称谓是为了与故障安全型程序进行区别。用户为了处理标准模块的信号(通信等)而编写的程序都属于标准程序。标准程序必须直接或间接的被程序循环组织块调用才能被执行(中断程序除外)。对于S7-300/400系列CPU,程序循环组织块就是指OB1;对于S7-1200/1500系列CPU,除了OB1外,用户可以根据需要添加多个程序循环组织块,操作系统会根据程序循环组织块的编号从小到大依次调用。一遍,程序循环组织块是一种优先级低的组织块,其它组织块可以中断它并优先执行。
故障安全程序是为了处理故障安全信号而编写的程序,只有故障安全型CPU才能执行故障安全程序。西门子故障安全型CPU既可以执行标准程序,也可以执行故障安全程序。通常(注意是通常),用户编写的故障安全型程序是在另一种组织块——循环中断组织块(CyclicInterruptOB)中调用的。官方称为“循环中断组织块”,但我觉得称为“周期性中断组织块”更恰当一些。这种组织块可以产生周期性中断,中断的周期可以根据需要自己设置。
在博途开发环境中,当你组态了故障安全型CPU时,默认情况下,左侧项目树中会有一个“安全管理(Safety Administration)”的选项,并自动添加了三个模块:FOB_RTG1[OB123]、Main_Safety_RTG1[FB1]和Main_Safety_RTG1_DB[DB1],如下图所示:
安全管理可以查看安全程序的状态、安全签名、安全功能块、数据类型、FlexibleF-Link通信等,重要的功能是设置安全运行组,如下图所示:
安全运行组(F-runtime group)由安全组织块(F-OB)、主安全程序块(MainF-Block)和主安全程序块的背景数据块构成,如下图所示:
对于S7-1200的F-CPU,安全组织块为循环中断组织块,可以根据需要设置其中断时间及优先级。对于S7-1500的F-CPU,安全组织块可以为循环中断组织块(默认)、程序循环组织块或者等时同步中断组织块。默认情况下,等时同步中断组织块的优先级高,是循环中断组织块。如果有必须可以修改其优先级,但不允许它们的优先级比程序循环组织块低或相同。
安全组织块调用主安全程序块,用户编写的安全程序需要在主安全程序块中调用才能被执行。
S7-1200的F-CPU只支持一个安全运行组,S7-1500的F-CPU多支持两个安全运行组。F-CPU通过F-OB调用主安全程序块,再通过主安全程序块调用用户编写的其它安全程序是西门子故障安全程序的基本架构。