首页 理论教育 逻辑控制指令:跳转和循环控制

逻辑控制指令:跳转和循环控制

时间:2023-06-29 理论教育 版权反馈
【摘要】:所有逻辑块中均可使用逻辑控制指令。可使用跳转指令来控制逻辑流,允许程序中断其线性流,在一个不同点处继续进行扫描。可使用LOOP指令来多次调用一个程序段。跳转列表内的所有其他指令都是非法的。当逻辑运算的结果为1时,不执行跳转。

逻辑控制指令:跳转和循环控制

所有逻辑块(组织块(OB)、功能块(FB)和功能(FC))中均可使用逻辑控制指令。可使用跳转指令来控制逻辑流,允许程序中断其线性流,在一个不同点处继续进行扫描。可使用LOOP指令来多次调用一个程序段。

跳转指令的地址是标签。标签最多可以包含4个字符。第一个字符必须是字母表中的字母,其他字符可以是字母或数字(例如,SEG3)。跳转标签指示程序将要跳转到的目标。在语句表中跳转标签后必须带有一个冒号“:”,且在行中必须位于程序语句之前。在梯形图中目标标签必须位于程序段的开头。可以通过从梯形图浏览器中选择LABEL,在程序段的开头输入目标标签。在显示的空框中,键入标号的名称。

1.语句表(STL)的逻辑控制指令

(1)JU 无条件跳转

指令格式为:JU〈跳转标签〉

JU〈跳转标签〉中断线性程序扫描,并跳转到一个跳转目标,与状态字的内容无关。线性程序扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执行跳转,即跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为程序代码的-32768或+32767个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单字、双字或三字语句)。

例:

(2)JL 跳转到标签(多分支跳转)

指令格式为:JL〈跳转标签〉

JL〈跳转标签〉(通过跳转到列表进行跳转)允许编程多次跳转。跳转目标列表(最多255个条目)从JL指令的下一行开始,到JL地址中引用的跳转标签的前一行结束。每个跳转目标由一个JU指令组成。跳转目标的数目(0~255)则从ACCU 1-L-L中获取。

只要ACCU的内容小于JL指令和跳转标签之间跳转目标的数目,JL指令就跳转到JU指令中的一条。当ACCU 1-L-L=0时,跳转到第一条JU指令。当ACCU 1-L-L=1时,跳转到第二个JU指令,以此类推。如果跳转目标的数目太大,则在跳转到目标列表中的最后一条JU指令后,JL指令跳转到第一条指令处。

跳转目标列表必须包含JU指令,该指令位于JL指令地址中引用的跳转标签之前。跳转列表内的所有其他指令都是非法的。

例:

(3)JC 当RLO=1时跳转

指令格式为:JC〈跳转标签〉

逻辑运算的结果为1时,JC〈跳转标签〉就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执行跳转,即跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为程序代码的-32768或+32767个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单字、双字或三字语句)。当逻辑运算的结果为0时,不执行跳转。将RLO设置为1,继续对下一个语句执行程序扫描。

例:

(4)JCN 当RLO=0时跳转

指令格式为:JCN〈跳转标签〉

当逻辑运算的结果为0时,JCN〈跳转标签〉就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执行跳转,即跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为程序代码的-32768或+32767个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单字、双字或三字语句)。当逻辑运算的结果为1时,不执行跳转。继续对下一个语句执行程序扫描。

例:

(5)JCB 当带BR位的RLO=1时跳转

指令格式为:JCB〈跳转标签〉

当逻辑运算的结果为1时,JCB〈跳转标签〉就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执行跳转,即跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为程序代码的-32768或+32767个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单字、双字或三字语句)。当逻辑运算的结果为0时,不执行跳转。将RLO设置为1,继续对下一个语句执行程序扫描。将RLO复制到BR中,以执行JCB〈跳转标签〉指令,而与RLO的状态无关。

例:

(6)JNB 当带BR位的RLO=0时跳转

指令格式为:JNB〈跳转标签〉

当逻辑运算的结果为0时,JNB〈跳转标签〉就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执行跳转,即跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为程序代码的-32768或+32767个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单字、双字或三字语句)。当逻辑运算的结果为1时,不执行跳转。将RLO设置为1,继续对下一个语句执行程序扫描。当存在一个JNB〈跳转标签〉指令时,将RLO复制到BR,而与RLO的状态无关。

例:

(7)JBI 当BR=1时跳转

指令格式为:JBI〈跳转标签〉

当状态位BR为1时,JBI〈跳转标签〉就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫描在跳转目标处继续执行。跳转目标由跳转标签确定。跳转标签最多4个字符,且第一个字符必须为字母。跳转标签后必须带有一个冒号“:”,且在行中必须位于程序语句之前。允许向前跳转和向后跳转。只能在一个块内执行跳转,即,跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为程序代码的-32768或+32767个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单字、双字或三字语句)。

(8)JNBI 当BR=0时跳转

指令格式为:JNBI〈跳转标签〉

当状态位BR为0时,JNBI〈跳转标签〉就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执行跳转,即跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为程序代码的-32768或+32767个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单字、双字或三字语句)。

(9)JO 当OV=1时跳转

指令格式为:JO〈跳转标签〉

当状态位OV为1时,JO〈跳转标签〉就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执行跳转,即跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为程序代码的-32768或+32767个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单字、双字或三字语句)。在一个组合的算术指令中,在每个单独的算术指令后检查是否发生溢出,以确保每个中间结果都位于允许范围内,或使用指令JOS。

