西门子电机报编码器故障现场维修
置位( SET)和复位(RESET)指令同输出和输出非指令非常相似,但它们只能改变以“ON”为执行条件的位操作数位的状态。当执行条件为“OFF”时,指令不影响它的操作位的状态。
当执行条件为“ON”时,置位指令(SET)将操作位置“ON”,与输出指令(OUT PUT)不同的是,当执行条件变为“OFF”时,置位指令(SET)不会将操作位置“OFF”;类似地,当执行条件为“ON”时,复位指令(RESET)将操作位置“OFF”,与输出非指令( OUTPUT NOT)不同的是,当执行条件变为“OFF”时,复位指令(RESET)不会将操作位置“ON”。
因此,如图6-30a所示,不管IR 00100的状态如何,当IR 00100置“ON”时IR 20000将置“ON”,并且能保持“ON”直至IR 00101置“ON”。当IR 00101置“ON”时,复位将使IR 20000置“OFF”,其对应指令助记符程序如图6-30b所示。
图6-30 置位和复位指令
在编程时经常会遇到需要跳过某一指定程序段的情况,即跳转。尽管将互锁指令的执行条件置“OFF”时也可实现类似功能,但跳转指令不但可以跳过某一指定段的程序,还可以维持所有指令的操作数的状态。因此,跳转指令常被用于控制需要保持连续输出的器件,比如气动装置、液压传动装置,而互锁指令常用于控制不需要连续输出的器件,例如电子仪器。
实现跳转可以使用跳转JMP (04)和跳转结束JME (05)指令。如果一个跳转指令的执行条件为“ON”,那么程序和没有跳转指令时一样运行;如果跳转指令的执行条件为“OFF”,则程序会立即跳转到跳转结束指令后继续执行,而不改变跳转和跳转结束指令之间的任何状态。
所有跳转和跳转结束指令都有定义的跳转编号,范围从00~99。使用的跳转编号决定跳转的类型。在01~ 99的范围内取一编号定义跳转,则跳转类型为一次性跳转,每个跳转号只能使用一次(跳转、跳转结束指令各一次);使用跳转编号00,可以产生需要次数的多次跳转,并且允许多条跳转指令连续使用00作为跳转号,它们之间没有以00为跳转号的跳转结束指令。
当执行一次性跳转指令时,程序会立即转移到具有相同编号的跳转结束指令后,就像在它们两条指令之间所有的指令都不存在一样。描述TR位和互锁例子的图6-23a和6-26a可以使用一个跳转指令重新编写梯形图,如图6-28a所示。尽管其跳转编号用的是01,只要它没有在程序其他地方使用过,那么01~ 99之间的任何一个数字都是可以使用的。
使用00跳转编号产生所需要的多次跳转时,它允许所有JUMP 00指令把程序执行跳转到同一条JUMP END 00指令处,即在程序中所有的JUMP 00指令共用一条JUMP END 00指令。当一个跳转指令使用00作为跳转编号时,程序执行将跳转到紧跟着的以00为跳转号的跳转结束指令后的指令。尽管同其他跳转指令一样,程序会跳过JUMP 00至JUMP END 00指令间的所有指令,且不改变状态,但因为程序要用一定的时间寻找下一个JUMP END 00指令,所以它的执行时间比其他跳转指令稍长些。
程序中多条JUMP 00指令共用一条JUMP END 00指令,其执行与使用互锁(IL)指令的程序相似。图6-29a是将图6-27a采用互锁指令的例子用跳转JUMP指令方法改写。该图的执行与前面采用互锁指令的梯形图不同,互锁会使互锁的某些部分状态复位,而跳转则对JUMP至JUMP END指令间的状态不产生任何影响。
如果一个梯形图可以划分为若干个逻辑块,那么就需要串联逻辑块指令实现对梯形图的编程。每块采用一条“LOAD”或“LOAD NOT”指令编写个条件,然后使用“AND LOAD”或“OR LOAD”指令对这些逻辑块进行逻辑组合。用“AND LOAD”或“OR LOAD”指令时,有两种方法实现上述目的。一种是在前面两个逻辑运算后用逻辑块指令编写,然后在每增加一个逻辑块的后面用逻辑块指令编写;另一种方法是对所有要结合的逻辑块一起编写,即先用“LOAD”或“LOAD NOT”指令开始每个逻辑块编写,然后用逻辑块指令把它们组合起来,这时,用于一对逻辑块的指令将首先被结合,然后前面的每一逻辑块被结合,逐次递推回个逻辑块。尽管上述两种方法产生完全相同的结果,但第二种对所有逻辑块指令一起编写的方法,只适用于有8个(或少于8个)逻辑块组合的情况,即要用7条(或7条以下)逻辑块指令的情况。
以图6-12所示梯形图为例,其中图6-12a为梯形图,图6-12b为对应的指令助记符。要实现的执行条件是:当IR 00000为“ON”和IR 00001为“OFF”时,或当IR 00002和IR 00003都为“ON”的时候,右侧的指令产生一个“ON”执行条件。为了表达上、下逻辑块之间的这种关系,就需要一条“OR LOAD”指令,这时当前执行条件和前一个“没使用”的执行条件之间进行的是“OR”操作。“OR LOAD”指令的助记符的操作同“AND LOAD”指令一样,本身不需要操作数。
图6-12 OR LOAD指令
为了达到上述目的,可以在每个逻辑块的一个指令行中使用“LOAD”或“LOAD NOT”指令。这时,当前的执行条件被保存在一个特定缓冲区里,而逻辑过程重新开始,然后用一个“AND LOAD”指令将当前执行条件与先前“没使用”的执行条件结合起来,这里的“LOAD”是指使一个未用的执行条件被取出。
分析上述梯形图可以看到,IR 00000的条件是一条“LOAD”指令,其下面的条件IR 00000和IR 00001状态之间的一条“OR”指令。IR 00002的条件是另一条“LOAD”指令,其下面的条件是一条“OR NOT”指令,即在IR 00002的状态和IR 00003状态的“非”之间的一条“OR”指令。为了达到右侧指令的执行条件,必须对两个逻辑块执行逻辑与(AND)操作,“AND LOAD”就实现了这个功能。
梯形图对应的助记符如图6-11b所示。“AND LOAD”指令本身不需要操作数,因为它按先前确定的执行条件操作,图中划线表示无操作数被指定或输入。
图6-11 AND LOAD指令
程序的一条指令也就是END(结束)指令。当CPU单元扫描程序时,它执行所有指令的指令,直到条END指令为止,然后返回到程序开始处再次执行。END指令可以放在程序中的任意位置上,特别在调试程序时,在条END指令后的指令不会执行(除非把它删掉)。END指令后面的数是指令功能代码,结束指令不需要操作数,且END指令的指令行上不能设置条件。如果在程序中没有END指令,则程序不会执行。如图6-10所示,其中图6-10a为梯形图,图6-10b为对应的指令助记符。
图6-10 结束指令
西门子电机报编码器故障现场维修