IL 中的修饰符和操作符

修饰符

您可使用指令列表中的以下修饰符。

C

使用 JMP, CAL, RET

仅当前面的表达式的结果为 TRUE 时才会执行指令。

N

使用 JMPC, CALC, RETC

仅当前面的表达式的结果为 FALSE 时才会执行指令。

N

使用根据下面操作符表格(修饰符列中的 N)的操作符

将对操作数(并非累加器的操作数)取反。

(

使用根据下面操作符表格(修饰符列中的 ((左括号))的操作符

用于复杂操作数。有关详细信息,请参阅复杂操作数用例列表

注: 一般来讲,不建议在 STNSR 操作符之后直接使用语句 CALC (/RETC/JMPC),因为这些指令可任意修改累加器的值,从而可能导致难以发现的编程错误。

操作符

表格显示哪些操作符可结合指定的修饰符使用。

累加器存储得自前面的操作的当前值。

操作符

修饰符

含义

示例

LD

N

将操作数的(取反)值载入累加器。

LD iVar

ST

N

将累加器的(取反)内容存储到操作数变量中。

ST iErg

S

当累加器的内容为 TRUE 时,将操作数(BOOL 类型)设置为 TRUE。

S bVar1

R

当累加器的内容为 TRUE 时,将操作数(BOOL 类型)设置为 FALSE。

R bVar1

AND

N,(

累加器和(取反)操作数的按位 AND。

AND bVar2

OR

N,(

累加器和(取反)操作数的按位 OR。

OR xVar

XOR

N,(

累加器和(取反)操作数的按位互斥 OR。

XOR N, (bVar1,bVar2)

NOT

累加器内容的按位取反。

ADD

(

添加累加器和操作数,将结果复制到累加器。

ADD iVar1

SUB

(

减去累加器和操作数,将结果复制到累加器。

SUB iVar2

MUL

(

倍增累加器和操作数,将结果复制到累加器。

MUL iVar2

DIV

(

等分累加器和操作数,将结果复制到累加器。

DIV 44

GT

(

检查累加器是否大于操作数,将结果 (BOOL) 复制到累加器;>

GT 23

GE

(

检查累加器是否大于或等于操作数,将结果 (BOOL) 复制到累加器;>=

GE iVar2

EQ

(

检查累加器是否等于操作数,将结果 (BOOL) 复制到累加器;=

EQ iVar2

NE

(

检查累加器是否不等于操作数,将结果 (BOOL) 复制到累加器;<>

NE iVar1

LE

(

检查累加器是否小于或等于操作数,将结果 (BOOL) 复制到累加器;<=

LE 5

LT

(

检查累加器是否小于操作数,将结果 (BOOL) 复制到累加器;<

LT cVar1

JMP

C, CN

无条件(有条件)跳转至标签

  • JMP = 无条件跳转

  • JMPC = 有条件跳转(如果累加器为 TRUE)

  • JMPCN = 有条件跳转(如果累加器为 FALSE)

JMP next

CAL

C, CN

无条件(有条件)调用 PROGRAM 或 FUNCTION_BLOCK

  • CAL = 无条件调用

  • CALC = 有条件调用(如果累加器为 TRUE)

  • CALCN = 有条件调用(如果累加器为 FALSE)

CAL prog1

RET

C, CN

无条件(有条件)返回 POU 并跳转回调用 POU

  • RET = 无条件返回

  • RETC = 有条件返回(如果累加器为 TRUE)

  • RETCN = 有条件返回(如果累加器为 FALSE)

RET

)

计算延迟操作

另请参阅 IEC 操作符在 IL 编辑器中操作,了解如何使用和处理多个操作数、复杂操作数、功能/方法/功能块/程序/操作调用和跳转。

示例

使用某些修饰符的示例 IL 程序:

LD      TRUE        load TRUE to accumulator
ANDN    bVar1       execute AND with negative value of bVar1
JMPC    m1         if accum. is TRUE, jump to label "m1"
LDN     bVar2      store negated value of bVar2...
ST      bRes       ... in bRes
___________________________________________________________

m1:
LD      bVar2      store value of bVar2...
ST      bRes      ... in bRes

使用操作数

表中列出了操作数的用例:

用例

描述

示例

为一个操作符使用多个操作数

选项

  • 在第二列中以连续的行输入操作数,并用逗号分隔。

  • 在连续的行中重复操作符。

  • 选项 1:

    LD     2
    ADD    3,
           4,
           6
    ST     iVAR
  • 选项 2:

    LD     2
    ADD    3
    ADD    4
    ADD    6
    ST     iVAR

复杂操作数

对于复杂操作数,在第一列中输入左括号 (

在第一列中另起一行输入右括号,然后在后面的行中输入操作数条目。

每次循环将字符串旋转一个字符:

LD      stRotate
RIGHT(  stRotate
LEN
SUB     1
)
CONCAT( stRotate,
LEFT    1
)
ST      stRotate

功能块调用、程序调用

第 1 行:

  • 第 1 列:

    操作符 CALCALC

  • 第 2 列:

    功能块实例或程序的名称以及左括号 (如果后面没有参数,则在此输入右括号 )

后面的行:

  • 第 1 列:

    参数名称,后接:

    • :=,用于输入参数

    • =>,用于输出参数

  • 第 2 列:

    参数值,后接逗号 ,(如果要后接其他参数)。

    在最后一个参数后面输入右括号 )

根据 IEC 标准,这里不允许使用复杂表达式。将此类构造分配给功能块或程序,然后再调用此功能块或程序。

CAL            POUToCall(
     iCounter:=1,
   iDecrement:=1000,
       wError:=wResult)

LD             POUToCall.bError,
ST             bErr

功能调用

第 1 行:

  • 第 1 列:

    LD

  • 第 2 列:

    输入变量

第 2 行:

  • 第 1 列:

    功能名称

  • 第 2 列:

    另外的输入参数,用逗号分隔

返回值写入到累加器中。

第 3 行:

  • 第 1 列:

    ST

  • 第 2 列:

    写入返回值的变量

LD          X7
GeomAverage 25
ST          Ave

操作调用

类似于功能块调用或程序调用。

操作的名称附加到功能块实例或程序的名称中。

CAL          POU1.ResetAction

跳转

  • 第 1 列:

    操作符 JMPJMPC

  • 第 2 列:

    目标网络跳转标签的名称。

  • 无条件跳转:

    前面的指令序列必须以下列命令之一结尾:

    • ST

    • STN

    • S

    • R

    • CAL

    • RET

    • JMP

  • 有条件跳转:

    跳转的执行取决于加载的值。

LD            BVar1
JMPC          Label1