在大多数情况下,使用 pragma{attribute 'hide'}
隐藏变量和 POU 并不能达到预期效果。相反,您应该使用 pragma{attribute 'conditionalshow'}
。
该pragma可防止在CODESYS 用户界面上显示用其定义的变量和 POU。因此,您可以有意隐藏这些标识符,而不限制访问。这在开发图书馆时非常有用。
受影响的功能:
-
库管理
-
调试
-
输入助理
-
功能 "列出组件"
-
监测
-
符号配置
使用该pragma定义的变量或 POU 既不会在库管理器中显示,也不会在输入助手或 "组件列表 "功能中显示。该 pragma 阻止在符号配置中显示这些被标记的变量。因此,不能将这类变量作为符号导出。这些变量在联机模式下也是不可见的,因此无法监控其值。此外,您不能使用任何调试功能,在检查错误时也得不到任何支持。
语法 :
{attribute 'hide'}
插入位置:对于变量,在变量声明行的上方。对于 POU,在第一行。
如果应用程序开发人员知道隐藏 POU 和变量的确切实例路径,就可以在代码中访问它们。
隐藏变量示例
功能块FB_MyA
包含属性 pragma{attribute 'hide'}
,用于隐藏本地变量xInvisibleIn
。
FUNCTION_BLOCK FB_MyA VAR_INPUT iInA : INT; {attribute 'hide'} xInvisibleIn : BOOL; xInit: BOOL; END_VAR VAR_OUTPUT iOutA : INT; END_VAR VAR iCounter : INT; END_VAR
主程序中定义了两个功能块实例FB_MyA
。
PROGRAM PLC_PRG VAR fbMyA1, fbMyA2 : FB_MyA; xVar2 : BOOL; iVar1 : INT; iVar2 : INT; END_VAR fbMyA1(iInA := 1, xInit := TRUE, xInvisibleIn := TRUE, iOutA => iVar1); fbMyA2(iInA := 1, xInit := TRUE, iOutA => iVar2);
当fbMyA1
的输入值被执行时,输入fbMyA1.
时打开的 "List components "函数(在PLC_PRG
的执行部分)会显示变量iInA
、xInit
和iOutA
,但不会显示隐藏变量xInvisibleIn
。
隐藏式库 POU 示例
FB_A
是HiddenFunctionality
库的一个功能块,默认命名空间为HIDDEN
。要向应用程序开发人员隐藏标识符和 POU 代码,可在 POU 声明的开头使用属性 pragma{attribute 'hide'}
。要以同样的方式隐藏下级 POU(动作、方法、属性和转换),也应以{attribute 'hide'}
开始声明。
{attribute 'hide'} FUNCTION_BLOCK FB_A VAR_INPUT END_VAR VAR_OUTPUT END_VAR VAR iA : INT; iCount : INT; iInvisible : INT; END_VAR {attribute 'hide'} METHOD METH_Count : INT VAR_INPUT END_VAR iCount := iCount + 1; {attribute 'hide'} METHOD METH_Invisible : BOOL VAR_INPUT END_VAR iInvisible := iInvisible + 1; {attribute 'hide'} PROPERTY PUBLIC prop_iA : INT
对于应用程序开发人员来说,所有 POU 都是不可见的。只有知道实例路径,才能使用它们。
PROGRAM PLC_PRG VAR fbHidden : HIDDEN.FB_A; // Hidden function block from library HiddenFunctionality iCounter : INT; END_VAR fbHidden.METH_Invisible(); iCounter := fbHidden.iInvisible;
在联机模式下,不执行监控。

使用 pragmahide_all_locals
可以隐藏 POU 的所有局部变量。