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