TwinCAT3 中的条件编译指示
Conditional pragmas in TwinCAT3
我想到了使用 pragma 使 PLC 代码易于根据特定机器的要求在机器之间重新配置的想法(它们非常相似,但仍然需要一些工作来实现)每个新项目)。整个机器可以包含N个单元,那么如果新项目不需要它,你就可以删除某些部分。我的想法是:
VAR_GLOBAL
{attribute 'machinePart1'}
{attribute 'machinePart2'}
//{attribute 'machinePart3'} Lets say machine does not use attribute machinePart3
machineParts : BOOL; // dummy variable to add attributes
END_VAR
在 PLC 代码中,我会对需要或不需要某些部分的代码部分使用条件编译指示 - 您可以通过注释掉不必要的属性来确定存在哪个属性。
在 PLC 中,不存在的机器部件将被忽略,如下所示:
{IF hasattribute (variable: machineParts, 'machinePart3')}
//this code will not be executed
{END_IF}
{IF hasattribute (variable: machineParts, 'machinePart2')}
//this code will be executed
{END_IF}
{IF hasattribute (variable: machineParts, 'machinePart1')}
//this code will be executed
{END_IF}
所以,我的问题是 - 这是使 PLC 代码尽可能易于配置的有效方法吗?它会影响 efficency/CPU 时间吗?我没有深入研究这个,但我会假设代码是编译过的,并且对于结果为假的任何条件 pragma,代码没有被编译,因此在下载时不会出现在 PLC 本身上。
我会将其应用于机器零件和 PLC 代码的结构exectuion/function 块实例创建。
Beckhoff 已经为您的需求提供了一个解决方案,称为变体管理:
这不会影响性能,因为编译后的代码仅包含您选择的变体。
Jakob 是对的,已经有项目级别的变体管理。 link 描述了所有必要的步骤。这里唯一要补充的是来自已经多次摔倒在他脸上的人的一点建议。请小心或不要使用组功能 (<=TC4024.20)。从我的角度来看,这种行为真的很奇怪而且很容易出错。
我想到了使用 pragma 使 PLC 代码易于根据特定机器的要求在机器之间重新配置的想法(它们非常相似,但仍然需要一些工作来实现)每个新项目)。整个机器可以包含N个单元,那么如果新项目不需要它,你就可以删除某些部分。我的想法是:
VAR_GLOBAL
{attribute 'machinePart1'}
{attribute 'machinePart2'}
//{attribute 'machinePart3'} Lets say machine does not use attribute machinePart3
machineParts : BOOL; // dummy variable to add attributes
END_VAR
在 PLC 代码中,我会对需要或不需要某些部分的代码部分使用条件编译指示 - 您可以通过注释掉不必要的属性来确定存在哪个属性。
在 PLC 中,不存在的机器部件将被忽略,如下所示:
{IF hasattribute (variable: machineParts, 'machinePart3')}
//this code will not be executed
{END_IF}
{IF hasattribute (variable: machineParts, 'machinePart2')}
//this code will be executed
{END_IF}
{IF hasattribute (variable: machineParts, 'machinePart1')}
//this code will be executed
{END_IF}
所以,我的问题是 - 这是使 PLC 代码尽可能易于配置的有效方法吗?它会影响 efficency/CPU 时间吗?我没有深入研究这个,但我会假设代码是编译过的,并且对于结果为假的任何条件 pragma,代码没有被编译,因此在下载时不会出现在 PLC 本身上。
我会将其应用于机器零件和 PLC 代码的结构exectuion/function 块实例创建。
Beckhoff 已经为您的需求提供了一个解决方案,称为变体管理:
这不会影响性能,因为编译后的代码仅包含您选择的变体。
Jakob 是对的,已经有项目级别的变体管理。 link 描述了所有必要的步骤。这里唯一要补充的是来自已经多次摔倒在他脸上的人的一点建议。请小心或不要使用组功能 (<=TC4024.20)。从我的角度来看,这种行为真的很奇怪而且很容易出错。