使用指令
编译指示CODESYS
编译指示 (pragma) 是应用程序源代码中用括号括起来的文本。编译指示用于在代码中插入编译器可以执行的特殊语句。这使得编译指示能够影响预编译或编译(代码生成)中一个或多个变量的属性。编译器无法识别的编译指示将被忽略,并视为注释。
编译指示的语句字符串也可以延伸到多行。
有关语法的更多详细信息,请参阅各个CODESYS语用。
对于不同的目的有不同的编译指示(例如:初始化变量、监视变量、将变量添加到符号配置、在编译过程中强制显示消息以及变量在特定条件下的行为)。
重要
必须尊重大写和小写字符。
语用类别
这CODESYS编译指示分为以下几类:
- 编译过程中可以显示自定义消息。 
- 编译和预编译可能会受到影响。为此,可以使用编译指示来实现不同的目的,例如初始化、监控,或向符号配置添加变量。 
- 代码生成可以通过条件语句来控制。例如,变量的行为在某些条件下可能会有所不同。 
- 用户定义的指令 
提示
在特性对话框(编译在“类别”中,您可以声明编译器“定义”,并且可以在编译指示中进行查询。
可能的插入位置
重要
中的语句CODESYS并非 C 预处理器指令的一对一实现。您需要像普通语句一样定位编译指示。您不能在表达式中使用编译指示。
您可以插入一个指令,以便编译器在各个位置进行评估。
- 在 POU 的声明头中 - 您可以在文本编辑器中直接将所需的指令作为单独的行输入,可以作为 POU 的第一行,也可以在变量声明之前输入。 - 在表格视图中,输入指令时会获得支持。点击编辑声明标题命令。在对话框中,单击属性按钮并在输入字段中输入所需的指令。 
- 在全局变量列表中 
条件指令的限制
仅在 POU 的实现中使用编译指示进行条件编译。在声明中,这些编译指示会被忽略,而不会被求值。
请注意以下例外:带有project_defined运算符可以插入到声明中。有关更多信息,请参阅以下内容:IF pragma with project_defined (<global define>)
- 结构化文本(ST) - 在 ST 实现语言中,编译指示属于“语句位置”。有效位置位于实现的开头,另起一行。另一个有效位置位于以分号“ - ;" 或通过以下关键字- END_VAR,- END_IF, 或者- END_WHILE。
- 功能块图(FBD)或梯形图(LD) - 在 FBD/LD/IL 编辑器的实现语言中,指令的位置与标签的位置相同。您可以像输入标签一样输入指令。为此,请选择命令FBD/LD/IL→插入标签。然后,在标签的文本字段中,替换默认文本 - Label:使用所需的编译指示。要使用编译指示和标签,请先指定编译指示,然后再指定标签。
对于条件指令的不正确和正确位置
PROGRAM PRG_ConditionalPragma
VAR
    strTest : STRING := 'b';
    iResult : INT := 0;
END_VAR
不正确
{IF defined(DEFINE_A)}
IF strTest = 'a' THEN
{ELSE}
IF strTest = 'b' THEN
{END_IF}
    iResult := {IF defined(DEFINE_B)} 12; {ELSE} 13; {END_IF}
END_IF
正确的
{IF defined(DEFINE_A)}
IF strTest = 'a' THEN
    {IF defined(DEFINE_B)}
    iResult := 16#A;
    {ELSE}
    iResult := 16#AA;
    {END_IF}
END_IF
{ELSE}
IF strTest = 'b' THEN
    {IF defined(DEFINE_B)}
    iResult := 16#B;
    {ELSE}
    iResult := 16#BB;
    {END_IF}
END_IF
{END_IF}范围
根据指令的类型和内容,它可能会影响以下内容:
- 后续声明 
- 正是下一个语句 
- 所有后续语句,直到被相应的 pragma 取消 
- 所有后续语句,直到同一个指令使用其他参数执行或到达代码末尾。此处的“代码”指的是声明部分、实现部分、全局变量列表和类型声明。因此,当一个指令单独位于声明部分的第一行,且未被其他指令取代或取消时,该指令将影响整个对象。