您现在的位置是:首页 > PLC技术 > PLC技术
S7-300/400系列PLC逻辑控制指令
来源:艾特贸易2018-01-24
简介逻辑控制指令包含各种跳转指令,通过跳转指令及程序跳转标签 ( Label)控制程序的跳转。逻辑控制指令如表2-27所示。 表 2-27 逻辑控制指令 使用 LAD编程,程序跳转指令少,使用比较简单
逻辑控制指令包含各种跳转指令,通过跳转指令及程序跳转标签( Label)控制程序的跳转。逻辑控制指令如表2-27所示。
表2-27 逻辑控制指令
使用LAD编程,程序跳转指令少,使用比较简单。使用STL编程时,可以根据状态位的状态进行程序跳转,跳转指令比较灵活。下面分别介绍两种编程语言的跳转指令。
1.LAD编程指令
LAD跳转指令有-(JMP)(为1跳转)和-(JMPN)(为0跳转)两种,根据前面的条件,跳转到自己定义的LABEL(标号,最多4个字符,第一字符必须是字母)程序段。LAD编程的跳转指令如图2-15所示。
图2-15 LAD跳转指令
使用-(JMP)指令,如果前面没有触发条件,程序执行后无条件跳转到指定标号的程序段。使用-(JMPN)指令,前面必须有触发条件,否则指令违法,跳转指令中指定的标号必须与程序段标号一致,可以调用多条跳转指令跳转到同一标号的程序段中。在示例程序中,如果触点信号M2.0为1,则程序跳转到标号为k1的程序段(程序段3);如果触点信号M2.1为0,则程序跳转到标号为k2的程序段(程序段4),CPU将不扫描程序段3。
2.STL指令
STL与LAD编程跳转的方式相同,所有跳转指令必须定义跳转的标号,格式如下:
JC M2
*
*
*
M2:*
*
*
JC为跳转指令,M2为用户定义的标号,在跳转的程序标号后面,必须加上符号“:”,
根据跳转指令,STL编程语言可划分下面几种跳转指令。
(1)无条件跳转指令JU、JL
JU指令的使用示例程序如下:
A I1.2
JC DELE //如果I1.2为1,则跳转到标号“DELE”
LMB 10
INC 1
TMB 10
JU FORW //不需要触发条件,程序无条件跳转到标号“FORW”
DELE:T MB 10
L 0
FORW:A I 2.1 //程序跳转到标号“FORW”后,程序从这里继续执行
JL指令根据累加器1的数值跳转到相应的标号程序段,指令的示例程序如下:
LMB 0 //装载MBO到累加器l
JL LSTX //累加器1的值大于3时,跳转到标号LSTX程序段
JU SEGO //累加器1的值等于0时,跳转到标号SEGO程序段
JU SEG1 //累加器1的值等于1时,跳转到标号SEG1程序段
JU SEG2 //累加器1的值等于2时,跳转到标号SEG2程序段
JU SEG3 //累加器1的值等于3时,跳转到标号SEG3程序段
LSTX: JU COMM
SEGO:* //合法指令
*
JU COMM
SEG1:* //合法指令
*
JU COMM
SEG2:* //合法指令
*
JU COMM
SEG3:* //合法指令
*
JU COMM
COMM:* //合法指令
*
上面为JL指令固定的编程格式,最多允许有255个跳转条目,示例程序中有4个跳转条目,每个条目有一个标号,条目的序号从0开始(JU的个数),如果累加器1的值大于所罗列的条目数,则跳转到JL指令指定的标号。
(2)基于逻辑结果的跳转指令JC、JCN、JCB、JNB
如果RLO=1,JC指令执行,指令的使用示例程序如下:
A I1.2
JC JOVR //如果RLO=1(I1.2为1),则跳转到标号“JOVR”
LIW 8 //如果跳转没有执行,程序从这里继续扫描
TMW 22
JOVR:A I 2.1 //程序跳转到标号“JOVR”后,程序从这里继续执行
与JC指令相反,如果RLO=O,JCN指令执行,即如果I1.2为0时,触发JCN指令执行,示例程序如下:
A I1.2
JCN JOVR //如果RLO=0(I1.2为0),则跳转到标号“JOVR”
LIW 8 //如果跳转没有执行,程序从这里继续扫描
TMW 22
JOVR:A I 2.1 //程序跳转到标号“JOVR”后,程序从这里继续执行
注意:当指令JC和JCN执行时,如果跳转不执行,将RLO位置1并从下一个指令开始执行。
如果RLO=1,JCB指令执行,并将RLO位的状态复制到BR位,指令的使用示例程序如下:
A I1.2
JCB JOVR //如果RLO=1( 11.2=1),则跳转到标号“JOVR”,将RLO位的状态复制到BR位
LIW 8 //如果跳转没有执行,程序从这里继续扫描
TMW 22
JOVR:A I 2.1 //程序跳转标号“JOVR”后,程序从这里继续执行
如果RLO=O,JNB指令执行,并将RLO位的状态复制到BR位,指令的示例程序如下:
A I1.2
JNB JOVR //如果RLO=1( 11.2=1),则跳转到标号“JOVR”,将RLO位的 状态复制到BR位
LIW 8 //如果跳转没有执行,程序从这里继续扫描
TMW 22
JOVR:A I 1.2 //程序跳转标号“JOVR”后,程序从这里继续执行
(3)基于状态字中位状态(除RLO位)的跳转指令JBI、JNB1、JO、JOS
JBI与JNBI指令根据BR位的状态跳转,如果BR位为1,则执行JBI指令,如果BR位为0,则执行JNBI指令。以JBI指令为例,指令的使用示例程序如下:
CALL SFC14 //调用系统函数SFC14
LADDR :=MW2
RET_VAL:=MW4
RECORD:=MW6
JBI Ml //如果调用出错,BR位为0,则函数执行跳转到标号“M”
L 2
TMW 12
BE //程序结束
Ml: L 3
TMW 12 //程序跳转到标号“M1”后,程序从这里继续执行
如果运算结果溢出,状态字的溢出位OV=1,则JO指令通过判断OV位进行程序跳转,指令的使用示例程序如下:
LMW 10
L 30
*I//MW10
JO OVER //如果超上限(0V=1),则程序跳转
T MW 10 //如果跳转没有执行,程序从这里继续扫描
A M4.0
R M4.0
JU NEXT
OVER: AN M 4.0 //程序跳转到标号“OVER”后,程序从这里继续执行
S M4.0
NEXT: NOP 0 //程序跳转到标号“NEXT”后,程序从这里继续执行
示例程序中,从位信号M4.0中,可以查询运算结果是否超上限(0V=1),若M4.0为1,指示运算结果超上限;若M4.0为0,指示运算结果正常。
如果运算结果溢出,状态字的溢出位OV=1,则运算结果正常;若溢出位OV=0,但是状态字的溢出保持位OS仍然为1,记录运算结果溢出是否出现。通过程序块调用或者调用JOS复位OS状态位,JOS指令通过判断OS位进行程序跳转,指令的使用示例程序如下:
LIW 10
LMW 12
*I
LDBW 25
+I
LMW 14
一I
JOS OVER //如果上面3条运算指令中任何一条运算结果超上限(0V=1),则
程序跳转到标号“OVER”
T MW 16 //如果跳转没有执行,程序从这里继续扫描
A M4.0
R M4.0
JU NEXT
OVER: AN M 4.0 //程序跳转到标号“OVER”后,程序从这里继续执行
S M 4.0
NEXT: NOP 0 //程序跳转到标号“NEXT”后,程序从这里继续执行
与JO跳转指令程序相同,若M4.0为l,指示运算结果超上限;若M4.0为0,指示运算结果正常。
(4)基于运算结果的跳转指令JZ、JN、JP、JM、JPZ、JMZ、JUO
这些跳转指令基于运算结果CCO和CC1的状态,不同的状态触发不同的跳转指令,CCO、CC1位的状态与条件跳转指令的关系如表2-28所示。
表2-28 CC0、CC1位的状态与条件跳转指令的关系
以JP指令为例,介绍跳转指令的使用示例程序如下:
LIW 8
LMW 12
一I //IW8的值与MW12的值相减
JP POS //如果计算结果大于0(ACCU1>0),则跳转到程序标号“POS”
AN M 4.0 //如果跳转没有执行,程序从这里继续扫描
S M4.0
JU NEXT
POS: AN M 4.1 //程序跳转到标号“POS”后,程序从这里继续执行
S M4.1
NEXT: NOP 0 //程序跳转到标号“NEXT”后,程序从这里继续执行
在程序中,如果变量IW8大于变量MW12中存储的值,则置位M4.1,否则置位M4.0。
(作者稿费要求:需要高清无水印文章的读者3元每篇,请联系客服,谢谢!在线客服:)
点击排行
