资源描述
后一页,返回,安徽理工大学电信学院,可编程控制器原理与应用,后一页,返回,安徽理工大学电信学院,第3章 西门子小型可编程控制器S7-200,返回,后一页,前一页,3.2.4程序控制指令 1结束及暂停指令,有条件结束(END)指令根据前一个逻辑条件终止主程序。 注释: 您可以在主程序中使用有条件结束指令,但不能在子程序或中断例行程序中使用。Micro/WIN自动在主程序中增加无条件结束。,返回,后一页,前一页,停止指令STOP使可编程序控制器从运行模式进入停止模式,立即终止程序的执行。如果在中断程序中执行停止指令,中断程序立即终止,并忽略全部等待执行的中断,继续执行主程序的剩余部分,并在主程序的结束处,完成从运行方式至停止方式的转换。,停止指令,返回,后一页,前一页,2. 看门狗指令(WDR),监控定时器(Watchdog)又称看门狗,它的定时时间为300ms,每次扫描它都被自动复位一次,正常工作时如果扫描周期小于300ms,监控定时器不起作用。如果强烈的外部干扰使可编程序控制器偏离正常的程序执行路线,监控定时器不再被周期性地复位,定时时间到时,可编程序控制器将停止运行。,返回,后一页,前一页,在以下情况下扫描周期可能大于300ms,监控定时器会停止执行用户程序: (1)用户程序很长。 (2)出现中断事件时,执行中断程序的时间较长。 (3)循环指令使扫描时间延长。 为了防止在正常情况下监控定时器动作,可将监控定时器复位(WDR)指令插人到程序中适当的地方,使监控定时器复位。如果FORNEXT循环程序的执行时间可能超过监控定时器的定时时间,可将WDR指令插入到循环程序中。条件跳转指令JMP若在它对应的标号之后(即程序往回跳),可能因连续反复跳步使它们之间的程序被反复执行,总的执行时间超过监控定时器的定时时间。为了避免出现这样的情况,可在JMP指令和对应的标号之间插入WDR指令。,返回,后一页,前一页,使用WDR指令后,在终止本次扫描之前,下列操作将被禁止: (1)通信(自由口模式除外)。 (2)I/O更新(立即I/O除外)。 (3)强制更新。 (4)SM位更新(不能更新SM0 ) (5)运行时间诊断。 (6)在中断程序中的STOP指令 (7)如果扫描时间超过25s,10ms定时器和l00ms定时器不能正确累计时间。 如果将CPU的方式开关切换到STOP位置,1.4s内CPU转到停止模式。,返回,后一页,前一页,程序示例如下: NETWORK 1 / 检测到I/O错误时,强制转换至STOP(停止)模式 LD SM5.0 STOP NETWORK 2 / M5.6打开时,重新触发CPU监视器复原 / 允许扩展扫描 LD M5.6 WDR / 重新触发CPU监视器复原 NETWORK 3 / I0.0打开时,中止当前扫描 LD I0.0 END,返回,后一页,前一页,3. 跳转及标号指令(例),跳转至标签(JMP)指令对程序中的指定标签(n)执行分支操作。跳转接受时,堆栈顶值始终为逻辑1。 标签(LBL)指令标记跳转目的地(n)的位置。您可以在主程序、子程序或中断例行程序中使用跳转指令。跳转及其对应的标签指令必须始终位于相同的代码段中(主程序、子程序或中断例行程序)。您不能从主程序跳转至子程序或中断例行程序中的标签,与此相似,您也不能从子程序或中断例行程序跳转至该子程序或中断例行程序之外的标签。您可以在SCR段中使用跳转指令,但对应的标签指令必须位于相同的SCR段内。,返回,后一页,前一页,4循环指令,在控制系统中经常遇到需要重复执行若干次同样的任务的情况,这时可以使用循环指令。 FOR指令表示循环的开始,NEXT指令表示循环的结束,并将堆栈的栈顶值设为1。驱动FOR指令的逻辑条件满足时,反复执行FOR与NEXT之间的指令。在FOR指令中,需要设置当前循环次数计数器(INDX)、起始值(INIT)和结束值(FINAL)。 假设INIT等于1,FINAL等于10,每次执行FOR与NEXT之间的指令后,INDX的值加1,并将结果与结束值比较。如果INDX大于结束值,则循环终止,FOR与NEXT之间的指令将被执行10次。如果起始值大于结束值,则不执行循环。,返回,后一页,前一页,图中的I2.0接通时,执行100次标有1的外层循环,I2.0和I2.1同 时接通时,每次外循环都执行2次标有2的内层循环。,返回,后一页,前一页,下面是使用FOR/NEXT循环的注意事项: (1)如果启动了FOR/NEXT循环,除非在循环内部修改了结束值,否则循环就一直进行,直到循环结束。在循环的执行过程中,可以改变循环的参数 (2)再次启动循环时,它将初始值INIT传送到指针INDX中。 FOR指令必须与NEXT指令配套使用。允许循环嵌套,即FORNEXT循环在另一个FORNEXT循环之中,最多可嵌套8层。,返回,后一页,前一页,5. 子程序(例),调用子程序(CALL)指令将控制转换给子程序(SBR_n)。在子程序完成执行后。控制返回至“调用子程序”之后的指令。子程序嵌套最多八层。 可以使用带参数或不带参数的“调用子程序”指令,每个子程序调用的输入输出参数最大限制为16。将参数值指定给子程序中的局部内存时应遵守下列规则。 参数值指定给局部内存的顺序由CALL指定,参数从L.0开始。 一至八位连续位参数值被指定给从Lx.0开始持续至Lx.7的单字节。 字节、字和双字数值被指定给局部内存,位于字节边界(LBx、LWx或LDx)位置。,返回,后一页,前一页,在带参数的调用子程序指令中,参数必须与子程序局部变量表中定义的变量完全匹配。参数顺序必须以输入参数开始,其次是输入输出参数,然后是输出参数。,返回,后一页,前一页,3.2.5 运算类指令 1 比较指令,返回,后一页,前一页,比较指令用来比较两个数IN1与IN2的大小。在梯形图中,满足比较关系式给出的条件时,触点接通。在语句表中,满足条件时,将堆栈顶置1。 字节比较指令用来比较两个无符号数字节IN1与IN2的大小;整数比较指令用来比较两个字IN1与IN2的大小,最高位为符号位,例如16#7FFF16#8000(后者为负数);双字整数比较指令用来比较两个双字INl1与IN2的大小,双字整数比较是有符号的,16#7FFFFFFF16#80000000(后者为负数);实数比较指令用来比较两个实数IN1与IN2的大小,实数比较是有符号的。,返回,后一页,前一页,例如一自动仓库存放某种货物,最多6000箱,需对所存的货物进出计数。货物多于1000箱,灯L1亮;货物多于5000箱,灯L2亮。 其中,L1和L2分别受Q0.0和Q0.1控制,数值1000和5000分别存储在VW20和VW30字存储单元中。 本控制系统的程序如图3.32所示。,返回,后一页,前一页,图3.32 自动仓库的控制程序,返回,后一页,前一页,2加法和减法指令 (1)+I,整数加法指令。 使能输入有效时,将两个单字长(16位)的符号整数IN1和IN2相加,产生一个16位整数结果OUT。 (2)+D,双整数加法指令。 使能输入有效时,将两个双字长(32位)的符号双整数IN1和IN2相加,产生一个32位双整数结果OUT。 (3)+R,实数加法指令。 使能输入有效时,将两个双字长(32位)的实数IN1和IN2相加,产生一个32位实数结果OUT。,返回,后一页,前一页,返回,后一页,前一页,减法指令是对有符号数进行相减操作。包括:整数减法、双整数减法和实数减法。这三种减法指令与所对应的加法指令除运算法则不同之外,其他方面基本相同。,返回,后一页,前一页,3.乘法和除法指令 (1)*I,整数乘法指令。使能输入有效时,将两个单字长(16位)的符号整数IN1和IN2相乘,产生一个16位整数结果OUT。 (2)MUL,完全整数乘法指令。使能输入有效时,将两个单字长(16位)的符号整数IN1和IN2相乘,产生一个32位双整数结果OUT。 (3)*D,双整数乘法指令。使能输入有效时,将两个双字长(32位)的符号整数IN1和IN2相乘,产生一个32位双整数结果OUT。 (4)*R,实数乘法指令。使能输入有效时,将两个双字长(32位)的实数IN1和IN2相乘,产生一个32位实数结果OUT。,返回,后一页,前一页,返回,后一页,前一页,3.2.6 数学函数指令 1.平方根,SQRT,平方根指令。把一个双字长(32位)的实数IN开平方,得到32位的实数结果。 在LAD和FBD中,以指令盒形式编程,执行结果:SQRT(IN)=OUT。 在STL中,执行结果:SQRT(IN)=OUT。 指令格式:SQRT IN,OUT 例:SQRT VD0,AC0,返回,后一页,前一页,2.自然对数,LN,自然对数指令。将一个双字长(32位)的实数IN取自然对数,得到32位的实数结果。,返回,后一页,前一页,应用实例: 求以10为底的50(存于VD0)的常用对数,结果放到AC0。 本运算程序如图3.33所示。,返回,后一页,前一页,3.指数,EXP,指数指令。将一个双字长(32位)的实数IN取以e为底的指数,得到32位的实数结果OUT。 在LAD和FBD中,以指令盒形式编程,执行结果:EXP(IN)=OUT。 在STL中,执行结果:EXP(IN)=OUT。 指令格式:EXPIN, OUT 例:EXPVD0, AC0,返回,后一页,前一页,4.正弦、余弦、正切,SIN、COS、TAN,即正弦、余弦、正切指令。将一个双字长(32位)的实数弧度值IN分别取正弦、余弦、正切,各得到32位的实数结果。 如果已知输入值为角度,要先将角度值转化为弧度值,方法:使用(*R)MUL_R指令用角度值乘以/180即可。,返回,后一页,前一页,应用实例:求COS160的值(见图3-34)。,图3.34 求COS160的值的程序,返回,后一页,前一页,3.2.7增减指令 1. 字节增和字节减,INCB,字节增指令。使能输入有效时,把一字节长的无符号输入数(IN)加1,得到一字节的无符号输出结果OUT。 DECB,字节减指令。使能输入有效时,把一字节长的无符号输入数(IN)减1,得到一字节的无符号输出结果OUT。,返回,后一页,前一页,2. 字增和字减,INCW,字增指令。使能输入有效时,把一字长(16位)的有符号输入数(IN)加1,得到一字长的有符号输出结果OUT。 DECW,字减指令。使能输入有效时,把一字长的有符号输入数(IN)减1,得到一字长的有符号输出结果OUT,返回,后一页,前一页,3. 双字增和双字减,INCD,双字增指令。使能输入有效时,把双字长(32位)的有符号输入数(IN)加1,得到双字长的有符号输出结果OUT。 DECD,双字减指令。使能输入有效时,把双字长的有符号输入数(IN)减1,得到双字长的有符号输出结果OUT。,返回,后一页,前一页,4. 应用实例 :食品加工厂对饮料生产线上的盒装饮料进行计数,每24盒为一箱,要求能记录生产的箱数。,图3.35 盒装饮料计数程序,返回,后一页,前一页,3.2.8 逻辑运算 1. 字节逻辑运算,字节逻辑运算包括字节与、字节或、字节异或、字节取反。 AND(与运算)字节(ANDB)指令对两个输入数值(IN1和IN2)的对应位执行AND(与运算)操作,并在内存位置(OUT)中载入结果。OR(或运算)字节(ORB)指令对两个输入数值(IN1和IN2)的对应位执行OR(或运算)操作,并在内存位址(OUT)中载入结果。Exclusive OR(异-或运算)字节(XORB)指令对两个输入数值(IN1和IN2)的对应位执行XOR(异-或运算)操作,并在内存位置(OUT)中载入结果。,返回,后一页,前一页,2. 字逻辑运算,字逻辑运算包括字与、字或、字异或、字取反(INV)。 AND(与运算)字(ANDW)指令对两个输入数值(IN1和IN2)的对应位执行AND(与运算)操作,并在内存位置(OUT)载入结果。OR(或运算)字(ORW)指令对两个输入数值的对应位执行OR(或运算)操作,并在内存位置(OUT)载入结果。Exclusive OR(异-或运算)字(XORW)指令对两个输入数值(IN1和IN2)的对应位执行XOR(异-或运算)操作,并在内存位置(OUT)载入结果。,返回,后一页,前一页,图3.36 字逻辑运算实例,返回,后一页,前一页,3. 双字逻辑运算,双字逻辑运算包括双字与、双字或、双字异或、双字取反。 AND(与运算)双字(ANDD)指令对两个双字输入值的对应位执行AND(与运算)操作,并在双字中载入结果(OUT)。OR(或运算)双字(ORD)指令对两个双字输入值的对应位执行OR(或运算)操作,并在双字中载入结果(OUT)。Exclusive OR(异-或运算)双字(XORD)指令对两个双字输入值的对应位执行XOR操作,并在双字中载入结果(OUT)。,返回,后一页,前一页,3.2.9传送类指令,1. 单一传送 (1)MOVB,字节传送指令 移动字节(MOVE)指令将输入字节(IN)移至输出字节(OUT),不改变原来的数值。 (2)MOVW,字传送指令 移动字(MOVW)指令将输入字(IN)移至输出字(OUT),不改变原来的数值。 (3)MOVD,双字传送指令 移动双字(MOVD)指令将输入双字(IN)移至输出双字(OUT),不改变原来的数值。,返回,后一页,前一页,移动字节立即读取指令读取实际输入IN(作为字节),并将结果写入OUT,但进程映像寄存器未更新。,(5)BIR,传送字节立即读指令,(4)MOVR,实数传送指令 移动实数(MOVR)指令将32位、实数输入双字(IN)移至输出双字(OUT),不改变原来的数值。,返回,后一页,前一页,移动字节立即写入(BIW)指令从位置IN读取数值并写入(以字节为单位)实际输出OUT,以及对应的进程图像位置。,(6)BIW,传送字节立即写指令,返回,后一页,前一页,2. 块传送,(1)BMB,字节块传送指令 成块移动字节(BMB)指令将字节数目(N)从输入地址(IN)移至输出地址(OUT)。N的范围为1至255。 (2)BMW,字块传送指令 成块移动字(BMW)指令将字数目(N)从输入地址(IN)移至输出地址(OUT)。 (3)BMD,双字块传送指令 成块移动双字(BMD)指令将双字数目(N)从输入地址(IN)移至输出地址(OUT)。N的范围是1至255。,返回,后一页,前一页,3.2.10移位指令 1. 左移和右移 (1)字节左移和字节右移,SLB和SRB,字节左移和字节右移。使能输入有效时,把字节型输入数据IN左移或右移N位后,再将结果输出到OUT所指的字节存储单元。最大实际可移位次数为8。,返回,后一页,前一页,移位指令对每个移出位补0。如果移位数目(N)大于或等于8,则数值最多被移位8次。如果移位数目大于0,溢出内存位(SM1.1)采用最后一次移出位的数值。如果移位操作结果为0,设置0内存位(SM1.0)。右移和向左移字节操作不带符号。,返回,后一页,前一页,(2)字左移和字右移,SLW和SRW,字左移和字右移。指令盒与字节移位比较,只有名称变为SHR_W和SHR_W。使能输入有效时,把字型输入数据IN左移或右移N位后,再将结果输出到OUT所指的字存储单元。最大实际可移位次数为16。 指令格式:SLW OUT, N(字左移) SRW OUT, N(字右移) 例:SLWMW0, 2 SRW LW0, 3,返回,后一页,前一页,(3)双字左移和双字右移,SLD和SRD,双字左移和双字右移。指令盒与字节移位比较,只有名称变为SHL_DW和SHR_DW,其他部分完全相同。使能输入有效时,把双字型输入数据IN左移或右移N位后,再将结果输出到OUT所指的双字存储单元。最大实际可移位次数为32。 指令格式:SLD OUT, N(双字左移) SRDOUT, N(双字右移) 例:SLDMD0, 2 SRD LD0, 3,返回,后一页,前一页,2. 循环左移、循环右移 循环左移和循环右移根据所循环移位的数的长度分别又可分为字节型、字型、双字型。 循环移位特点: 移位数据存储单元的移出端与另一端相连,同时又与SM1.1(溢出)相连,所以最后被移出的位被移到另一端的同时,也被放到SM1.1位存储单元。例如在循环右移时,移位数据的最右端位移入最左端,同时又进入SM1.1。SM1.1始终存放最后一次被移出的位。,返回,后一页,前一页,循环移位的类型: (1)字节循环左移 和字节循环右移,返回,后一页,前一页,(2)字循环左移和字循环右移,返回,后一页,前一页,返回,后一页,前一页,(3)双字循环左移和双字循环右移,返回,后一页,前一页,3. 寄存器移位(例(229) ) SHRB,寄存器移位指令。,该指令在梯形图中有3个数据输入端:DATA为数值输入, 将该位的值移入移位寄存器;S_BIT为移位寄存器的最低位端;N指定移位寄存器的长度。每次使能输入有效时,整个移位寄存器移动1位。 移位特点: 移位寄存器长度在指令中指定,没有字节型、字型、双字型之分。可指定的最大长度为64位,可正也可负。,返回,后一页,前一页,4. 字节交换指令,SWAP,字节交换指令。使能输入有效时,将字型输入数据IN的高字节和低字节进行交换。 本指令只对字型数据进行处理,指令的执行不影响的特殊存储器位。 指令格式:SWAP IN(字节交换) 例:SWAP VW10,返回,后一页,前一页,5. 填充指令(例),FILL,存储器填充指令。使能输入有效时,用字型输入数据IN填充从输出OUT所指的单元开始的N个字存储单元。 填充指令只对字型数据进行处理,N值为字节型,可取从1255的整数。指令的执行不影响的特殊存储器位。 指令格式: FILL IN, OUT, N(填充指令) 例:FILL10, VW100, 12 本条指令的执行结果是:将数据10填充到从VW100到VW122共12个字存储单元。,
展开阅读全文