说明:这里做ABB机器人IF指令的结构和执行过程,以前自己公众号有做个,今天特意单独拿出来发表,仅个人理解。这里做条件判读逻辑指令IF的五种结构和嵌套使用分析,程序执行过程。
1、**种结构:Compact IF 紧凑型
(1)结构和程序执行说明
结构:IF <EXP> <SMT>
执行:Compact IF紧凑型条件判断指令用于当一个条件满足后,就执行一句指令(特点:单组条件,单句指令),如果条件不满足就不执行后面单句语句。
(2)举例说明
例:IF di08 = 1 Set do02_ClampA;
说明:当程序执行到此指令时,即判断 di08 = 1是否为 1,如果条件成立,则执行Set do02_ClampA指令,否则跳过IF...ENDIF指令继续执行下一行。
2、第二种结构:简单型IF...ENDIF
(1)结构和程序执行说明
结构:
IF <EXP> THEN
<SMT>
ENDIF
(2)执行说明:如果IF后面条件成立则执行IF和DNDIF之间语句,如果条件不成立则程序指针不执行IF和ENDIF之间语句,而直接跳转至ENDIF后面语句继续往下执行。
(3)举例说明
PROC rIF01()
IF flag1 = TRUE THEN
reg1 := reg1 + 1;
WaitTime 1;
ENDIF
WaitTime 1;
ENDPROC
说明:如果布尔量flag1=true,则程序执行IF和ENDIF之间语句;如果flag1=false则程序不执行IF和ENDIF之间语句而跳到ENDIF后面语句执行。
(4)简单结构执行流程
3、第三种结构:二选一型结构 IF ...ESLE...ENDIF
(1)结构程序执行说明
结构:
IF <EXP> THEN
<SMT>
ELSE
<SMT>
ENDIF
(2)程序执行说明:如果IF后面条件成立则执行IF和ELSE之间语句,如果IF后面语句不成立则执行ELSE和ENDIF之间语句,ELSE只能在*靠近ENDIF添加且只能添加一个ELSE。
(3)举例说明
例如:
IF di03 = 1 THEN
Set do01;
Set do02;
WaitTime 2;
Reset do01;
Reset do02;
ELSE
reg1 := reg1 + 1;
reg2 := reg1 + 10;
ENDIF
WaitTime 0.5;
说明:如果di03为1,则置位do01和do02,等待2s以后在复位do01和do02,如果di03为0,则执行 reg1 := reg1 + 1和reg2 := reg1 + 10;即根据di03输入信号,判断和选择执行IF、ELSE之间语句或者执行ELSE、ENDIF之间语句。
(4)二选一执行流程
4、第四种结构:选择型结构IF...ELSEIF...ELSEIF...ENDIF
(1)选择型结构
结构:ELSEIF可以有多个
IF <EXP> THEN
<SMT>
ELSEIF <EXP> THEN
<SMT>
ELSEIF <EXP> THEN
<SMT>
ENDIF
(2)执行说明:结构上,在IF和ENDIF之间增加一条或多条ESLEIF;执行时候,如果没有一个条件成立,则不选择任何一个IF或ELSEIF后面对应的语句执行;如果有一个条件程序,则选择对应的IF或ELSEIF后面对应的语句执行;如果有两个或者两个以上条件成立,则按照顺序从上往下,IF、**个ELSEIF、第二个ELSEIF等等往下,先遇到哪个条件判断成立就选择对应的IF或者ELSEIF后面对应语句执行;执行完以后直接跳到ENDIF后面继续往下执行。
(3)举例说明
PROC rIF03()
IF reg3 = 1 THEN
reg5 := 1;
ELSEIF reg3 = 2 THEN
reg5 := 2;
ELSEIF reg3 = 3 THEN
reg5 := 3;
ELSEIF reg3 = 4 THEN
reg5 := 4;
ENDIF
WaitTime 1;
ENDPROC
说明:根据reg3的值不同而选择不同的IF或者ELSEIF下面语句执行;当reg3的值使得所有IF和ELSEIF的条件全部不成立,那么程序不执行任何一个IF或者ELSEIF下面对应的语句;当reg3的值使得与IF或者ELSEIF的条件有且仅有一个成立,那么就选择对应的IF或者ELSEIF下面对应的语句执行;当reg3的值使得IF或者ELSEIF的条件有两个或者两个以上条件成立,那么程序指针按照顺序从上往下判断,先遇到哪个IF或者ELSEIF的条件成立就选择对应的IF或者ELSEIF下面对应的语句执行,执行之后直接跳转到ENDIF而不再判断后面的条件和语句。
(4)IF选择结构执行流程
5、第五种结构:综合型结构,即把二选一型和选择型综合到一起的结构
(1)结构
IF <EXP> THEN
<SMT>
ELSEIF <EXP> THEN
<SMT>
ELSEIF <EXP> THEN
<SMT>
ELSE
<SMT>
ENDIF
(2)执行说明
结构上面在IF和ENDIF之间既有一个或者多个ELSEIF,也有ELSE;执行时候,一般先看二选一型执行,在分析IF和ELSE之间的选择型ELSEIF来执行。**种情况,如果没有一个条件成立则选择ELSE和ENDIF之间语句执行,这里相当于二选一机构看待;第二种情况,如果有且只有一个条件条件成立,则选择对应的IF或者ELSEIF后面对应的语句执行;第三种情况,如果有两个或者两个以上条件成立,则按照顺序从上往下判断条件,IF、**个ELSEIF、第二个ELSEIF等等往下,先遇到哪个条件成立就选择对应的IF或者ELSEIF后面对应的语句执行;执行完以后直接跳到ENDIF后面往下继续执行。
(3)举例说明
例: IF di01 = 1 THEN
rSJXpan;
WaitTime 1;
ELSEIF di02 = 1 THEN
rSBXpan;
WaitTime 1;
ELSEIF di03 = 1 THEN
rYUANpan;
WaitTime 1;
ELSE
reg1 := 1;
WaitTime 1;
ENDIF
WaitTime 0.5;
说明:如果所有IF和ELSEIF后面的条件全部都不成立,则不执行任何一个IF和ELSEIF后面语句;如果IF和ELSEIF后面条件只有一个成立,则选择对应的IF或者ELSEIF来执行;如果IF和ELSEIF后面条件有两个或者两个以上成立,则按照顺序从上往下,先遇到哪个条件成立就执行对应后面的语句来执行,执行完语句以后直接跳转至ENDIF执行,不在判断和执行其他ELSEIF来执行。
6、IF指令嵌套使用分析
(1)机构特点
IF语句的嵌套使用,指的是在IF和ENDIF的结构当中,再嵌入IF和ENDIF结构,而且可以多次嵌入IF和ENDIF结构,组成多层嵌套,例如下面的两层嵌套;
IF <EXP> THEN **层IF
IF <EXP> <SMT> 第二层**个紧凑型IF
ELSEIF <EXP> THEN **层ELSEIF
IF <EXP> THEN 第二层第二个IF
<SMT>
ENDIF
ELSE **层ELSE
IF <EXP> THEN 第二层第三个IF
<SMT>
ELSE
<SMT>
ENDIF
ENDIF
(2)如何分析嵌套结构
A:从*里面开始找,找到IF和ENDIF,每个IF和ENDIF作为一对,然后依次往外查找,把所有IF和对应的ENDIF配对起来;
B:对于每对IF和ENDIF,找出对应的结构,就是上面的四种机构,紧凑型IF没有ENDIF也容易识别;
C:分析识别出每对IF和ENDIF之后,按照对应的机构对每对进行分析;
(3)嵌套IF结构程序执行分析
A:由外到内,从*外层往里面分析执行;
B:按IF结构分析,对于每个IF进行分析时候,要根据对应的IF和ENDIF机构来分析;
(4)举例说明
PROC rIF6()
IF di1 = 1 THEN *外层IF:综合结构
IF reg1 = 1 THEN 第二层**个IF:简单结构
reg1 := reg1 + 1;
ENDIF
WaitTime 0.5;
ELSEIF di2 = 1 THEN *外层ELSEIF
reg2 := reg2 + 1;
ELSE *外层ELSE
IF reg1 = 4 THEN 第二层第二个IF:选择结构
reg1 := 1;
ELSEIF reg2 = 4 THEN
reg2 := 1;
ENDIF
WaitTime 0.5;
ENDIF
WaitTime 1;
ENDPROC
执行说明:这里总共有三个IF,*外层IF为综合结构,既有ELSEIF,也有ELSE;第二层**个IF为简单结构,第二层第二个IF为选择结构含有一个ELSEIF。程序执行时候,首先先判断*外层综合结构IF,可以使用综合结构来分析执行;即先判断DI1=1和DI2=1条件是否满足,然后执行;当DI1不等于1且DI2不等于1,则一个条件都不满足,程序指针执行*外层的ELSE下面到ENDIF的语句,即第二层第二个选择型的IF;当DI1或者DI2有一个条件成立,则程序选择对应的IF或者ELSEIF下面对应语句来执行;当DI1=1和DI2=1两个条件同时满足,则按照顺序从上往下判断条件,先遇到DI1=1条件成立,就选择对应IF下面语句来执行,即执行第二层**个IF;对于第二层里面的两个IF结构,比较简单,容易分析。