第6章PLC的功能指令6.1S7-200的指令规约6.1.1使能输入与使能输出图6-1EN与ENOLDI2.4MOVWVW10,VW14//VW10→VW14AENO/IVW12,VW14//VW14/VW12→VW14AENOMOVBVB0,VB2//VB0→VB2除数VW12为0时无能流流出。删除AENO后两个方框变为并联。6.1.2梯形图中的网络与指令一个网络中只能有一块独立电路。如果一个网络有两块独立电路,在编译的时候会显示“无效网络或网络太复杂无法编译”。STL程序可以不使用网络,但是只有将STL程序正确地划分为网络,才能将STL程序转换成梯形图程序。必须有能流流入才能执行的功能图或线圈指令称为条件输入指令,它们不能直接连接到左侧母线上。如果需要无条件地执行这些指令,可以用接在左侧母线上的SM0.0的常开触点来驱动它们。有的线圈或功能图的执行与能流无关,例如标号指令LBL和顺序控制指令SCR等,称为无条件输入指令,应将它们直接接在母线上。输入语句表指令时必须使用英文的标点符号。6.2程序控制指令1.条件结束指令(END)与停止指令(STOP)2.监控定时器复位指令(WDR)3.循环指令(FOR,NEXT)4.跳转指令(JMP,LBL)5.诊断LED指令(DIAG_LED)图6-3跳转与标号指令I2.1JMPLBL44…图6-2循环指令【例6-1】在I0.5的上升沿,求VB10~VB29中20个字节的异或值。网络1LDI0.5EU//在I0.5的上升沿MOVB0,AC0//清累加器0MOVD&VB10,AC1//累加器1(存储区指针)指向VB10FORVW0,1,20//循环开始网络2LDSM0.0XORB*AC1,AC0//字节异或INCBAC1//指针AC1的值加1,指向下一个变量存储器字节网络3NEXT//循环结束网络4LDI0.5EUMOVBAC0,VB40//保存异或结果6.3局部变量表与子程序6.3.1局部变量表1.局部变量与全局变量程序中的每个程序组织单元POU(ProgramOrganizationalUnit)均有由64字节L存储器组成的局部变量表。局部变量只在它被创建的POU中有效,全局符号在各POU中均有效。局部变量有以下优点:(1)尽量使用局部变量的子程序易于移植到别的项目。(2)如果使用临时变量(TEMP),同一片物理存储器可以在不同的程序中重复使用。2.局部变量的类型TEMP(临时变量):暂时保存在局部数据区中的变量。主程序或中断程序的局部变量表只有TEMP变量。IN(输入变量):由调用它的POU提供的传入子程序的输入参数。OUT(输出变量):子程序返回给调用它的POU的输出参数。IN_OUT(输入_输出变量):其初始值由调用它的POU提供,并用同一变量将子程序的执行结果返回给调用它的POU。3.局部变量的地址分配4.在局部变量表中增加新的变量5.局部变量的数据类型检查6.3.2子程序的编写与调用1.子程序的作用子程序将程序分成容易管理的小块,使程序结构简单清晰,易于查错和维护。子程序调用是有条件的,可以多次调用,使用子程序可以减少扫描时间。2.子程序的创建3.子程序的调用举例分裂条图6-5局部变量表与模拟量计算子程序图6-6在主程序中调用子程序LDI0.4CALL模拟量计算,AIW2,VW20,+2356,VD404.子程序的有条件返回5.子程序中的定时器(1ms,10ms,100ms)6.4数据处理指令6.4.1比较指令图6-9比较指令图6-10自复位接通延时定时器例子:用接通延时定时器和比较指令组成占空比可调的脉冲发生器6.4.2数据传送指令(见表6-3传送指令)1.字节、字、双字和实数的传送2.字节立即读指令MOV_BIR读取1个字节的物理输入,但是不刷新输入过程映像寄存器;字节立即写指令MOV_BIW写1个字节的物理输出,同时刷新相应的输出过程映像寄存器。3.字节、字、双字的块传送指令“BMBVB20,VB100,4”指令将VB20~VB23中的数据被传送到VB100~VB103。4.字节交换指令:交换输入字的高字节与低字节。6.4.3移位与循环指令1.右移位和左移位指令2.循环右移位和循环左移位指令3.移位寄存器指令图6-12移位与循环移位指令图6-13移位寄存器指令6.4.4数据转换指令1.段译码指令2.数字转换指令3.实数转换为双整数的指令:ROUND将实数四舍五入后转换为双字整数,TRUNC是截位取整指令。4.译码指令5.编码指令6.ASCII码与十六进制数的转换7.整数转换为ASCII码8.双整数转换为ASCIIA码9.实数转换为ASCII码10.整数、双整数与实数转换为字符串11.子字符串转换为数字量6.4.5表功能指令1.填表指令图6-18填表指令举例图6-19查表指令举例命令参数CMD=1~4,分别代表“=”、“”(不等于)、“”和“”。图6-20先入先出指令举例图6-21后入先出指令举例图6-22存储器填充指令6.4.6读写实时时钟指令读实时时钟指令TODR从实时钟读取当前时间和日期,并把它们装入以T为起始地址的8字节缓冲区,依次存放年、月、日、时、分、秒、0和星期,1为星期日,2~7为星期1~6。写实时时钟指令TODW将起始地址为T的8字节缓冲区中的时间和日期写入实时钟。【例6-5】出现事故时,I0.0的上升沿产生中断,使输出Q1.0立即置位,同时将事故发生的日期和时间保存在VB10~VB17中。//主程序OB1LDSM0.1//第一次扫描时ATCH0,0//指定在I0.0的上升沿执行0号中断程序ENI//允许全局中断//中断程序0(INT_0)LDSM0.0//该位总是为ONSIQ1.0,1//使Q1.0立即置位TODRVB10//读实时时钟6.5数学运算指令6.5.1数学运算指令梯形图:IN1+IN2=OUT,IN1-IN2=OUT,IN1*IN2=OUT,IN1/IN2=OUT语句表:IN1+OUT=OUT,OUT-IN1=OUT,IN1*OUT=OUT,OUT/IN1=OUT有16位整数运算、32位双整数运算、实数运算和加1、减1指令。整数乘、除法的操作数为两个16位整数,乘积或商均为16位,不保留余数。双整数乘、除法的操作数和运算结果均为32位。此外还有MUL:整数乘法产生双整数指令。DIV:整数除法产生双整数指令。两个16位整数相除,结果的高16位为余数,低16位为商。【例6-8】在输入信号I0.4的上升沿,用模拟电位器0来设置定时器T37的设定值(5~20s),即从SMB28读出的数字0~255对应于5~20s。设读出的数字为N,100ms定时器的设定值为(200–50)×N/255+50=150×N/255+50(0.1s)网络1LDI0.4EU//在I0.4的上升沿MOVBSMB28,AC0MUL+150,AC0//150乘以模拟电位器的转换值/D+255,AC0//除以255,双整数除法+I+50,AC0//加偏移量50(5s)MOVWAC0,VW10网络2LDI0.5TONT37,VW10//T37以VW10中的数值为设定值6.5.2浮点数函数运算指令包括正弦指令SIN、余弦指令COS和正切指令TAN,自然对数指令LN和自然指数指令EXP。角度的单位为弧度。6.5.3逻辑运算指令【例6-9】在I0.0的上升沿执行下面程序中的逻辑运算,运算前后各存储单元中的值如图6-27所示。LDI0.0EUINVBVB0//字节取反指令ANDBVB1,VB2//字节与指令ORBVB3,VB4//字节或指令XORBVB5,VB6//字节异或指令6.6中断程序与中断指令6.6.1中断程序中断允许指令ENI允许处理所有被连接的中断事件。禁止中断指令DISI禁止处理所有中断事件。进入RUN模式时自动禁止中断,中断程序越短越好。6.6.2中断事件与中断指令中断连接指令ATCH建立中断事件(EVNT)与对应的中断程序(INT)的联系。中断事件由中断事件号指定(见表6-12),中断程序由中断程序号指定。中断分离指令DTCH断开中断事件与中断程序之间的联系。中断优先级(见表6-12)分组:通信(最高优先级)、I/O中断和定时中断。I/O中断:I0.0~I0.3上升沿、下降沿中断;HSC当前值等于设定值、计数方向改变和计数器外部复位中断;输出完指定的脉冲数时产生的中断。图6-28中断指令定时中断0/1的周期为1~255ms,分别写入SMB34和SMB35。每当定时时间到时,执行相应的定时中断程序。定时器T32/T96中断的时间周期最大为32.767s。【例6-11】在I0.0的上升沿通过中断使Q0.0立即置位。在I0.1的下降沿通过中断使Q0.0立即复位。//主程序OB1LDSM0.1//第一次扫描时ATCHINT_0,0//I0.0上升沿时执行0号中断程序ATCHINT_1,3//I0.1下降沿时执行1号中断程序ENI//允许全局中断//中断程序0(INT_0)LDSM0.0//该位总是为ONSIQ0.0,1//使Q0.0立即置位//中断程序1(INT_1)LDSM0.0//该位总是为ONRIQ0.0,1//使Q0.0立即复位【例6-12】用定时中断0实现周期为2s的高精度定时。//主程序OB1LDSM0.1//第一次扫描时MOVB0,VB10//将中断次数计数器清0MOVB250,SMB34//设定时中断0的中断时间间隔为250msATCHINT_0,10//指定产生定时中断0时执行0号中断程序ENI//允许全局中断//中断程序INT_0,每隔250ms中断一次LDSM0.0//该位总是为ONINCBVB10//中断次数计数器加1LDB=8,VB10//如果中断了8次(2s)MOVB0,VB10//将中断次数计数器清0INCBQB0//每2s将QB0加16.7高速计数器与高速脉冲输出指令6.7.1编码器高速计数器一般与增量式编码器配合使用,双通道A、B相型编码器提供转速和转轴旋转方向的信息。三通道增量式编码器的Z相零位脉冲用作系统清零信号,或坐标的原点,以减少测量的积累误差。图6-29A、B相型编码器的输出波形6.7.2高速计数器的工作模式与外部输入信号(1)无外部方向输入信号的单相加/减计数器(模式0~2):用控制字节控制计数方向。(2)有外部方向输入信号的单相加/减计数器(模式3~5)。(3)有加计数时钟脉冲和减计数时钟脉冲输入的双相计数器(模式6~8)。(4)A/B相正交计数器(模式9~11)。图6-301倍速正交模式操作举例图6-314倍速正交模式操作举例根据有无复位输入和启动输入,上述的4类工作模式又可以各分为3种。高速计数器的外部输入信号见表6-16。6.7.3高速计数器的程序设计【例6-13】用指令向导生成HSC0的初始化程序和中断程序,HSC0为无外部方向输入信号的单相加/减计数器(模式0),计数值为10000~20000时Q4.0输出为1。(用编程软件演示)6.7.4高速脉冲输出与开环位置控制占空比:脉冲宽度与脉冲周期之比。脉冲列(PTO)功能提供周期与脉冲数目可以由用户控制的占空比为50%的方波脉冲输出。脉冲宽度调制(PWM)功能提供连续的、周期与脉冲宽度可以由用户控制的输出。图6-34位置控制系统的速度与加减速时间CPU有两个PTO/PWM发生器,分别通过Q0.0或Q0.1输出高速脉冲。(演示用位置控制向导生成PWM指令PWMx_RUN)。(演示用位置控制向导组态脉冲列输出PTO的包络曲线)。