所有逻辑块(组织块(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)。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。