480 likes | 698 Views
第 4 章 PLC 功能指令及应用. 4.1 数据传送指令及应用 4.2 程序控制指令及应用 4.3 移位指令及应用 4.4 子程序的编写及调用 4.5 算术运算、逻辑运算指令 4.6 功能指令综合应用. 4.1 数据传送指令及应用. 4.1.1 单一数据传送指令 该类指令包含:字节传送指令( MOVB )、字传送指令( MOVW )、双字传送指令( MOVD )和实数传送指令( MOVR )四条指令。
E N D
第4章 PLC功能指令及应用 • 4.1 数据传送指令及应用 • 4.2 程序控制指令及应用 • 4.3 移位指令及应用 • 4.4 子程序的编写及调用 • 4.5 算术运算、逻辑运算指令 • 4.6 功能指令综合应用
4.1 数据传送指令及应用 • 4.1.1 单一数据传送指令 • 该类指令包含:字节传送指令(MOVB)、字传送指令(MOVW)、双字传送指令(MOVD)和实数传送指令(MOVR)四条指令。 • 其功能是当使能输入有效时(即EN=1时),分别将一个字节、字、双字或实数从IN传送到OUT所指的存储单元中。在传送过程中数据的大小不被改变。传送后,输入存储器IN中的内容也不改变。 • 影响允许输出ENO 正常工作的错误条件是:SM4.3(运行时间),0006(间接寻址错误)。单一数据传送指令格式如表4-1所示。
4.1 数据传送指令及应用 字节传送指令(MOVB)、字传送指令(MOVW) 双字传送指令(MOVD) 实数传送指令(MOVR)
4.1 数据传送指令及应用 • 4.1.2 字节立即传送指令 • 该类指令包含字节立即读指令(BIR)和字节立即写指令(BIW)两条。 • BIR指令在使能输入有效时,立即读取当前物理输入存储区中由IN指定的字节,并将其传送到OUT所指定的存储单元中,但不更新输入映像寄存器。 • BIW指令在使能输入有效时,从IN所指定的存储单元中读取1个字节的数据并写入物理输出OUT指定的输出地址,同时刷新对应的输出映像寄存器。 • 影响允许输出ENO 正常工作的错误条件是:0006(间接寻址错误),SM4.3(运行时间)。另外,要特别注意的是,字节立即传送指令不能访问扩展模块。
4.1 数据传送指令及应用 • 4.1.3 数据块传送指令 • 数据块传送指令包括字节块传送指令(BMB)、字块传送指令(BMW)、双字块传送指令(BMD)三条。该类指令一次可进行多个数据(1~255个)的传送。 • 当使能输入有效,将从输入地址IN开始的N个连续数据(字节、字或双字)传送到输出地址OUT指定的地址开始的N个单元中。N的取值范围为1至255,数据类型为字节型。 • 影响允许输出ENO 正常工作的错误条件是:SM4.3(运行时间)、0006(间接寻址错误)、0091(操作数超出范围)。
4.1 数据传送指令及应用 • LD I0.1 //I0.1有效时,执行以下操作 • MOVB VB1, VB2 //字节VB1中的数据传送到字节VB2中 • MOVW VW1, VW2 //字VW1中的数据传送到字VW2中 • MOVD VD1, VD2 //双字VD1中的数据传送到双字VD2中 • BMB VB10, VB20, 5 //将字节VB10开始的连续5个字节的数据送到 • //VB20开始的连续5个字节中 • BMW VW10, VW20, 5 //将字VW10开始的连续5个字的数据送到 • //VW20开始的连续5个字中 • BMD VD10, VD20, 5 //将双字VD10开始的连续5个双字的数据送到 • //VD20开始的连续5个双字中 • 图4-1 数据传送指令的应用举例
4.2 程序控制指令及应用 • 4.2.1 结束指令 • 结束指令有两条:条件结束指令(END)和无条件结束指令(MEND)。其功能是结束主程序,并返回到主程序的起点。结束指令没有操作数,只能在主程序中使用,不能在子程序或中断程序中使用。 • 条件结束指令(END)在梯形图中不能直接与左母线相连,而无条件结束指令(MEND)在梯形图中要直接与左母线相连。条件结束指令是用在无条件结束指令前以结束主程序。在调试程序时,可以在程序的适当位置插入MEND指令进行程序的分段调试。 • 用Micro/Win32编程软件编程时,软件会在主程序的结尾自动生成MEND指令。用户不需要手工输入无条件结束指令。
4.2 程序控制指令及应用 • 4.2.2 暂停指令 • 暂停指令(STOP)功能是指当使能输入有效时,使CPU工作方式由RUN转换到STOP,从而停止执行用户程序。STOP指令可以用在主程序、子程序以及中断程序中。若在中断程序中执行STOP指令,则该中断立即终止,并且忽略所有挂起的中断,继续执行主程序的剩余部分,在执行结束后,工作方式将从RUN切换到STOP。
4.2 程序控制指令及应用 • 4.2.3 看门狗复位指令 • 在S7-200中设有一看门狗定时器,其定时时间为500ms。每次扫描看门狗都会被系统自动复位一次。而看门狗复位指令(WDR,又称警戒时钟刷新指令)是用于重新触发看门狗定时器,以延长扫描周期的时间,防止出现看门狗错误。 • 正常工作时,如果扫描周期小于500ms,看门狗不起作用。如果干扰使PLC偏离正常的程序执行路线,当看门狗定时时间一到,PLC将停止运行。 • 为了防止在正常的情况下看门狗定时器动作,可将WDR插入到程序中适当的地方,重新触发看门狗定时器。以适当延长扫描时间。
4.2 程序控制指令及应用 • 使用看门狗复位指令时应当小心。如果使用循环指令阻止扫描完成或严重延迟扫描完成,下列程序只有在扫描周期完成后才能执行:通信(自由口方式除外);I/O更新(立即I/O除外);强制更新;SM更新(不更新SM0、SM5到SM29);运行时间诊断;中断程序中的STOP 指令;超过25s的扫描时,10ms和100ms计时器对于不能正确地累计时间。图4-3所示的梯形图为END、STOP和WDR指令应用举例。
4.2 程序控制指令及应用 • 4.2.4 跳转指令 • 跳转指令可以使编程的灵活性大大提高,使CPU可以根据对不同条件的判断,选择不同的程序段执行。跳转是由跳转指令(JMP)和标号指令(LBL)配合实现的。 • 跳转指令JMP,使能输入有效时,把程序流程跳转到同一程序中指定的标号N处执行。 • 标号指令LBL,标记程序段,即指定跳转的目标位置。操作数N为0~255的字型数据。 • 跳转指令及标号必须配合使用,在同一程序块中(如同一主程序内、同一子程序内或同一中断服务程序内)。不能从主程序跳转到中断服务程序或子程序,也不能从中断服务程序或子程序跳转到主程序或其他的中断服务程序以及其他的子程序中。 • 指令格式:JMP N • LBL N
4.2 程序控制指令及应用 • 4.2.5 程序循环指令 • 采用程序循环结构可以描述需重复执行一定次数的程序段。循环指令有FOR和NEXT两条指令构成。FOR到NEXT之间的程序段我们一般称为循环体。 • 循环开始指令FOR:标记循环的开始。FOR指令的指令盒有三个数据输入段:当前值计数器INDX、循环次数初始值INIT、循环计数终止值FINAL。其中INDX的操作数为:VW,IW,QW,MW,SW,SMW,LW,T,C,AC等。INIT和FINAL的操作数为:VW,IW,QW,MW,SW,SMW ,LW,T,C,AC,AIW,常数等。 • 循环结束指令NEXT:标记循环的结束。该指令无操作数。循环指令格式图4-5所示。 • 当FOR指令使能输入EN有效时,循环体开始执行,执行到NEXT指令时返回,每执行一次循环体,INDX自加1,当INDX达到终止值FINAL时,循环结束。
4.2 程序控制指令及应用 图4-5 FOR/NEXT指令格式 程序循环指令在使用时,需注意以下几点:FOR和NEXT指令必须成对使用;循环允许嵌套,但嵌套次数不能超过8层;每次使能输入重新有效,指令自动将各参数复位;当INDX大于FINAL时,循环体不能被执行。
4.2 程序控制指令及应用 • 4.2.6 顺序控制继电器指令 • 顺序控制继电器指令可使功能图编程简单化和规范化。顺序控制程序设计包含两部分:一是定义顺序段(又称工步:一个较稳定的状态,由开始、结束和转移组成)。另一部分为设计各种顺序结构。S7-200PLC提供三条顺序控制指令。 • 顺序段开始指令(LSCR):定义一个顺序控制段开始。当Sn=1时(标志该段的状态元件为1),执行该顺序段。顺序段从SCR n开始,到SCRE指令结束。 • 顺序段结束指令(SCRE):用来结束一个顺序控制段。顺序控制段的具体程序应放在LSCR和SCRE之间。 • 顺序段转移指令(SCRT):使能输入有效时,将本顺序段的顺序控制继电器位清零,下一步顺序控制继电器位置1。
4.2 程序控制指令及应用 顺序控制指令在应用时应注意以下几个事项: ①顺序控制指令只对状态元件S有效。 ②在状态发生转移后,SCR段中的元器件一般会复位,如特殊情况输出需要保持时,可使用S/R指令。 ③同一编号的S不能用在不同的程序中。例如,如果在主程序中使用S0.4,则不能在子程序中再使用。 ④在SCR段中不能使用FOR、NEXT和END指令。 ⑤在SCR段之间中不能使用JMP和LBL指令。 图4-7 顺序控制指令示例
4.2 程序控制指令及应用 • 顺序控制指令在应用时应注意以下几个事项: • ①顺序控制指令只对状态元件S有效。 • ②在状态发生转移后,SCR段中的元器件一般会复位,如特殊情况输出需要保持时,可使用S/R指令。 • ③同一编号的S不能用在不同的程序中。例如,如果在主程序中使用S0.4,则不能在子程序中再使用。 • ④在SCR段中不能使用FOR、NEXT和END指令。 • ⑤在SCR段之间中不能使用JMP和LBL指令。
4.2 程序控制指令及应用 • 4.2.7 与ENO指令 • ENO是梯形图和功能框图编程时指令盒的布尔能流输出端。如果指令盒的能流输入有效,同时执行没有错误,ENO就置位,并将能流向下传递。ENO可以作为允许位表示指令执行成功。在语句表语言中用AENO指令描述,没有操作数。 • 当用梯形图编程时,指令盒后串联一个指令盒或线圈,图4-8为与ENO指令使用举例。 • 指令格式:AENO(无操作数)
4.3 移位指令及应用 • 4.3.1 左、右移位指令 • 左、右移位指令是将指定的无符号数按要求进行左移或右移。移位数据存储单元的移出端与溢出标志存储器SM1.1相连,最后移出的位被放到SM1.1中。另一端自动补0。移位次数与移位数据的长度有关,如果所要移位次数大于数据的位数,超出的次数无效。例如字右移时,若移位次数设为18,则实际只能移16次,多余的2次无效。如果移位后结果为0,则零存储器标志位SM1.0置位为1。 • 1.左移位指令(SHL):使能输入有效时,将输入IN的无符号数(字节、字或双字)中的各位向左移N位后,移出位自动补0,将结果输出到OUT所指定的存储单元中。最后一次移出位保存在溢出存储器位SM1.1中。 • 2.右移位指令(SHR):使能输入有效时,将输入IN的无符号数(字节、字或双字)中的各位向右移N位后,移出位自动补0,将结果输出到OUT所指定的存储单元中。最后一次移出位保存在溢出存储器位SM1.1中。 • 数据类型:输入输出均为字节(字或双字),N为字节型数据。左、右移位指令中,使ENO = 0的错误条件:0006(间接寻址错误),SM4.3(运行时间)。
4.3 移位指令及应用 左移位指令 右移位指令
4.3 移位指令及应用 • 4.3.2 循环移位指令 • 循环移位指令包括循环左移指令(ROL)和循环右移指令(ROR)两类。其数据类型可以为字节、字或双字。循环移位指令的数据存储单元首尾是相连的,同时移出端又与溢出标志SM1.1相连,所以最后被移出的位在移到另一端的同时,也被放到SM1.1中保存。 • 移位次数与移位数据的长度有关,如果移位次数大于移位数据的位数,则在移位之前,系统先对设定的移位次数取以移位数据的位数为底的模,取模的结果作为实际循环移位的次数。。 • 1.循环左移位指令(ROL):使能输入有效时,将IN输入无符号数(字节、字或双字)循环左移N位后,移位的结果输出到OUT所指定的存储单元中,移出的最后一位的数值送到溢出标志位SM1.1中存放。 • 2.循环右移位指令(ROR):使能输入有效时,将IN输入无符号数(字节、字或双字)循环右移N位后,移位的结果输出到OUT所指定的存储单元中,移出的最后一位的数值送到溢出标志位SM1.1中存放。 • 当需要移位的数值是零时,零标志位SM1.0将被置为1。使ENO = 0的错误条件:0006(间接寻址错误),SM4.3(运行时间)。
4.3 移位指令及应用 循环左移位指令 循环右移位指令
4.3 移位指令及应用 • 4.3.3寄存器移位指令 移位寄存器指令(SHRB)是既可以指定移位寄存器的长度又可以指定移位方向的移位指令。 该指令在梯形图中有3个数据输入端:DATA为数值输入端,将该位的值移入移位寄存器;S_BIT为移位寄存器的最低位端;N指定移位寄存器的长度,N的值可为正数也可为负数。N为正数表示左移,输入数据(DATA)移入移位寄存器的最低位(S_BIT),并移出移位寄存器的最高位。移出的数据放在SM1.1中。N为负数表示右移,输入数据移入移位寄存器的最高位中,并移出最低位(S_BIT)。移出的数据放在SM1.1中。每次使能输入有效时,整个移位寄存器按要求移动1位。移位寄存器的长度是在指令中进行指定的,没有字节、字以及双字之分。可指定的最大长度为64位。使ENO=0的错误条件有:0006(间接地址),0091(操作数超出),0092(计数区错)。
4.3 移位指令及应用 寄存器移位指令格式 寄存器移位指令举例
4.4 子程序的编写及调用 • 4.4.1 建立子程序 • 建立子程序是通过编程软件完成的,可以在“编辑”菜单,选择插入(Insert)> 子程序(Subroutine);或者在“指令树”,用鼠标右键点击"程序块"图标,并从弹出菜单选择插入(Insert)> 子程序(Subroutine);或在“程序编辑器”窗口,用鼠标右键点击并从弹出菜单选择插入(Insert)> 子程序(Subroutine)。操作完成后在指令树窗口就会出现新建的子程序图标,其默认的程序名是SBR_n(n的编号是从0开始按加1的顺序递增的)。子程序的程序名可以在图标上直接修改。编辑子程序时可直接在指令树窗口双击其图标即可进行。 • S7-200PLC中除CPU 226XM最多可以有128个子程序外,其它CPU最多可以有64个子程序。
4.4 子程序的编写及调用 • 4.4.2子程序的调用和子程序的返回 主程序可以按要求用子程序调用指令来调用指定的某个子程序,而子程序执行完必须返回主程序中。 • 1.子程序调用(CALL) 当使能输入有效时,主程序把控制权交给子程序SBR_n。子程序调用时可以带参数,也可不带参数。 • 2.子程序条件返回指令 当使能输入有效时,结束子程序执行,并返回到主程序中调用该子程序处的下一条指令继续执行。
4.4 子程序的编写及调用 3.应用举例 图4-13所示的程序是利用外部控制条件I0.0和I0.1分别调用子程序SBR_0和SBR_1。子程序SBR_0和SBR_1的内容省略。 图4-13 子程序调用举例
4.4 子程序的编写及调用 • 4.注意事项 • 1)CRET多用于子程序的内部,根据前一个逻辑来判断是否结束子程序调用,在梯形图中左边不能直接和左母线相连。而RET用于子程序的结束,在使用Micro/Win32软件进行编程时,软件自动在子程序结尾加RET,无需手动输入。 • 2)S7-200指令系统允许子程序嵌套使用,即在某个子程序的内部可以调用另一子程序。但子程序的嵌套深度最多为8级。 • 3)当一个子程序被调用时,当前的堆栈数据会被系统自动保存。并将栈顶置1,而堆栈中的其他位被清0,子程序占有控制权。当子程序执行结束后,通过返回指令自动恢复原来的逻辑堆栈值,调用程序又重新获得控制权。 • 4)累加器可在调用程序和被调用子程序之间自由传送,所以累加器的值在子程序调用时即不保存也不恢复。 • 5)在子程序中不得使用END(结束)指令。
4.4 子程序的编写及调用 • 4.4.3 带参数的子程序调用 • 子程序的调用过程如果存在数据的传递,那么在调用指令中应包含相应的参数。带参数的子程序调用增加了调用的灵活性。 • 1.子程序参数 • 子程序最多可以传递16个参数。参数包含变量名、变量类型和数据类型等信息,在子程序的局部变量表中加以定义。 • 1)变量名:最多用8个字符表示,首字符不能使用数字。 • 2)变量类型:是按变量对应数据的传递方向来划分的,可以是传入子程序(IN)、传入和传出子程序(IN/OUT)、传出子程序(OUT)和暂时变量(TEMP)4种类型。4种变量类型的参数在变量表中的位置必须按以下先后顺序排列。
4.4 子程序的编写及调用 • ①IN类型:传入子程序参数。可以是直接寻址数据(如VB110)、间接寻址数据(如*AC1)、立即数(如16#2343)或数据的地址(如﹠VB100)。 • ②IN/OUT类型:传入和传出子程序参数。调用时将指定参数位置的值传到子程序,返回时将从子程序得到的结果返回到同一地址。参数只能采用直接或间接寻址。 • ③OUT类型:传出子程序参数。将从子程序得到的结果返回到指定的参数位置。同IN/OUT类型一样,只能采用直接或间接寻址。 • ④TEMP类型:暂时变量参数。在子程序内部暂存数据的,不能用来与调用程序传递参数数据。
4.4 子程序的编写及调用 • 3)数据类型:可以是能流、布尔型、字节型、字型、双字型、整数型、双整型或实型。 • ①能流:仅允许对位输入操作,是位逻辑运算的结果。在局部变量中布尔能流输入处于所有类型的最前面。 • ②布尔型:用于单独的位输入或输出。 • ③字节、字和双字型:分别声明一个1字节、2字节、4字节的无符号输入和输出参数。 • ④整数、双整数型:分别声明一个2字节、4字节的有符号输入和输出参数。 • ⑤实型:声明一个IEEE标准的32位浮点参数。
4.4 子程序的编写及调用 • 2.调用规则 • 1)常数必须声明数据类型,如果缺少常数参数的声明,常数可能会被当做不同类型使用。例如,把223344的无符号双字作为参数传递时,必须用DW#223344进行声明。 • 2)输入或输出参数没有自动数据类型转换功能。例如,在局部变量表中声明某个参数为实型,而在调用时使用一个双字型,则子程序中的值就是双字。 • 3)参数在调用时,必须按输入、输入输出、输出、暂时变量这一顺序进行排列。
4.4 子程序的编写及调用 • 3.变量表的使用 • 按照子程序指令的调用程序,参数值分配给局部变量存储器,起始地址是L0.0。若在局部变量表中加入一个参数,可单击要加入的变量类型区可以得到一个菜单,选择“插入”,再选择“下一行”即可,系统会自动给各参数分配局部变量存储空间。 • 带参数的子程序调用指令格式: • CALL 子程序名,参数1、参数2,……,参数n。
4.4 子程序的编写及调用 4.程序举例 图4-14为一个带参数调用的子程序实例,其局部变量分配如表4-9所示。 图4-14 带参数子程序调用举例
4.4 子程序的编写及调用 表4-9 局部变量表
4.5 算术、逻辑运算指令 • 4.4.1 算术运算指令 • 1.加减法指令 • 加减法指令按操作数的类型可分为整数加减法、双整数加减法、实数加减法指令。 • 1)整数加法(ADD-I)和整数减法(SUB-I)指令是将两个16位符号整数相加或相减,产生一个16位的结果输出到OUT。 • 2)双整数加法(ADD-D)和双整数减法(SUB-D)指令是将两个32位符号整数相加或相减,产生一个32位结果输出到OUT。 • 3)实数加法(ADD-R)和实数减法(SUB-R)指令是将两个32位实数相加或相减,产生一个32位实数结果,从OUT指定的存储单元输出。 • 加减法指令的格式如表4-10所示。当IN1、IN2和OUT操作数的地址不同时,STL先用数据传送指令将IN1中的数值送入OUT,然后再执行加、减运算。当IN1或IN2=OUT时,整数加法语句表指令为:+I IN2,OUT,这样可以节省一条数据传送指令。本原则适用于所有的算术运算指令。 • 加减法指令影响算术标志位SM1.0(零标志位),SM1.1(溢出标志位)和SM1.2(负数标志位)。
4.5 算术、逻辑运算指令 • 2.乘除法指令 • 乘除法指令包含整数乘除法指令、完全整数乘除法指令、双整数乘除法指令和实数乘除法指令四类。 • 1)整数乘法指令(MUL-I):使能输入有效时,将两个16位符号整数IN1和IN2相乘,结果为一个16位整数积,从OUT指定的存储单元输出。若运算结果大于32767时,则产生溢出。 • 2)完全整数乘法指令(MUL):使能输入有效时,将两个16位符号整数IN1和IN2相乘,结果为一个32位的双整数积,从OUT指定的存储单元输出。 • 3)双整数乘法指令(MUL-D):使能输入有效时,将两个32位符号整数相乘,结果为一个32位乘积,从OUT指定的存储单元输出。若运算结果大于32位的存取范围时,则产生溢出。
4.5 算术、逻辑运算指令 • 4)实数乘法指令(MUL-R):使能输入有效时,将两个32位实数相乘,结果为一个32位积,从OUT指定的存储单元输出。 • 5)整数除法指令(DIV-I):使能输入有效时,将两个16位符号整数相除(IN1/IN2),并产生一个16位的商,从OUT指定的存储单元输出,不保留余数。如果输出结果大于一个字,则溢出位SM1.1置位为1。 • 6)完全整数除法指令(DIV):使能输入有效时,将两个16位整数相除,得出一个32位结果,从OUT指定的存储单元输出。其中高16位放余数,低16位放商。 • 7)双整数除法指令(DIV-D):使能输入有效时,将两个32位整数相除,并产生一个32位商,从OUT指定的存储单元输出,不保留余数。 • 8)实数除法指令(DIV-R):使能输入有效时,将两个32位实数相除,并产生一个32位商,从OUT指定的存储单元输出。
4.5 算术、逻辑运算指令 • 3.数学函数功能指令 • 数学函数指令包括平方根、自然对数、指数、三角函数等。除平方根指令之外,数学函数需要CPU224 1.0以上的版本支持。 • 1)平方根指令(SQRT):取一个双字节的32位实数IN的平方根,平方根也为32位实数结果,并将结果置于OUT指定的存储单元中。 • 2)自然对数指令(LN):对IN中的数值进行自然对数计算,并将结果置于OUT指定的存储单元中。 • 3)自然指数指令(EXP):将IN取以e为底的指数,并将结果置于OUT指定的存储单元中。 • 4)三角函数指令:将一个实数的弧度值IN分别求SIN、COS、TAN,得到实数运算结果,将结果置于OUT指定的存储单元中。 • 数学函数功能指令格式及功能如表4-13所示。其IN和OUT的操作数的数据类型均应为实型。
4.5 算术、逻辑运算指令 • 4.递增、递减指令 • 递增、递减指令是把输入的数据(IN)加1或减1的操作,并把结果存放在输出单元OUT中。字节递增、递减指令操作数是无符号数,字递增、递减指令是有符号的(16#8000和16#7FFF之间),双字递增、递减指令是有符号的(16#80000000和16#7FFFFFFF之间)。 • 使ENO = 0的错误条件:SM4.3(运行时间),0006(间接地址),SM1.1(溢出)。影响标志位:SM1.0 (零),SM1.1(溢出),SM1.2(负数)。
4.5 算术、逻辑运算指令 • 4.4.2 逻辑运算指令 • 逻辑运算是对无符号数按位进行与、或、异或和取反等操作。操作数的长度有字节、字、双字。指令格式如表4-15所示。 • 1.字节逻辑运算指令 • 字节逻辑运算指令包括字节逻辑与指令(WAND)、字节逻辑或指令(WOR)、字节逻辑异或指令(WXOR)、字节取反指令(INV)四条。指令格式如表4-15所示。 • (1)字节逻辑与指令WAND:将输入的两个1字节数据IN1和IN2按位相与,得到一个1字节的逻辑运算结果,放入OUT指定的存储单元中。 • (2)字节逻辑或指令WOR:将输入的两个1字节数据IN1和IN2按位相或,得到一个1字节的逻辑运算结果,放入OUT指定的存储单元中。 • (3)字节逻辑异或指令WXOR:将输入的两个1字节数据IN1和IN2按位相异或,得到的1字节的逻辑运算结果,放入OUT指定的存储单元中。 • (4)字节取反指令INV:将输入一个1字节数据IIN按位取反,将得到的1字节的逻辑运算结果,放入OUT指定的存储单元。
4.5 算术、逻辑运算指令 • 2.字逻辑运算指令 • 字逻辑运算指令包括字逻辑与指令(ANDW)、字逻辑或指令(ORW)、字逻辑异或指令(XORW)、字取反指令(INVW)四条。指令格式如表4-15所示。其操作数均为1字长的逻辑数。算法和结果的存放位置和字节逻辑运算指令相同。 • 3.双字逻辑运算指令 • 双字逻辑运算指令包括双字逻辑与指令ANDD、双字逻辑或指令ORD、双字逻辑异或指令XORD、双字取反指令INVD四条。指令格式如表4-15所示。其操作数均为双字长的逻辑数。算法和结果的存放位置和字节逻辑运算指令相同。 • ENO=0的错误条件:0006(间接地址),SM4.3(运行时间)。对标志位的影响:SM1.0(零)。
4.5 算术、逻辑运算指令 图4-16 逻辑运算编程举例
4.6 功能指令综合应用 • 例1:求cos30°+sin120°的值。 • 由于S7-200提供的三角函数指令都是将一个实数的弧度值转换成相应的三角函数值。所以首先我们应将30°和120°分别转化成对应的弧度值。因为180°对应的弧度值为3.14159,可以利用实数除法指令求出每一度对应的弧度值,再利用实数乘法指令求出30°和120°对应的弧度值。然后就可以直接利用三角函数指令进行运算。参考程序如图4-17所示。
4.6 功能指令综合应用 图4-17 4.6.1参考程序
4.6 功能指令综合应用 • 例2:利用跳转指令设计一个能实现系统手动和自动工作方式切换的程序。 • 参考程序见图4-18所示。I0.0为工作方式选择开关,当其闭合时,JMP 0执行,程序将跳过手动程序段,直接执行自动程序段和共用程序段;当I0.0为OFF时,程序执行手动程序段和共用程序段,跳过自动程序段。该程序可以应用在生产线等控制上的手动与自动切换。
4.6 功能指令综合应用 • 例3:如图4-19所示为小车运动的示意图。设小车初始停在左边,当按下启动按钮(I0.0)后,小车自动右移,移到右边后,暂停3s再左移至左边停止。试写出梯形图程序。 图4-19 小车运动的示意图
4.6 功能指令综合应用 • 份析小车的工作过程可将该过程分为:等待初始步、右行步、暂停步和左行步四步,启动按钮I0.0、右限位开关I0.1、左限位开关I0.2和定时器触点为各步之间的转换条件。参考程序如图4-20所示。在程序执行的首次扫描时,状态S0.0被激活,当启动按钮按下后,状态S0.0被复位,状态S0.1被激活。在状态S0.1中Q0.1为ON,即小车右行。直到小车运行到最右边,右限位开关I0.1导通,使状态S0.1被复位,状态S0.2被激活。在状态S0.2中利用T37计时3s。计时结束后,T37的常开触点闭合激活S0.3,并复位状态S0.2。在状态S0.2中Q0.0为ON,小车左移至左限位开关I0.2闭合,再次激活状态S0.0,并复位状态S0.3。小车停在左边等待下一次启动信号。