例:

(10)JOS 当OS=1时跳转

指令格式为:JOS〈跳转标签〉

当状态位OS为1时,JOS〈跳转标签〉就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执行跳转,即跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为程序代码的-32768或+32767个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单字、双字或三字语句)。

例:

注意:在这种情况下,不要使用JO指令。当发生溢出时,JO指令只检查上一条-I指令

(11)JZ 当为零时跳转

指令格式为:JZ〈跳转标签〉

当状态位CC 1=0且CC 0=0时,JZ〈跳转标签〉(当结果=0时跳转)就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执行跳转,即跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为程序代码的-32768或+32767个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单字、双字或三字语句)。

例:

(12)JN 当不为零时跳转

指令格式为:JN〈跳转标签〉(www.xing528.com)

当由状态位CC 1和CC 0指示的结果大于或小于零时(CC 1=0/CC 0=1或CC 1=1/CC 0=0),JN〈跳转标签〉(当结果〈〉0时跳转)就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执行跳转,即跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为程序代码的-32768或+32767个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单字、双字或三字语句)。

例:

(13)JP 当为正时跳转

指令格式为:JP〈跳转标签〉

当状态位CC 1=1且CC 0=0时,JP〈跳转标签〉(当结果〈0时跳转)就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执行跳转,即跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为程序代码的-32768或+32767个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单字、双字或三字语句)。

例:

(14)JM 当为负时跳转

指令格式为:JM〈跳转标签〉

当状态位CC 1=0且CC 0=1时,JM〈跳转标签〉(当结果〈0时跳转)就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执行跳转,即,跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为程序代码的-32768或+32767个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单字、双字或三字语句)。

例:

(15)JPZ 当为正或零时跳转

指令格式为:JPZ〈跳转标签〉

当由状态位CC 1和CC 0指示的结果大于或等于零时(CC 1=0/CC 0=0或CC 1=1/CC 0=0),JPZ〈跳转标签〉(当结果>=0时跳转)就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执行跳转,即,跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为程序代码的-32768或+32767个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单字、双字或三字语句)。

例:

(16)JMZ 当为负或零时跳转

指令格式为:JMZ〈跳转标签〉

当由状态位CC 1和CC 0指示的结果小于或等于零时(CC 1=0/CC 0=0或CC 1=0/CC 0=1),JMZ〈跳转标签〉(当结果<=0时跳转)就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执行跳转,即,跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为程序代码的-32768或+32767个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单字、双字或三字语句)。

例:

(17)JUO 当无序时跳转

指令格式为:JUO〈跳转标签〉

当状态位CC 1=1且CC 0=1时,JUO〈跳转标签〉就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执行跳转,即跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为程序代码的-32768或+32767个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单字、双字或三字语句)。

在三种情况下,状态位CC 1=1且CC 0=1:发生被零除时、使用了非法指令时、浮点比较的结果为“无序”(即使用了一种无效格式时)。

例:

(18)LOOP 循环

指令格式为:LOOP〈跳转标签〉

LOOP〈跳转标签〉(对ACCU 1-L进行减1操作,并在ACCU 1-L〈〉0时跳转)可简化循环编程。ACCU 1-L中包含循环计数器。指令跳转到指定的跳转目标。只要ACCU 1-L的内容不等于0,就一直执行跳转。在跳转目标处继续执行线性程序扫描。跳转目标由跳转标签确定。允许向前跳转和向后跳转。只能在一个块内执行跳转,即跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为程序代码的-32768或+32767个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单字、双字或三字语句)。

例(计算因子为5):

2.梯形图(LAD)的逻辑控制指令

(1)---(JMP)无条件跳转

指令符号为:〈标号名称〉

---(JMP)

---(JMP)(为1时在块内跳转)当左侧电源轨道与指令间没有其他梯形图元素时执行的是绝对跳转。每个---(JMP)还都必须有与之对应的目标(LABEL)。跳转指令和标号间的所有指令都不予执行。始终执行跳转,并忽略跳转指令和跳转标号间的指令。

例:

(2)---(JMP)条件跳转

指令符号为:〈标号名称〉

---(JMP)

---(JMP)(为1时在块内跳转)当前一逻辑运算的RLO为“1”时执行的是条件跳转。每个---(JMP)都还必须有与之对应的目标(LABEL)。跳转指令和标号间的所有指令都不予执行。

如果未执行条件跳转,RLO将在执行跳转指令后变为“1”。

例:

如果I0.0=“1”,则执行跳转到标号CAS1。由于该跳转的存在,即使I0.3处有逻辑“1”,也不会执行复位输出Q4.0的指令。

(3)---(JMPN)若“否”则跳转

指令符号为:〈标号名称〉

---(JMPN)

---(JMPN)(若“否”则跳转)相当于在RLO为“0”时执行的“转到标号”功能。每一个---(JMPN)都还必须有与之对应的目标(LABEL)。跳转指令和标号间的所有指令都不予执行。如果未执行条件跳转,RLO将在跳转指令执行后变为“1”。

例:

如果I0.0=“0”,则执行跳转到标号CAS1。由于存在该跳转,即使I0.1处有逻辑“1”,也不会执行复位输出Q4.0的指令。

(4)LABEL标号

指令符号为:

LABEL是跳转指令目标的标识符。第一个字符必须是字母表中的字母;其他字符可以是字母或数字(例如,CAS1)。每个---(JMP)或---(JMPN)都还必须有与之对应的跳转标号(LABEL)。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