Skip to main content

使用指令

编译指示CODESYS

编译指示 (pragma) 是应用程序源代码中用括号括起来的文本。编译指示用于在代码中插入编译器可以执行的特殊语句。这使得编译指示能够影响预编译或编译(代码生成)中一个或多个变量的属性。编译器无法识别的编译指示将被忽略,并视为注释。

编译指示的语句字符串也可以延伸到多行。

有关语法的更多详细信息,请参阅各个CODESYS语用。

对于不同的目的有不同的编译指示(例如:初始化变量、监视变量、将变量添加到符号配置、在编译过程中强制显示消息以及变量在特定条件下的行为)。

重要

必须尊重大写和小写字符。

语用类别

CODESYS编译指示分为以下几类:

  • 消息指令

    编译过程中可以显示自定义消息。

  • 属性指令

    编译和预编译可能会受到影响。为此,可以使用编译指示来实现不同的目的,例如初始化、监控,或向符号配置添加变量。

  • 条件指令

    代码生成可以通过条件语句来控制。例如,变量的行为在某些条件下可能会有所不同。

  • 区域编译指示

  • 测试 POU 中的指令

  • 用户定义的指令

提示

特性对话框(编译在“类别”中,您可以声明编译器“定义”,并且可以在编译指示中进行查询。

可能的插入位置

重要

中的语句CODESYS并非 C 预处理器指令的一对一实现。您需要像普通语句一样定位编译指示。您不能在表达式中使用编译指示。

您可以插入一个指令,以便编译器在各个位置进行评估。

. 在声明中
  • 在 POU 的声明头中

    您可以在文本编辑器中直接将所需的指令作为单独的行输入,可以作为 POU 的第一行,也可以在变量声明之前输入。

    在表格视图中,输入指令时会获得支持。点击编辑声明标题命令。在对话框中,单击属性按钮并在输入字段中输入所需的指令。

  • 在全局变量列表中

条件指令的限制

仅在 POU 的实现中使用编译指示进行条件编译。在声明中,这些编译指示会被忽略,而不会被求值。

请注意以下例外:带有project_defined运算符可以插入到声明中。有关更多信息,请参阅以下内容:IF pragma with project_defined (<global define>)

. 在 POU 的实施中
  • 结构化文本(ST)

    在 ST 实现语言中,编译指示属于“语句位置”。有效位置位于实现的开头,另起一行。另一个有效位置位于以分号“; " 或通过以下关键字END_VAREND_IF, 或者END_WHILE

  • 功能块图(FBD)或梯形图(LD)

    在 FBD/LD/IL 编辑器的实现语言中,指令的位置与标签的位置相同。您可以像输入标签一样输入指令。为此,请选择命令FBD/LD/IL插入标签。然后,在标签的文本字段中,替换默认文本Label:使用所需的编译指示。要使用编译指示和标签,请先指定编译指示,然后再指定标签。

17. 例子

对于条件指令的不正确和正确位置

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 取消

  • 所有后续语句,直到同一个指令使用其他参数执行或到达代码末尾。此处的“代码”指的是声明部分、实现部分、全局变量列表和类型声明。因此,当一个指令单独位于声明部分的第一行,且未被其他指令取代或取消时,该指令将影响整个对象。