第5章 CHAPTER 5 数据处理、运算指令 PLC产生初期主要用于在工业控制中以逻辑控制来代替继电器控制。随着计算机技术与PLC技术的不断发展与融合,PLC增加了数据处理功能,使其在工业应用中功能更强,应用范围更广。在当今自动化程度越来越高的加工生产线中,仅仅具备基本指令的功能是远远不够的,还应该具备数据处理和运算的功能。 5.1数据处理指令 数据处理指令涉及对数据的非数值运算操作,主要包括数据传送、字节交换、存储器填充、字节立即读写、移位、转换等指令。 5.1.1数据传送指令 该类指令用来完成各存储单元之间一个或者多个数据的传送。可分为单个数据传送指令和数据块传送指令。 1. 字节、字、双字、实数单个数据传送(MOV)指令 单个数据传送指令用来传送单个的字节、字、双字、实数。指令格式及功能如表51所示。 表51MOV指令格式 LAD STLMOVB IN,OUTMOVW IN,OUTMOVD IN,OUTMOVR IN,OUT 操作数及 数据类型 IN: VB,IB,QB,MB,SB,SMB,LB,AC及常量; OUT: VB,IB,QB,MB,SB,SMB,LB,AC IN: VW,IW,QW,MW,SW,SMW,LW,T,C,AIW,AC及常量; OUT: VW,T,C,IW,QW,SW,MW,SMW,LW,AC,AQW IN: VD,ID,QD,MD,SD,SMD,LD,HC,AC及常量; OUT: VD,ID,QD,MD,SD,SMD,LD,AC IN: VD,ID,QD,MD,SD,SMD,LD,AC及常量; OUT: VD,ID,QD,MD,SD,SMD,LD,AC 数据类型: 字节数据类型: 字、整数数据类型: 双字、双整数数据类型: 实数 续表 功能使能输入有效时,即EN=1时,将一个输入IN的字节、字/整数、双字/双整数或实数送到OUT指定的存储器输出。在传送过程中不改变数据的大小。传送后,输入存储器IN中的内容不变 【提示】使ENO=0,即使能输出断开的错误条件是: SM4.3(运行时间)、0006(间接寻址错误)。 【例51】单个数据传送指令MOV程序举例。 (1) 将数据255传送到VB1里面。程序如图51所示。 图51MOV_B指令(例51题图) 设计分析: 当I0.1接通时,MOV_B指令将数据255传给VB1,传送后,VB1=255,此后,即使I0.1断开,VB1里的数据保持255不变。 (2) 将变量存储器VW10中的内容送到VW100中。程序如图52所示。 图52MOV_W指令(例51题图) (3) 在I0.1控制开关导通时,将VD100中的双字数据传送到VD200中。程序如图53所示。 图53MOV_DW指令(例51题图) (4) 在I0.1控制开关导通时,将常数3.14传送到双字单元VD200中。程序如图54所示。 图54MOV_R指令(例51题图) (5) 定时器及计数器当前值的读取。程序如图55所示。 图55定时器及计数器当前值的读取(例51题图) (6) 定时器(计数器)设定值的间接指定。程序如图56所示。 图56定时器设定值的间接指定(例51题图) 【提示】由于定时器及计数器的数据类型都为整数型,因此使用传送指令时一定要用MOV_W。 【提示】功能指令涉及的数据类型多,编程时应保证操作数在合理范围内。S7200 PLC不支持完全数据类型检查。操作数的数据类型应与指令标识符相匹配。 2. 字节、字、双字、实数数据块传送(BLKMOV)指令 该类指令可用来进行一次多个(最多255)数据的传送。数据块传送指令将从输入地址IN开始的N个数据传送到输出地址OUT开始的N个单元中,N的范围为1~255,N的数据类型为字节。指令格式及功能如表52所示。 表52BLKMOV指令格式 LAD STLBMBIN,OUTBMWIN,OUTBMDIN,OUT 续表 操作数及 数据类型 IN: VB,IB,QB,MB,SB,SMB,LB; OUT: VB,IB,QB,MB,SB,SMB,LB; 数据类型: 字节IN: VW,IW,QW,MW,SW,SMW,LW,T,C,AIW; OUT: VW,IW,QW,MW,SW,SMW,LW,T,C,AQW; 数据类型: 字 IN/OUT: VD,ID,QD,MD,SD,SMD,LD; 数据类型: 双字 N: VB,IB,QB,MB,SB,SMB,LB,AC及常量; 数据类型: 字节; 数据范围: 1~255 功能使能输入有效时,即EN=1时,把从输入IN开始的N个字节(字、双字)传送到以输出OUT开始的N个字节(字、双字)中 【提示】使ENO=0的错误条件: 0006(间接寻址错误)、0091(操作数超出范围)。 【例52】块传送指令BLKMOV程序举例。将变量存储器VB1开始的3个字节(VB1~VB3)中的数据移至VB11开始的3个字节中(VB11~VB13)。程序如图57所示。 图57例52题图 5.1.2字节交换、存储器填充与字节立即读写指令 1. 字节交换与存储器填充指令 字节交换指令用来交换输入字IN的最高位字节和最低位字节,交换结果仍存在输入端(IN)指定的地址中。 存储器填充指令在EN端口执行条件存在时,用IN指定的输入值填充从OUT指定的存储单元开始的N个字的存储空间。多用于字数据存储区填充及对空间的清零。指令格式如表53所示。 表53字节交换指令使用格式及功能 LADSTL功能及说明 SWAP IN功能: 使能输入EN有效时,将输入字IN的高字节与低字节交换,结果仍放在IN中; IN: VW,IW,QW,MW,SW,SMW,T,C,LW,AC; 数据类型: 字 续表 LADSTL功能及说明 FILL IN,OUT,N功能: 将字型输入数据从OUT开始的N个字存储单元中; IN: VW,IW,QW,MW,SW,SMW,LW,T,C,AIW,AC,常数,*VD,*AC,*LD; OUT: VW,IW,QW,MW,SW,SMW,LW,T,C,AQW,*VD,*AC,*LD; N: VB,IB,QB,MB,SB,SMB,LB,AC,常数,*VD,*AC,*LD; 数据类型: IN、OUT为字型,N为字节型,取值范围为1~255的整数 【提示】ENO=0的错误条件: 0006(间接寻址错误)、SM4.3(运行时间)。 【例53】字节交换和存储器填充指令应用举例,如图58~图510所示。 (1) 字节交换指令。 图58字节交换指令(例53题图) 分析: 指令执行之前VW50中的字为D6 C3; 指令执行之后VW50中的字为C3 D6。 (2) 存储器填充指令。 图59VM200~VM219中全部清0(例53题图) 分析: 指令执行之后,VW200~VW219中全部清0。 另外,如果将VW100开始的256字节全部清0。N怎么给? 图510VM100开始的256字节全部清0(例53题图) 分析: 在I0.1控制开关导通时,将VW100开始的256字节全部清0。 2. 字节立即读写指令 字节立即读(MOVBIR)指令在EN端口执行条件存在时,读取实际物理输入端IN给出的1字节的数值,并将结果写入OUT所指定的存储单元,但输入映像寄存器未更新。 字节立即写(MOVBIW)指令在EN端口执行条件存在时,从输入IN所指定的存储单元中读取1字节的数值并写入实际输出OUT端的物理输出点,同时刷新对应的输出映像寄存器。指令格式及功能如表54所示。 表54字节立即读写指令格式 LADSTL功能及说明 BIR IN,OUT功能: 字节立即读 IN: IB OUT: VB,IB,QB,MB,SB,SMB,LB,AC 数据类型: 字节 BIW IN,OUT功能: 字节立即写 IN: VB,IB,QB,MB,SB,SMB,LB,AC,常量 OUT: QB 数据类型: 字节 【提示】使ENO=0的错误条件: 0006(间接寻址错误)、SM4.3(运行时间)。注意字节立即读写指令无法存取扩展模块。 5.1.3移位指令 移位指令分为左、右移位和循环左、右移位及寄存器移位指令三大类。前两类移位指令按移位数据的长度又分字节型、字型、双字型3种。常用于顺序动作的控制。 1. 左、右移位指令 左、右移位数据存储单元与SM1.1(溢出)端相连,移出位被放到特殊标志存储器SM1.1位。移位数据存储单元的另一端补0。移位指令格式见表55。 移位指令使用时应注意以下几点。 (1) 被移位的数据在字节操作时是无符号的; 对于字和双字操作,当使用有符号数据类型时,符号位也将被移动。 (2) 在移位时,存放被移位数据的编程元件的移出端与特殊继电器SM1.1相连,移出位送SM1.1,另一端补0。 (3) 移位次数N为字节型数据,它与移位数据的长度有关。如N小于实际的数据长度,则执行N次移位;如N大于数据长度,则执行移位的次数等于实际数据长度的位数。 (4) 左、右移位指令对特殊继电器的影响: 结果为零置位SM1.0,结果溢出置位SM1.1。 (5) 运行时刻出现不正常状态则置位SM4.3,ENO=0。 表55移位指令格式及功能 LAD STLSLBOUT,N SRBOUT,NSLW OUT,N SRW OUT,NSLDOUT,N SRDOUT,N 操作数及 数据类型 IN: VB,IB,QB,MB,SB,SMB,LB,AC及常量; OUT: VB,IB,QB,MB,SB,SMB,LB,AC; 数据类型: 字节 IN: VW,IW,QW,MW,SW,SMW,LW,T,C,AIW,AC及常量; OUT: VW,IW,QW,MW,SW,SMW,LW,T,C,AC; 数据类型: 字 IN: VD,ID,QD,MD,SD,SMD,LD,AC,HC及常量; OUT: VD,ID,QD,MD,SD,SMD,LD,AC; 数据类型: 双字 N: VB,IB,QB,MB,SB,SMB,LB,AC及常量; 数据类型: 字节; 数据范围: N≤数据类型(B、W、D)对应的位数 功能SHL: 字节、字、双字左移N位; SHR: 字节、字、双字右移N位 (1) 左移位指令。 使能输入有效时,将输入IN的无符号数字节、字或双字中的各位向左移N位后(右端补0),将结果输出到OUT所指定的存储单元中。如果移位次数大于0,则最后一次移出位保存在“溢出”存储器位SM1.1。如果移位结果为0,则零标志位SM1.0置1。 (2) 右移位指令。 使能输入有效时,将输入IN的无符号数字节、字或双字中的各位向右移N位后,将结果输出到OUT所指定的存储单元中,移出位补0,最后一移出位保存在SM1.1。如果移位结果为0,零标志位SM1.0置1。 (3) 使ENO=0的错误条件: 0006(间接寻址错误)、SM4.3(运行时间)。 【例54】移位指令程序应用举例。将AC0字数据的高8位右移到低8位,输出给QB0。程序如图511所示。 图511例54题图 【提示】在STL指令中,若IN和OUT指定的存储器不同,则须首先使用数据传送指令MOV将IN中的数据送入OUT所指定的存储单元。如: MOVB IN,OUT SLB OUT,N 2. 循环左、右移位指令 循环移位将移位数据存储单元的首尾相连,同时又与溢出标志SM1.1连接,SM1.1用来存放被移出的位。指令格式见表56。 表56循环左、右移位指令格式及功能 LAD STLRLBOUT,N RRBOUT,NRLW OUT,N RRW OUT,NRLDOUT,N RRDOUT,N 操作数及 数据类型 IN: VB,IB,QB,MB,SB,SMB,LB,AC及常量; OUT: VB,IB,QB,MB,SB,SMB,LB,AC; 数据类型: 字节 IN: VW,IW,QW,MW,SW,SMW,LW,T,C,AIW,AC及常量; OUT: VW,IW,QW,MW,SW,SMW,LW,T,C,AC; 数据类型: 字 IN: VD,ID,QD,MD,SD,SMD,LD,AC,HC及常量; OUT: VD,ID,QD,MD,SD,SMD,LD,AC; 数据类型: 双字 N: VB,IB,QB,MB,SB,SMB,LB,AC及常量; 数据类型: 字节 功能ROL: 字节、字、双字循环左移N位; ROR: 字节、字、双字循环右移N位 (1) 循环左移位指令ROL。 使能输入有效时,将IN输入无符号数(字节、字或双字)循环左移N位后,将结果输出到OUT所指定的存储单元中,移出的最后一位的数值送溢出标志位SM1.1。当需要移位的数值是零时,零标志位SM1.0为1。 (2) 循环右移位指令ROR。 使能输入有效时,将IN输入无符号数(字节、字或双字)循环右移N位后,将结果输出到OUT所指定的存储单元中,移出的最后一位的数值送溢出标志位SM1.1。当需要移位的数值是零时,零标志位SM1.0为1。 【提示】移位次数N≥数据类型(B、W、D)时: 如果操作数是字节,当移位次数N≥8时,则在执行循环移位前,先对N进行模8操作(N除以8后取余数),其结果0~7为实际移动位数; 如果操作数是字,当移位次数N≥16时,则在执行循环移位前,先对N进行模16操作(N除以16后取余数),其结果0~15为实际移动位数; 如果操作数是双字,当移位次数N≥32时,则在执行循环移位前,先对N进行模32操作(N除以32后取余数),其结果0~31为实际移动位数。使ENO=0的错误条件: 0006(间接寻址错误),SM4.3(运行时间)。 【例55】移位指令程序应用举例。将AC0中的字循环右移2位,将VW200中的字左移3位。程序及运行结果如图512所示。 图512例55题图 【例56】移位指令程序应用举例。 (1) 用I0.0控制接在Q0.0~Q0.7上的8个彩灯循环移位,从左到右以0.5s的时间间隔依次点亮,保持任意时刻只有一个指示灯亮,到达最右端后,再从左到右依次点亮。 设计分析: 8个彩灯循环移位控制,可以用字节的循环移位指令。根据控制要求,首先应置彩灯的初始状态为QB0=1,即左边第一盏灯亮; 接着灯从左到右以0.5s的时间间隔依次点亮,即要求字节QB0中的1用循环左移位指令每0.5s移动一位,因此须在ROLB指令的EN端接一个0.5s的移位脉冲(用定时器指令实现)。梯形图程序和语句表程序如图513所示。 图513例56题图(1) (2) 用I0.0控制16个彩灯循环移位,从左到右以2s的时间间隔依次2个为一组点亮; 保持任意时刻只有2个灯亮,到达最右端后,再依次点亮,按下I0.1后,彩灯循环停止。 设计分析: 16个彩灯分别接Q0.0~Q1.7,可以用字的循环移位指令,进行循环移位控制。根据控制要求,首先应置彩灯的初始状态为QW0=3,即左边第1、2盏灯亮; 接着灯从左到右以2s的时间间隔依次点亮,即要求字节QW0中的11用循环左移位指令每2s移动两位,因此须在ROLW指令的EN端接一个2s的移位脉冲。梯形图程序和语句表程序如图514所示。 图514例56题图(2) 3. 移位寄存器指令 移位寄存器指令是可以指定移位寄存器的长度和移位方向的移位指令,其指令格式如表57所示。 在梯形图中,EN为使能输入端,连接移位脉冲信号,每次使能有效时,整个移位寄存器移动1位。 表57移位寄存器指令指令格式 LADSTL说明 SHRB DATA,S_BIT,NDATA和S_BIT: I,Q,M,SM,T,C,V,S,L,数据类型为BOOL变量; N: VB,IB,QB,MB,SB,SMB,LB,AC及常量,数据类型为字节 移位寄存器指令SHRB将DATA数值移入移位寄存器,并进行移位。DATA为数据输入端,连接移入移位寄存器的二进制数值,执行指令时将该位的值移入寄存器。 移位寄存器是由S_BIT和N决定的。S_BIT指定移位寄存器的最低位。N指定移位寄存器的长度和移位方向,移位寄存器的最大长度为64位,N为正值表示左移位,输入数据(DATA)移入移位寄存器的最低位(S_BIT),并移出移位寄存器的最高位。移出的数据被放置在溢出内存位(SM1.1)中。N为负值表示右移位,输入数据移入移位寄存器的最高位中,并移出最低位(S_BIT)。移出的数据被放置在溢出内存位(SM1.1)中。 【提示】使ENO=0的错误条件: 0006(间接地址)、0091(操作数超出范围)、0092(计数区错误)。移位指令影响特殊内部标志位: SM1.1(为移出的位值设置溢出位)。 【例57】移位寄存器指令程序举例。在输入触点I0.1的上升沿,从VB100的低4位(自定义移位寄存器)由低向高移位,I0.2移入最低位,其梯形图、时序图如图515所示。 图515例57题图 设计分析: 建立移位寄存器的位范围为V100.0~V100.3,长度N=+4。在I0.1的上升沿,移位寄存器由低位向高位移位,最高位移至SM1.1,最低位由I0.2移入。移位寄存器指令对特殊继电器影响为结果为零置位SM1.0、溢出置位SM1.1; 运行时刻出现不正常状态置位SM4.3,ENO=0。 【例58】用PLC实现模拟喷泉的控制。用灯L1~L12分别代表喷泉的12个喷水注。 控制要求: 按下起动按钮后,隔灯闪烁,L1亮0.5s后灭,接着L2亮0.5s后灭,接着L3 图516喷泉控制示意图(例58题图) 亮0.5s后灭,接着L4亮0.5s后灭,接着L5、L9亮0.5s后灭,接着L6、L10亮0.5s后灭,接着L7、L11亮0.5s后灭, 接着L8、L12亮0.5s后灭,L1亮0.5s后灭,如此循环下去,直至按下停止按钮,如图516所示。 设计分析: (1) I/O分配。 输入输出 起动按钮: I0.0;L1: Q0.0;L5、L9: Q0.4; 停止按钮: I0.1;L2: Q0.1;L6、L10: Q0.5; L3: Q0.2;L7、L11: Q0.6; L4: Q0.3;L8、L12: Q0.7 (2) 梯形图程序。 利用移位寄存器实现模拟控制。移位寄存器的位与输出对应关系设置: 根据喷泉模拟控制的8位输出(Q0.0~Q0.7),须指定一个8位的移位寄存器(M10.1~M11.0),移位寄存器的SBIT位为M10.1,并且移位寄存器的每一位对应一个输出。在移位寄存器指令中,EN连接移位脉冲,每来一个脉冲的上升沿,移位寄存器移动一位。移位寄存器应0.5s移一位,因此需要设计一个0.5s产生一个脉冲的脉冲发生器(由T38构成),如图517所示。 图517移位寄存器的位与输出对应关系图(例58题图) M10.0为数据输入端DATA,根据控制要求,每次只有一个输出,因此只需要在第1个移位脉冲到来时由M10.0送入移位寄存器S_BIT位(M10.1)一个1,第2~8个脉冲到来时由M10.0送入M10.1的值均为0,这里时间继电器T38构成0.5s产生一个机器扫描周期脉冲的脉冲发生器,如图518所示。 图518喷泉模拟控制移位脉冲时序图(例58题图) 在程序中由定时器T37延时0.5s导通一个扫描周期实现,第8个脉冲到来时M11.0置位为1,同时通过与T37并联的M11.0常开触点使M10.0置位为1,在第9个脉冲到来时由M10.0送入M10.1的值又为1,如此循环下去,直至按下停止按钮。按下停止按钮(I0.1),触发复位指令,使M10.1~M11.0的8位全部复位。梯形图程序如图519所示。 图519喷泉模拟控制梯形图(例58题图) 5.1.4转换指令 在实际控制过程中,经常要对不同类型的数据进行运算,数据运算指令中要求参与运算的数值为同一类型,为了实现数据处理时的数据匹配,所以要对数据格式进行转换。 转换指令是指对操作数的不同类型进行转换,并输出到指定目标地址中。转换指令包括数据的类型转换、数据的编码和译码指令以及字符串类型转换指令。 不同功能的指令对操作数要求不同。类型转换指令可实现字节与字整数之间的转换、整数与双整数的转换、双字整数与实数之间的转换、BCD码与整数之间的转换等。 在S7200中,转换指令是指对操作数的不同类型及编码进行相互转换的操作,以满足程序设计的需要。 1. 字节与字整数之间的转换 字节与字整数之间转换的转换格式、功能及说明如表58所示。 表58字节与字整数之间的转换指令 LAD STLBTIIN,OUTITBIN,OUT 操作数及 数据类型IN: VB,IB,QB,MB,SB,SMB,LB,AC及常量,数据类型为字节; OUT: VW,IW,QW,MW,SW,SMW,LW,T,C,AC,数据类型为整数 IN: VW,IW,QW,MW,SW,SMW,LW,T,C,AIW,AC及常量,数据类型为整数; OUT: VB,IB,QB,MB,SB,SMB,LB,AC,数据类型为字节 功能及 说明BTI指令将字节数值(IN)转换成整数值,并将结果置入OUT指定的存储单元。因为字节不带符号,所以无符号扩展ITB指令将字整数(IN)转换成字节,并将结果置入OUT指定的存储单元。输入的字整数0~255被转换。超出部分导致溢出,SM1.1=1。输出不受影响 ENO=0 的错误 条件0006间接地址; SM4.3运行时间0006间接地址; SM1.1溢出或非法数值; SM4.3运行时间 2. 字整数与双字整数之间的转换 字整数与双字整数之间的转换格式、功能及说明如表59所示。 表59字整数与双字整数之间的转换指令 LAD STLITDIN,OUTDTIIN,OUT 操作数及 数据类型 IN: VW,IW,QW,MW,SW,SMW,LW,T,C,AIW,AC及常量; 数据类型: 整数; OUT: VD,ID,QD,MD,SD,SMD,LD,AC; 数据类型: 双整数 IN: VD,ID,QD,MD,SD,SMD,LD,HC,AC及常量; 数据类型: 双整数; OUT: VW,IW,QW,MW,SW,SMW,LW,T,C,AC; 数据类型: 整数 续表 功能及 说明ITD指令将整数值(IN)转换成双整数值,并将结果置入OUT指定的存储单元。符号被扩展DTI指令将双整数值(IN)转换成整数值,并将结果置入OUT指定的存储单元。如果转换的数值过大,则无法在输出中表示,产生溢出SM1.1=1,输出不受影响 ENO=0 的错误 条件0006间接地址; SM4.3运行时间0006间接地址; SM1.1溢出或非法数值; SM4.3运行时间 3. 双整数与实数之间的转换 双整数与实数之间进行转换的转换格式、功能及说明如表510所示。 表510双整数与实数之间的转换指令 LAD STLDTRIN,OUTROUNDIN,OUTTRUNCIN,OUT 操作数及 数据类型IN: VD,ID,QD,MD,SD,SMD,LD,HC,AC及常量,数据类型为双整数; OUT: VD,ID,QD,MD,SD,SMD,LD,AC,数据类型为实数 IN: VD,ID,QD,MD,SD,SMD,LD,AC及常量,数据类型为实数; OUT: VD,ID,QD,MD,SD,SMD,LD,AC,数据类型为双整数 IN: VD,ID,QD,MD,SD,SMD,LD,AC及常量,数据类型为实数; OUT: VD,ID,QD,MD,SD,SMD,LD,AC,数据类型为双整数 功能及 说明DTR指令将32位带符号整数IN转换成32位实数,并将结果置入OUT指定的存储单元 ROUND指令按小数部分四舍五入的原则,将实数(IN)转换成双整数值,并将结果置入OUT指定的存储单元TRUNC(截位取整)指令按将小数部分直接舍去的原则,将32位实数(IN)转换成32位双整数,并将结果置入OUT指定存储单元 ENO=0 的错误 条件0006间接地址; SM4.3运行时间0006间接地址; SM1.1溢出或非法数值; SM4.3运行时间0006间接地址; SM1.1溢出或非法数值; SM4.3运行时间 【提示】不论是四舍五入取整,还是截位取整,如果转换的实数数值过大,无法在输出中表示,则产生溢出,即影响溢出标志位,使SM1.1=1,输出不受影响。 【例59】双整数与实数之间的转换应用举例。将VW10中的整数100和VD100中的实数190.5相加。梯形图和语句表如图520所示。 图520例59题图 【例510】整数、双整数与实数之间的转换应用举例。要求: 将in转换为cm,已知VW100的当前值为in的计数值,1in=2.54cm。 设计分析: VW100中的整数值in→双整数in→实数in→实数cm→整数cm。梯形图和语句表如图521所示。 图521例510题图 4. BCD码与整数的转换 BCD码与整数之间进行转换的指令格式、功能及说明如表511所示。 表511BCD码与整数之间的转换指令 LAD STLBCDIOUTIBCDOUT 操作数及数据类型IN: VW,IW,QW,MW,SW,SMW,LW,T,C,AIW,AC及常量; OUT: VW,IW,QW,MW,SW,SMW,LW,T,C,AC; IN/OUT数据类型: 字 功能及说明BCD_I指令将二进制编码的十进制数IN转换成整数,并将结果送入OUT指定的存储单元。IN的有效范围是BCD码 0~9999I_BCD指令将输入整数IN转换成二进制编码的十进制数,并将结果送入OUT指定的存储单元。IN的有效范围是0~9999 ENO=0的错误条件0006: 间接地址; SM1.6: 无效BCD数值; SM4.3: 运行时间 【提示】①数据长度为字的BCD格式的有效范围为: 0~9999(十进制),0000~9999(十六进制),0000 0000 0000 0000~1001 1001 1001 1001(BCD码)。②指令影响特殊标志位SM1.6(无效BCD)。③在表511的LAD和STL指令中,IN和OUT的操作数地址相同。若IN和OUT操作数地址不是同一个存储器,则对应的语句表指令为 MOVINOUT BCDIOUT 5. 译码和编码指令 译码和编码指令的格式和功能如表512所示。 表512译码和编码指令的格式和功能 LAD STLDECO IN,OUTENCO IN,OUT 操作数及数据类型IN: VB,IB,QB,MB,SMB,LB,SB,AC,常量,数据类型为字节; OUT: VW,IW,QW,MW,SMW,LW,SW,AQW,T,C,AC,数据类型为字 IN: VW,IW,QW,MW,SMW,LW,SW,AIW,T,C,AC,常量,数据类型为字; OUT: VB,IB,QB,MB,SMB,LB,SB,AC,数据类型为字节 功能及说明译码指令根据输入字节(IN)的低4位表示的输出字的位号,将输出字相对应的位置位为1,输出字的其他位均置位为0编码指令将输入字(IN)最低有效位(其值为1)的位号写入输出字节(OUT)的低4位中 ENO=0的错误条件0006间接地址; SM4.3运行时间 【例511】译码编码指令程序应用举例。 设计分析: 若(AC2)=2,执行译码指令,则将输出字VW40的第2位置1,VW40中的二进制数为2#0000 0000 0000 0100; 若(AC3)=2#0000 0000 0000 0100,执行编码指令,则输出字节VB50中的错误码为2。梯形图和语句表如图522所示。 图522译码编码指令程序应用举例(例511题图) 6. 七段显示译码指令 七段显示器的abcdefg段分别对应于字节的第0~6位,字节的某位为1时,其对应的段亮; 输出字节的某位为0时,其对应的段暗。将字节的第7位补0,则构成与七段显示器相对应的8位编码,称为七段显示码。数字0~9、字母A~F与七段显示码的对应如图523所示。 图523与七段显示码对应的代码 七段译码指令SEG将输入字节16#0~F转换成七段显示码。指令格式如表513所示。 表513七段显示译码指令 LADSTL功能及操作数 SEG IN,OUT功能: 将输入字节(IN)的低4位确定的十六进制数(十六#0~F)产生相应的七段显示码,送入输出字节OUT; IN: VB,IB,QB,MB,SB,SMB,LB,AC,常量; OUT: VB,IB,QB,MB,SMB,LB,AC; IN/OUT数据类型: 字节 【提示】使ENO=0的错误条件: 0006(间接地址)、SM4.3(运行时间)。 【例512】编写实现用七段显示码显示数字0的程序。梯形图和语句表如图524所示。 图524例512题图 设计分析: 程序运行结果为AC1中的值为16#3F(2#0011 1111)。 7. ASCII码与十六进制数之间的转换指令 ASCII码与十六进制数之间的转换指令的格式和功能如表514所示。 表514ASCII码与十六进制数之间的转换指令的格式和功能 LAD STLATH IN,OUT,LENHTA IN,OUT,LEN 操作数及数据类型IN/OUT: VB,IB,QB,MB,SB,SMB,LB,数据类型为字节; LEN: VB,IB,QB,MB,SB,SMB,LB,AC及常量;数据类型为字节,最大值为255 功能及说明ASCII至HEX(ATH)指令将从IN开始的长度为LEN 的ASCII字符转换成十六进制数,放入从OUT开始的存储单元HEX至ASCII (HTA)指令将从输入字节(IN)开始的长度为LEN的十六进制数转换成ASCII字符,放入从OUT开始的存储单元 ENO=0的错误条件0006间接地址; SM4.3运行时间; 0091操作数范围超界; SM1.7非法ASCII数值(仅限ATH) 【提示】合法的ASCII码对应的十六进制数包括30H~39H、41H~46H。如果在ATH指令的输入中包含非法的ASCII码,则终止转换操作,特殊内部标志位SM1.7置位为1。 【例513】编程将VB100~VB103中存储的4个ASCII码转换成十六进制数。已知(VB100)= 33,(VB101)=32,(VB102)=41,(VB103)=45。梯形图和语句表如图525所示。 设计分析: 程序运行结果如下。 执行前: (VB100)=33,(VB101)=32,(VB102)=41,(VB103)=45。 执行后: (VB200)=32,(VB201)=AE。 可见将VB100~VB103中存放的4个ASCII码33、32、41、45转换成了十六进制数32和AE,放在VB200和VB201中。 图525例513题图 5.2算术运算、逻辑运算指令 随着控制领域中新型控制算法的出现和复杂控制对控制器计算能力的要求,新型PLC中普遍增加了较强的计算功能。数据运算指令分为算术运算和逻辑运算两大类。 算术运算指令包括加、减、乘、除运算和数学函数变换,逻辑运算指令包括逻辑与或非指令等。 5.2.1算术运算指令 1. 整数与双整数加减法指令 整数加法(ADDI)和减法(SUBI)指令是使能输入有效时,将两个16位符号整数相加或相减,并产生一个16位的结果输出到OUT。 双整数加法(ADDD)和减法(SUBD)指令是使能输入有效时,将两个32位符号整数相加或相减,并产生一个32位结果输出到OUT。 整数与双整数加减法指令格式如表515所示。 表515整数与双整数加减法指令格式 LAD STLMOVW IN1,OUT +I IN2,OUTMOVW IN1,OUT -I IN2,OUTMOVD IN1,OUT +D IN2,OUTMOVD IN1,OUT -D IN2,OUT 功能IN1+IN2=OUTIN1-IN2=OUTIN1+IN2=OUTIN1-IN2=OUT 操作数及 数据类型IN1/IN2: VW,IW,QW,MW,SW,SMW,T,C,AC,LW,AIW,常量,*VD,*LD,*AC; OUT: VW,IW,QW,MW,SW,SMW,T,C,LW,AC,*VD,*LD,*AC; 数据类型: 整数 IN1/IN2: VD,ID,QD,MD,SMD,SD,LD,AC,HC,常量,*VD,*LD,*AC; OUT: VD,ID,QD,MD,SMD,SD,LD,AC,*VD,*LD,*AC; 数据类型: 双整数 ENO=0的 错误条件0006间接地址; SM4.3运行时间; SM1.1溢出 注意: (1) 当IN1、IN2和OUT操作数的地址不同时,在STL指令中,首先用数据传送指令将IN1中的数值送入OUT,然后再执行加、减运算,即OUT+IN2=OUT,OUT-IN2=OUT。为了节省内存,在整数加法的梯形图指令中,可以指定IN1或IN2=OUT,这样可以不用数据传送指令。如指定IN1=OUT,则语句表指令为: +IIN2,OUT; 如指定IN2=OUT,则语句表指令为: +IIN1,OUT。在整数减法的梯形图指令中,可以指定IN1=OUT,则语句表指令为: -IIN2,OUT。这个原则适用于所有的算术运算指令,且乘法和加法对应,减法和除法对应。 (2) 整数与双整数加减法指令影响算术标志位SM1.0(零标志位)、SM1.1(溢出标志位)和SM1.2(负数标志位)。 【提示】在梯形图编程和指令表编程时对存储单元的要求是不同的,所以在使用时一定要注意存储单元的分配。梯形图编程时,IN2和OUT指定的存储单元可以相同也可以不同; 指令表编程时,IN2和OUT要使用相同的存储单元。 【例514】求300加200的和,300在数据存储器VW100中,结果放入AC0。梯形图和语句表如图526所示。 图526例514题图 【例515】在程序初始化时,设AC1为1000,合上I0.0开关,AC1的值每隔10s减100,一直减到0为止。梯形图和语句表如图527所示。 图527例515题图 2. 整数乘除法指令 整数乘法(MULI)指令是在使能输入有效时,将两个16位符号整数相乘,并产生一个16位积,从OUT指定的存储单元输出。 整数除法(DIVI)指令是在使能输入有效时,将两个16位符号整数相除,并产生一个16位商,从OUT指定的存储单元输出,不保留余数。如果输出结果大于一个字,则溢出位SM1.1置位为1。 双整数乘法(MULD)指令是在使能输入有效时,将两个32位符号整数相乘,并产生一个32位乘积,从OUT指定的存储单元输出。 双整数除法(DIVD)指令是在使能输入有效时,将两个32位整数相除,并产生一个32位商,从OUT指定的存储单元输出,不保留余数。 整数乘法产生双整数(MUL)指令是在使能输入有效时,将两个16位整数相乘,得出一个32位乘积,从OUT指定的存储单元输出。 整数除法产生双整数(DIV)指令是在使能输入有效时,将两个16位整数相除,得出一个32位结果,从OUT指定的存储单元输出。其中高16位放余数,低16位放商。 整数乘除法指令格式如表516所示。 表516整数乘除法指令格式 LAD STLMOVW IN1, OUT *I IN2,OUTMOVW IN1, OUT /I IN2,OUTMOVD IN1, OUT *D IN2,OUTMOVD IN1, OUT /D IN2,OUTMOVW IN1, OUT MUL IN2, OUTMOVW IN1, OUT DIV IN2, OUT 功能IN1*IN2= OUTIN1/IN2= OUTIN1*IN2= OUTIN1/IN2= OUTIN1*IN2= OUTIN1/IN2= OUT 说明: 整数、双整数乘除法指令操作数及数据类型和加减运算的相同。 整数乘法、除法产生双整数指令的操作数。 IN1/IN2: VW,IW,QW,MW,SW,SMW,T,C,LW,AC,AIW,常量,*VD,*LD,*AC。 数据类型: 整数。 OUT: VD,ID,QD,MD,SMD,SD,LD,AC,*VD,*LD,*AC。 数据类型: 双整数。 使ENO=0的错误条件: 0006(间接地址)、SM1.1(溢出)、SM1.3(除数为0)。 对标志位的影响: SM1.0(零标志位)、SM1.1(溢出)、SM1.2(负数)、SM1.3(被0除)。 【例516】乘/除法指令应用举例,梯形图和语句表如图528所示。 图528例516题图 【提示】因为VD100包含VW100和VW102两个字,VD200包含VW200和VW202两个字,所以在语句表指令中不需要使用数据传送指令。 3. 实数加减乘除指令 实数加法(ADDR)、减法(SUBR)指令是将两个32位实数相加或相减,并产生一个32位实数结果,从OUT指定的存储单元输出。 实数乘法(MULR)、除法(DIVR)指令是在使能输入有效时,将两个32位实数相乘(除),并产生一个32位积(商),从OUT指定的存储单元输出。 操作数IN1/IN2: VD,ID,QD,MD,SMD,SD,LD,AC,常量,*VD,*LD,*AC。 OUT: VD,ID,QD,MD,SMD,SD,LD,AC,*VD,*LD,*AC。 数据类型: 实数。 指令格式如表517所示。 表517实数加减乘除指令 LAD STLMOVD IN1,OUT +RIN2,OUTMOVD IN1,OUT -R IN2,OUTMOVD IN1,OUT *RIN2,OUTMOVD IN1,OUT /RIN2,OUT 功能IN1+IN2=OUTIN1-IN2=OUTIN1*IN2=OUTIN1/IN2=OUT ENO=0的 错误条件0006间接地址; SM4.3运行时间; SM1.1溢出0006间接地址; SM1.1溢出; SM4.3运行时间; SM1.3除数为0 对标志位 的影响SM1.0零; SM1.1溢出; SM1.2负数; SM1.3被0除 【例517】实数运算指令的应用。梯形图和语句表如图529和图530所示。 (1) 实数加/减法运算指令的应用。 图529实数加/减法运算指令(例517题图) (2) 实数乘/除法运算指令的应用。 图530实数乘/除法运算指令(例517题图) 4. 数学函数变换指令 数学函数变换指令包括平方根、自然对数、自然指数、三角函数等。 (1) 平方根(SQRT)指令。对32位实数(IN)取平方根,并产生一个32位实数结果,从OUT指定的存储单元输出。 (2) 自然对数(LN)指令。对IN中的数值进行自然对数计算,并将结果置于OUT指定的存储单元中。 求以10为底数的对数时,用自然对数除以2.302585(约等于10的自然对数)。 (3) 自然指数(EXP)指令。将IN取以e为底的指数,并将结果置于OUT指定的存储单元中。 将“自然指数”指令与“自然对数”指令相结合,可以实现以任意数为底、任意数为指数的计算。求yx,可输入以下指令: EXP (x * LN (y))。 例如: 求23为EXP(3*LN(2))=8; 求27的3次方根271/3为EXP(1/3*LN(27))=3。 (4) 三角函数指令。将一个实数的弧度值IN分别求SIN、COS、TAN,得到实数运算结果,从OUT指定的存储单元输出。 函数变换指令格式及功能如表518所示。 表518函数变换指令格式及功能 LAD STLSQRT IN,OUTLN IN,OUT EXP IN,OUTSIN IN,OUTCOS IN,OUTTAN IN,OUT 功能SQRT(IN)= OUTLN(IN)= OUTEXP(IN)= OUTSIN(IN)= OUTCOS(IN)= OUTTAN(IN)= OUT 操作数及 数据类型IN: VD,ID,QD,MD,SMD,SD,LD,AC,常量,*VD,*LD,*AC; OUT: VD,ID,QD,MD,SMD,SD,LD,AC,*VD,*LD,*AC; 数据类型: 实数 【提示】使ENO=0的错误条件: 0006(间接地址)、SM1.1(溢出)、SM4.3(运行时间)。对标志位的影响: SM1.0(零)、SM1.1(溢出)、SM1.2(负数)。 【例518】利用函数变换指令求45°正弦值。 设计分析: 先将45°转换为弧度,为(3.14159/180)*45,再求正弦值。梯形图和语句表如图531所示。 图531例518题图 【例519】利用函数变换指令求65°的正切值。 设计分析: 先将65°转换为弧度,即(3.14159/180)*65,再求正切值。梯形图和语句表如图532所示。 图532例519题图 5.2.2逻辑运算指令 逻辑运算是对无符号数按位进行与、或、异或和取反等操作。操作数的长度有B、W、DW。指令格式如表519所示。 表519逻辑运算指令格式 LAD STLANDB IN1,OUT ANDW IN1,OUT ANDD IN1,OUTORB IN1,OUT ORW IN1,OUT ORD IN1,OUTXORB IN1,OUT XORW IN1,OUT XORD IN1,OUTINVB OUT INVW OUT INVD OUT 功能IN1,IN2按位相与IN1,IN2按位相或IN1,IN2按位异或对IN取反 操 作 数 BIN1/IN2: VB,IB,QB,MB,SB,SMB,LB,AC,常量,*VD,*AC,*LD; OUT: VB,IB,QB,MB,SB,SMB,LB,AC,*VD,*AC,*LD WIN1/IN2: VW,IW,QW,MW,SW,SMW,T,C,AC,LW,AIW,常量,*VD,*AC,*LD; OUT: VW,IW,QW,MW,SW,SMW,T,C,LW,AC,*VD,*AC,*LD DWIN1/IN2: VD,ID,QD,MD,SMD,AC,LD,HC,常量,*VD,*AC,SD,*LD; OUT: VD,ID,QD,MD,SMD,LD,AC,*VD,*AC,SD,*LD (1) 逻辑与(WAND)指令。将输入IN1、IN2按位相与,得到的逻辑运算结果放入OUT指定的存储单元。 (2) 逻辑或(WOR)指令。将输入IN1、IN2按位相或,得到的逻辑运算结果放入OUT指定的存储单元。 (3) 逻辑异或(WXOR)指令。将输入IN1、IN2按位相异或,得到的逻辑运算结果放入OUT指定的存储单元。 (4) 取反(INV)指令。将输入IN按位取反,将结果放入OUT指定的存储单元。 【提示】 (1) 在逻辑运算指令中,在梯形图指令中设置IN2和OUT所指定的存储单元相同,这样对应的语句表指令如表519中所示。若在梯形图指令中,IN2(或IN1)和OUT所指定的存储单元不同,则在语句表指令中须使用数据传送指令,将其中一个输入端的数据先送入OUT,再进行逻辑运算,如 MOVB IN1,OUT ANDB IN2,OUT (2) ENO=0的错误条件: 0006(间接地址)、SM4.3(运行时间)。 (3) 对标志位的影响: SM1.0(零)。 【例520】逻辑运算指令编程举例。梯形图和语句表如图533所示。 图533例520题图 设计分析: 运算过程如下。 VB1VB2 VB2 0001 1100 WAND1100 1101→ 0000 1100 VW100VW200VW300 0001 1101 1111 1010WOR1110 0000 1101 1100→1111 1101 1111 1110 VB5VB6 0000 1111INV1111 0000 【例521】利用逻辑运算指令编程。要求: 屏蔽AC1的高8位; 然后AC1与VW100或运算结果送入VW100; AC1与AC0进行字异或,结果送入AC0; 最后,AC0字节取反后输出给QB0。梯形图和语句表如图534所示。 图534例521题图 5.2.3递增、递减指令 递增、递减指令用于对输入无符号数字节、符号数字、符号数双字进行加1或减1的操作。指令格式如表520所示。 表520递增、递减指令格式 LAD STLINCB OUTDECB OUTINCW OUTDECW OUTINCD OUTDECD OUT 功能字节加1字节减1字加1字减1双字加1双字减1 续表 操作及 数据类型IN: VB,IB,QB,MB,SB,SMB,LB,AC,常量,*VD,*LD,*AC; OUT: VB,IB,QB,MB,SB,SMB,LB,AC,*VD,*LD,*AC; 数据类型: 字节 IN: VW,IW,QW,MW,SW,SMW,AC,AIW,LW,T,C,常量,*VD,*LD,*AC; OUT: VW,IW,QW,MW,SW,SMW,LW,AC,T,C,*VD,*LD,*AC; 数据类型: 整数 IN: VD,ID,QD,MD,SD,SMD,LD,AC,HC,常量,*VD,*LD,*AC; OUT: VD,ID,QD,MD,SD,SMD,LD,AC,*VD,*LD,*AC; 数据类型: 双整数 (1) 递增字节(INCB)/递减字节(DECB)指令。 递增字节和递减字节指令在输入字节(IN)上加1或减1,并将结果置入OUT指定的变量中,递增和递减字节运算不带符号。 (2) 递增字(INCW)/递减字(DECW)指令。 递增字和递减字指令在输入字(IN)上加1或减1,并将结果置入OUT。递增和递减字运算带符号(16#7FFF > 16#8000)。 (3) 递增双字(INCDW)/递减双字(DECDW)指令。 递增双字和递减双字指令在输入双字(IN)上加1或减1,并将结果置入OUT。递增和递减双字运算带符号(16#7FFFFFFF > 16#80000000)。 【提示】①使ENO=0的错误条件: SM4.3(运行时间)、0006(间接地址)、SM1.1(溢出)。②影响标志位: SM1.0 (零)、SM1.1(溢出)、SM1.2(负数)。③在梯形图指令中,IN和OUT可以指定为同一存储单元,这样可以节省内存,在语句表指令中不需要使用数据传送指令。 【例522】利用递增、递减指令编程。控制要求: 食品加工厂对饮料生产线上的盒装饮料进行计数,每24盒为一箱,要求能记录生产的箱数。梯形图和语句表如图535所示。 图535例522题图 5.3表功能指令 数据表是用来存放字型数据的表格,如图536所示,通过专设的表功能指令可以方便地实现对表中数据的各种操作。表格的第一个字地址即首地址,为表地址,首地址中的数值是表格的最大长度(TL),即最大填表数。表格的第二个字地址中的数值是表的实际长度(EC),指定表格中的实际填表数。每次向表格中增加新数据后,EC加1。从第三个字地址开始存放数据(字)。表格最多可存放100个数据(字),不包括指定最大填表数(TL)和实际填表数(EC)的参数。 图536数据表 要建立表格,首先须确定表的最大填表数。梯形图和语句表如图537所示。 图537输入表格的最大填表数 确定表格的最大填表数后,可用表功能指令在表中存取字型数据。S7200 PLC表功能指令包括填表指令、表取数指令、表查找指令、字填充指令。表功能指令包括所有的表格读取和表格写入指令,必须用边缘触发指令激活。 5.3.1填表指令 填表(ATT)指令向表格(TBL)中增加一个字(DATA)。填表指令的格式如表521所示。 表521填表指令格式 LADSTL功能及操作数 ATTDATA,TBL 功能: 当EN有效时,将输入的字型数据填写到指定的表格中。在填表时,新数据填写到表格中最后一个数据的后面; DATA: VW,IW,QW,MW,SW,SMW,LW,T,C,AIW,AC,常量,*VD,*LD,*AC,数据类型为整数; TBL为表格的首地址: VW,IW,QW,MW,SW,SMW,LW,T,C,*VD,*LD *AC,数据类型为字 【提示】①表521中的第一个字存放表的最大长度(TL); 第二个字存放表内实际的项数(EC)。②每填入一个新数据EC自动加1。表最多可以装入100个有效数据(不包括LTL和EC)。③使ENO=0的错误条件: 0006(间接地址)、0091(操作数超出范围)、SM1.4(表溢出)、SM4.3(运行时间)。④填表指令影响特殊标志位SM1.4(填入表的数据超出表的最大长度时,SM1.4=1)。 【例523】利用填表指令编程。将VW100中的数据5678,填入首地址为VW200的数据表中。 设计分析: (1) 首地址为VW200的表存储区,表中数据在执行本指令前已经建立,表中第一字单元存放表的长度为5,第二字单元存放实际数据项2个,表中两个数据项为1234和4321。 (2) 将VW100单元的字数据5678追加到表的下一个单元(VW208)中,且EC自动加1。 梯形图、语句表及运行结果如图538所示。 图538例523题图 5.3.2表取数指令 从数据表中取数有先进先出(FIFO)和后进先出(LIFO)两种。执行表取数指令后,实际填表数EC值自动减1。 (1) 先进先出指令。移出表格(TBL)中的第一个数(数据0),并将该数值移至DATA指定存储单元,表格中的其他数据依次向上移动一个位置。 (2) 后进先出指令。将表格(TBL)中的最后一个数据移至输出端DATA指定的存储单元,表格中的其他数据位置不变。 表取数指令格式如表522所示。 表522表取数指令格式 LAD STLFIFOTBL,DATALIFOTBL,DATA 说明输入端TBL为数据表的首地址,输出端DATA为存放取出数值的存储单元 操作数及 数据类型TBL: VW,IW,QW,MW,SW,SMW,LW,T,C,*VD,*LD,*AC,数据类型为字; DATA: VW,IW,QW,MW,SW,SMW,LW,AC,T,C,AQW,*VD,*LD,*AC,数据类型为整数 【提示】使ENO=0的错误条件: 0006(间接地址)、0091(操作数超出范围)、SM1.5(空表)、SM4.3(运行时间)。对特殊标志位的影响: SM1.5(试图从空表中取数,SM1.5=1)。 【例524】利用表取数指令编程。 (1) 先进先出指令应用。 设计分析: ① 表首地址VW200单元,内容0006表示表的长度,数据3项,表中数据从VW204单元开始。 ② 在I0.0有效时,将最先进入表中的数据3256送入VW300单元,下面数据依次上移,EC减1。梯形图、语句表及运行结果如图539所示。 图539先进先出指令(例524题图) (2) 后进先出指令应用。 设计分析: ① 表首地址VW100单元,内容0006表示表的长度,数据3项,表中数据从VW104单元开始。 ② 在I0.0有效时,将最后进入表中的数据3721送入VW200单元,EC减1。 梯形图、语句表及运行结果如图540所示。 图540后进后出指令(例524题图) (3) 表取数指令综合应用。 设计分析: 在图536的数据表中,用FIFO、LIFO指令取数,将取出的数值分别放入VW300、VW400中。 梯形图、语句表及运行结果如图541所示。 图541表取数指令综合(例524题图) 图541(续) 5.3.3表查找指令 表查找(TBLFIND)指令用于在表格(TBL)中搜索符合条件的数据在表中的位置(用数据编号表示,编号范围为0~99)。其指令格式如表523所示。 表523表查找(TBLFIND)指令格式 LADSTL功能及操作数 FND=TBL,PATRN,INDX FND<> TBL,PATRN,INDX FND<TBL,PATRN,INDX FND>TBL,PATRN,INDX 功能: 在执行查表指令前,首先对INDX清0,当EN有效时,从INDX开始搜索TBL,查找符合PTN且CMD所决定的数据,每搜索一个数据项,INDX自动加1; 如果发现了一个符合条件的数据,那么INDX指向表中该数的位置。为了查找下一个符合条件的数据,在激活查表指令前,必须先对INDX加1。如果没有发现符合条件的数据,那么INDX等于EC。 TBL: 为表格的实际填表数对应的地址(第二个字地址),即高于对应的“增加至表格”“后入先出”或“先入先出”指令TBL操作数的一个字地址(2字节)。TBL操作数为VW,IW,QW,MW,SW,SMW,LW,T,C,*VD,*LD,*AC。数据类型为字。 PTN: 用来描述查表条件时进行比较的数据。PTN操作数为VW,IW,QW,MW,SW,SMW,AIW,LW,T,C,AC,常量,*VD,*LD,*AC。数据类型为整数。 INDX: 搜索指针,即从INDX所指的数据编号开始查找,并将搜索到的符合条件的数据的编号放入INDX所指定的存储器。INDX操作数为VW,IW,QW,MW,SW,SMW,LW,T,C,AC,*VD,*LD,*AC。数据类型: 字。 CMD: 比较运算符,其操作数为常量1~4,分别代表 =、<>、<,>。数据类型为字节 说明: (1) 表查找指令搜索表格时,从INDX指定的数据编号开始,寻找与数据PTN的关系满足CMD比较条件的数据。参数如果找到符合条件的数据,则INDX的值为该数据的编号。要查找下一个符合条件的数据,再次使用“表格查找”指令之前须将INDX加1。如果没有找到符合条件的数据,则INDX的数值等于实际填表数EC。一个表格最多可有100个数据,数据编号范围为0~99。将INDX的值设为0,则从表格的顶端开始搜索。 (2) 使ENO=0的错误条件: SM4.3(运行时间)、0006(间接地址)、0091(操作数超出范围)。 【提示】查表指令不需要ATT指令中的最大填表数TL。因此,查表指令的TBL操作数比ATT指令的TBL操作数高2字节。例如,ATT指令创建的表TBL=VW200,对该表进行查找指令时的TBL应为VW202。 【例525】利用查表指令编程。从EC地址为VW202的表中查找等于3030数据的位置存入AC1中,设表中数据均为十进制数表示。 设计分析: 为了从表格的顶端开始搜索,AC1的初始值=0,查表指令执行后AC1=1,找到符合条件的数据1。继续向下查找,先将AC1加1,再激活表查找指令,从表中符合条件的数据1的下一个数据开始查找,第二次执行查表指令后,AC1=4,找到符合条件的数据4。继续向下查找,将AC1再加1,再激活表查找指令,从表中符合条件的数据4的下一个数据开始查找,第三次执行表查找指令后,没有找到符合条件的数据,AC1=6(实际填表数)。梯形图、语句表及运行结果如图542所示。 图542例525题图 执行过程如下。 (1) 表首地址VW202单元,内容0006表示表的长度,表中数据从VW204单元开始; (2) 若AC1=0,在I0.1有效时,从VW204单元开始查找; (3) 在搜索到PTN数据3030时,AC1=2,其存储单元为VW208。 习题与思考题 51已知VB10=18,VB20=30,VB21=33,VB32=98。将VB10,VB30,VB31,VB32中的数据分别送到AC1,VB200,VB201,VB202中。写出梯形图及语句表程序。 52试用传送指令编写梯形图程序。要求控制Q0.0~Q0.7对应的8个指示灯,在I0.0接通时,使输出隔位接通,在I0.1接通时,输出取反后隔位接通。 53编制检测上升沿变化的程序。每当I0.0接通一次,使存储单元VW0的值加1,则如果计数达到5,则输出Q0.0接通显示,用I0.1使Q0.0复位。 54用数据类型转换指令实现将cm转换为in。已知1in=2.54cm。 55编写输出字符A的七段显示码程序。 56彩灯的循环移位控制。假设有8个指示灯,从右到左以0.5s的速度依次点亮,任意时刻只有一个指示灯亮,到达最左端,再从右到左依次点亮。 57炫丽彩灯灯光的模拟控制。控制要求: L1、L2、L9→L1、L5、L8→L1、L4、L7→L1、L3、L6→L1→L2、L3、L4、L5→L6、L7、L8、L9→L1、L2、L6→L1、L3、L7→L1、L4、L8→L1、L5、L9→L1→L2、L3、L4、L5→L6、L7、L8、L9→L1、L2、L9→L1、L5、L8……循环下去。按下面的I/O分配编写程序。 输入输出 起动按钮: I0.0 L1: Q0.0 L6: Q0.5 停止按钮: I0.1 L2: Q0.1 L7: Q0.6 L3: Q0.2 L8: Q0.7 L4: Q0.3 L9: Q1.0 L5: Q0.4 58用算术运算指令完成下列的运算。①84; ②求COS60°。 59将VW100开始的10个字的数据送到VW200开始的存储区。