5.4 字逻辑运算指令及应用 KnY、KnM、KnS、T、C、D、V、Z D P K、H、KnX、KnY、KnM、KnS、T、C、D、V、Z S1、S2 FNC26 WAND D 操作数字“与”指令 5.4.1 逻辑字“与”指令WAND 表5.17	WAND指令 1.字“与”指令WAND的说明 (1)S1、S2为作相“与”逻辑运算的源操作数,D为存储“与”逻辑运算结果的目标操作数。 (2)字“与”指令的功能是将两个源操作数的数据,进行二进制按位相“与”,并将运算结果存入目标操作数。 2.字“与”指令WAND举例 假设要求用输入继电器X0~X4的位状态去控制输出继电器Y0~Y4,可用字元件K2X0去控制字元件K2Y0。对字元件多余的控制位X5、X6和X7,可与0相“与”进行屏蔽。程序如图5.23所示。 图5.23 应用字“与”指令的程序 图5.24 字“与”指令的位运算过程 KnY、KnM、KnS、T、C、D、V、Z D P K、H、KnX、KnY、KnM、KnS、T、C、D、V、Z S1、S2 FNC27 WOR D 操作数字“或”指令 5.4.2 逻辑字“或”指令WOR 表5.18	WOR指令 1.字“或”指令WOR的说明 (1)S1、S2为两个相“或”的源操作数,D为存储“或”逻辑结果的目标操作数。 (2)指令的功能是将两个源操作数的数据,进行二进制按位相“或”,并将运算结果存入目标操作数。 2.字“或”指令WOR举例 要求用输入继电器组成的字元件K2X0去控制由输出继电器组成的字元件K2Y0,但Y3、Y4位不受字元件K2X0的控制而始终处于ON状态。可用字“或”指令屏蔽X3、X4位,程序如图5.25所示。 图5.26 字“或”指令的位运算过程 图5.25 应用字“或”指令的程序 KnY、KnM、KnS、T、C、D、V、Z D P K、H、KnX、KnY、KnM、KnS、T、C、D、V、Z S1、S2 FNC28 WXOR D 操作数字“异或”指令 5.4.3 逻辑字“异或”指令WXOR 表5.19	WXOR指令 1.字“异或”指令WXOR的说明 (1)S1、S2为两个相“异或”的源操作数,D为存储“异或”逻辑结果的目标操作数。 (2)指令的功能是将两个源操作数的数据,进行二进制按位相“异或”,并将运算结果存入目标操作数。 2.字“异或”指令WXOR举例 要求用输入继电器组成的字元件K2X0的相反状态去控制由输出继电器组成的字元件K2Y0,即X某位为“1”时,Y的相应位为“0”;X某位为“0”时,Y的相应位为“1”。程序如图5.27所示。 图5.27 应用字“异或”指令的程序 图5.28 字“异或”指令运算过程 5.5 子程序调用指令及应用 图5.29 子程序调用与返回结构 FEND 1步无FNC6 FEND SRET 1步无FNC2 SRET CALL 3步 标号P 1步 标号 P0~P62 标号 P64~P127 FNC1 CALL P 程序步操作数指令助记符 5.5.1 子程序指令CALL、SRET与主程序结束指令FEND 表5.20	CALL、SRET、FEND指令 FEND指令表示主程序结束。END是指整个程序(包括主程序和子程序)结束。一个完整的程序可以没有子程序,但一定要有主程序。 子程序编写在FEND指令的后面,以标号P开头,以返回指令SRET结束。 如果子程序调用条件满足,则中断主程序去执行子程序,标号是被调用子程序的入口地址。在子程序结束处一定要使用返回指令SRET,意思是返回主程序中断处去继续执行主程序的下一条指令语句。 在子程序中,使用定时器的范围是T192~T199。 如果在子程序中再调用其他子程序称为子程序嵌套,嵌套总数可达5级。 标号P63相当于END。 子程序调用指令CALL与跳转指令CJ不能使用相同的标号。 5.5.2 实习操作:子程序调用举例 图5.30 应用子程序调用指令的程序 程序功能是:X1、X2、X3分别接通时,将相应的数据传送到D0、D10,然后调用子程序;在子程序中,将D0、D10存储的数据相加,运算结果存储在D20,用D20存储数据控制输出字元件K1Y0。 5.6 循环指令及应用 1 无FNC9 NEXT 循环结束 3 K、H、KnX、KnY、KnM、KnS、T、C、D、V、Z FNC8 FOR 循环开始 程序步 操作数指令助记符 5.6.1 循环指令FOR、NEXT 1.循环指令FOR、NEXT的说明 FOR、NEXT指令必须成对出现,缺一不可。位于FOR、NEXT之间的程序称为循环体,在一个扫描周期内,循环体反复被执行。FOR指令的操作数用于指定循环的次数,只有执行完循环次数后,才执行NEXT的下一条指令语句。循环指令的结构如图5.31所示,图中指定循环次数为10次。2.循环指令FOR、NEXT举例 【例题5.3】 求0+1+2+3+…+100 的和,并将和存入D0。 【解】 用循环指令编写的程序如图5.32所示,D1作为循环增量。 图5.32 应用循环指令求和的程序 【例题5.4】 求0+1+2+3+…+100 的和,并将和存入D0。 图5.33 应用循环嵌套求和的程序 循环指令的脉冲执行方式 图5.34 循环指令的脉冲执行方式 在本例中,每按下一次按钮接通X0时,执行一次循环指令,数据寄存器D0中存储的数据就增加10。 5.6.2 变址寄存器V、Z 图5.35 变址操作举例 5.6.3 实习操作:循环、变址和子程序调用举例 设数据寄存器D0、D1、D2、D3存储数据分别为2,3,?1,7。求它们的代数和,将运算结果存入D10,并用此结果控制输出位组件K1Y0。X0是计算控制端,X1是清0控制端,操作程序如图5.36所示。 图5.36 应用循环、变址、子程序调用指令求和的程序 5.7 比较指令的应用与时钟控制程序 5.7.1 接点比较指令 S1大于等于S2 S1≥ S2 LD>= 230 S1小于等于S2 S1≤ S2 LD