四、编程方式
1、指令表IL
指令表(IL)由一系列指令组成。每条指令都由一个新行开始,包含一个操作符以及和操作符类型相关的一个或多个操作数,并用逗号分开。在指令前可以有标号,后接一个冒号。
注解必须在一行的最后,指令之间可以插入空行。
示例
标号
|
操作符
|
操作数
|
注释
|
|
LD
|
17
|
|
|
ST
|
lint
|
(*comment*)
|
|
GE
|
5
|
|
|
JMPC
|
next
|
|
|
LD
|
idword
|
|
|
EQ
|
istruct.sdword
|
|
|
STN
|
test
|
|
Nest:
|
|
|
|
修饰符:
JMP、CAL、RET中带C:指令在预置表达式结果为TRUE时执行。
JMPC、CALC、RETC中带N:指令在预置表达式结果为FALSE时执行。
其它指令中带N:操作数取反(不是累加器)。
操作符
|
修饰符
|
意义
|
LD
|
N
|
使当前结果等于操作数
|
ST
|
N
|
在操作数位置保存当前结果
|
S
|
|
如果当前位置为TRUE,置位布尔操作数为TRUE
|
R
|
|
如果当前位置为TRUE,复位布尔操作数为FALSE
|
AND
|
N,(
|
位与
|
OR
|
N,(
|
位或
|
XOR
|
(
|
位异或
|
ADD
|
(
|
加
|
SUB
|
(
|
减
|
MUL
|
(
|
乘
|
DIV
|
(
|
除
|
GT
|
(
|
>
|
EQ
|
(
|
=
|
NE
|
(
|
<>
|
LT
|
(
|
<=
|
JMP
|
(
|
<
|
CAL
|
(
|
跳转到标号
|
PET
|
CN
|
调用功能块
|
)
|
CN
|
评估括号操作
|
下表为IL中全部的操作符及可能的修饰符和相关的意义:
IL是一种面向行的语言。
标号
|
:
|
操作符/功能
|
操作数(表)
|
注释
|
跳转标号
|
分隔符
|
IL操作符或功能名
|
用于操作符的零个,一个或多个常数、变量,或用于功能的输入参数,由逗号分隔。
|
在(*…*)中的注释,可选
|
影响CR数据类型的操作符组
|
缩写
|
操作符示例
|
Create(建立)
|
C
|
LD
|
Process(处理)
|
P
|
GT
|
Leaveunchanged(保持不变)
|
U
|
ST:JMPC
|
Settoundefined(设置为未定义的)
|
|
CAL=功能块的无条件调用,
|
操作符
|
操作符组
|
描述
|
|
LD
|
LDN
|
C
|
装入操作数(操作数的反值)到CR
|
AND
AND(
|
ANDN
ANDN(
|
P
|
操作数(操作数的反值)和CR的布尔AND(“与”运算)
|
OR
OR(
|
ORN
ORN(
|
P
|
操作数(操作数的反值)和CR的布尔OR(“或”运算)
|
XOR
XOR(
|
XORN
XORN(
|
p
|
操作数(操作数的反值)和CR的布尔XOR(“异或”运算)
|
ST
|
STN
|
U
|
将CR存到操作数
|
S
|
U
|
若CR=1,则将操作数设置为TRUE
|
|
R
|
U
|
若CR=1,则将操作数设置为FALSE
|
|
)
|
U
|
结束括号:对递延操作求值
|
带布尔操作数(BOOL类型)的操作符
用于类属数据类型(类型ANY)操作数的操作符
操作符
|
操作符组
|
描述
|
|
LD
|
C
|
操作数装入CR
|
|
ST
|
U
|
将CR存储到操作数
|
|
ADD
|
ADD(
|
P
|
加操作数,结果存入CR
|
SUB
|
SUB(
|
P
|
从CR减去操作数,结果存入CR
|
MUL
|
MUL(
|
P
|
操作数乘以CR
|
DIV
|
DIV(
|
P
|
CR除以操作数
|
GT
|
GT(
|
P
|
CR>操作数(大于)
|
GE
|
GE(
|
P
|
CR>=操作数(大于或等于)
|
EQ
|
EQ(
|
P
|
CR=操作数(等于)
|
NE
|
NE(
|
P
|
CR<>操作数(不等于)
|
LE
|
LE(
|
P
|
CR<=操作数(小于或等于)
|
LT
|
LT(
|
P
|
CR<操作数(小于)
|
)
|
|
U
|
结束括号级
|
跳转和调用
操作符
|
操作符组
|
|
|||
JMP
|
-或U
|
(无)/有条件跳转到一个跳转标号
|
|||
JMPC
|
JMPCN
|
U
|
|||
CAL
|
-或U
|
(无)/有条件调用一个功能块
|
|||
CALC
|
CALCN
|
U
|
|||
RET
|
-或U
|
(无)/有条件从一个功能或功能块返回
|
|||
RETC
|
RETCN
|
U
|
|||
功能名
|
P
|
功能调用
|
使用功能和功能块
A.调用一个功能
在IL语言中,调用一个功能只是简单地写入该功能名即可。随后的实际参数用逗号分隔。这种语法和带有几个操作数的操作符的语法相同。
功能的第一个参数是当前结果(CR)。因此必须正好在功能调用之前将该值装入CR中。用于功能调用的第一个操作数实际上是功能的第二个参数,并依次类推。
B.调用一个功能块
操作符CAL(或条件调用CALC和条件取反调用CALCN)可以激活一个功能块。
IEC61131-3描述IL语言中给一个FB传送参数的三种方法:
1).使用一个调用,它包括在括号内的实际输入和输出参数的一个列表
2).在调用FB前,装载和保存输入参数
3).用输入参数作为操作符“隐性地”调用
第三种方法只对标准FB有效,不适合用户定义的FB。
2、结构化文本ST
T语言的优点(与IL语言相比较):编程任务高度压缩化的表达格式,在语句块中清晰的程序结构,
控制命令流的强有力结构
这些优点亦带来其本身的缺陷:
由于它借助于编译程序自动地执行程序,因此用户不能直接影响其翻译成机器码。
高度抽象导致效率降低(通常,编译程序的时间更长且执行速度更慢)
ST语句
关键字
|
说明
|
示例
|
说明
|
:=
|
赋值
|
d:=10
|
将右边的一个供计算的数值赋值给左边的标识符
|
|
调用FB
|
FBName(
Par1:=10,
Par2:=20);
|
调用另一个类型为FB的POU,包括其参数
|
RETURN
|
返回
|
RETURN
|
脱离当前的POU和返回到调用POU
|
IF
|
选择
|
IFd
|
通过布尔表达式选择替代值
|
CASE
|
多重选择
|
CASEfOF
1:g:=11;
2:g:=12;
ELSEg:=FunName();
END_CASE
|
根据表达式”f”的值选择一个语句块
|
FOR
|
跌代(1)
|
FORh:=1TO10BY2DO
F[h/2]:=h;
END_FOR
|
一个多循环语句块,带有起始和结束条件以及一个增量值
|
WHILE
|
跌代(2)
|
WHILEm>1DO
N:=n/2;
END_WHILE
|
一个多循环语句块,具有在开始端的结束条件
|
REPEAT
|
跌代(3)
|
|
一个多循环语句块,具有在结束端的结束条件
|
EXIT
|
循环的结束
|
EXIT
|
一个跌代语句的结束条件。
|
;
|
空白语句
|
;;
|
|
ST语言不包括跳转指令(GOTO)。
3、功能块图FBD
功能块图(FBD)语言起源于信号处理领域,对信号处理而言,整数与/或浮点数是很重要的。
使用图形化语言FBD或LD的POU表达式包括的部分与文本化语言相同。
1).POU的引导部分和结束部分
2).说明部分
3).代码部分
代码部分,分为若干个网络。网络有助于构造POU的控制流。
一个网络包括1).网络标号2).网络注释3).网络图形
4、梯形图LD
梯形图语言(LD)源自机电一体化的继电器系统的应用领域,它描述一个POU的网络自左至右的能量流。编程语言主要是设计用于处理布尔信号。
梯形图LD接点分类:
常开接点
|
常闭接点
|
上升沿接点
|
下降沿接点
|
梯形图LD线圈分类:
线圈
--()--
|
线圈的取反
--(/)--
|
置位(锁存)线圈
--(S)--
|
复位(解除锁存)线圈
--(R)--
|
保持(记忆)线圈
--(M)--
|
置位保持(记忆)线圈
--(SM)--
|
复位保持(记忆)线圈
--(RM)--
|
|
上升沿线圈
--(P)--
|
下降沿线圈
--(N)--
|
梯形图LD执行控制分类:
无条件返回
|
条件返回
|
无条件跳转
|
条件跳转
|
调用功能和功能块