可以将功能块的实例分配到保持区域,即功能块的变量的所有条件在电源故障后保持原样。在此情况下,必须在POU头中的类别VAR_RETAIN或VAR_EXTERNAL_RETAIN下输入变量。对于VAR_EXTERNAL_RETAIN,FB实例必须已在全局变量列表中声明为VAR_GLOBAL_RETAIN。
如果类别VAR_RETAIN或VAR_EXTERNAL_RETAIN用于实例,则编译器将保持区域中的地址分配给类别VAR、VAR_INPUT、VAR_OUTPUT或VAR_IN_OUT的非保持变量,这些变量仅在下载程序后初始化。类别VAR的子实例被视为类别VAR_RETAIN的子实例。类别VAR_RETAIN、VAR_OUTPUT_RETAIN、VAR_EXTERNAL或VAR_EXTERNAL_RETAIN的子实例或其他变量的地址被分配给类别VAR或VAR_EXTERNAL的实例。类别VAR_CONSTANT和VAR_EXTERNAL_CONSTANT的变量值在程序代码中作为常量值输入。
如果类别VAR或VAR_EXTERNAL用于实例,功能块中的变量或子实例的声明确定其为保持(VAR_RETAIN)或为不保持(VAR)。
程序Prog的POU头
程序Prog访问功能块FB1两次:
功能块FB1的POU头
功能块FB1的POU头有以下项目。功能块FB1也利用功能块FB2的两个实例。
功能块FB2的POU头
功能块FB2的POU头有以下项目。
程序Prog的内存分配: