S7300的指令数据装载和传送指令:(MOVE)•数据装载和传送指令(MOVE)如表所示LAD参数数据类型说明存储区ENBOOL允许输入I,Q,M,D,LENOBOOL允许输出IN长度为8位、16位、32位的所有数据类型源数据OUT长度为8位、16位、32位的所有数据类型目的地地址如图3.7.20所示程序移位指令和循环指令•字左移指令SHL_W•字右移指令SHR_W•双字左移指令SHL_DW•双字右移指令SHR_DW•整数右移指令SHR_I•双整数右移指令SHR_DI•循环指令能够将累加器1整个内容逐位向左或者向右循环移位。可使用的循环指令有:•双字左循环指令ROL_DW•双字右循环指令ROR_DW1.字左移指令•当允许输入EN位为高电平“1”时,将执行移位指令,将IN端指令的内容送入累加器1低字中,并左移N端指定的位数,然后写入OUT端指令的目的地址中。LAD参数数据类型说明存储区ENBOOL允许输入I、Q、M、D、LENOBOOL允许输出INWORD移位对象NWORD移动的位数OUTWORD移动操作的结果•如图所示的程序中,当I0.2的状态为“1”时,CPU把MW2中的数据读入累加器1低字中,并将累加器1低字的内容左移2位(N=W#16#2),然后再将移位后的内容写入到MW10中,注意MW2中的内容并没有变化要想在同一个存储字中看到移位的效果,可以将IN和OUT端指定相同的地址。如图所示注意:移位指令是高电平执行。要每次按下I0.2的外部输入按钮,移位指令只执行一次,可以在I0.2的常开触点后加上升沿检测指令--(P),将EN端的信号变成只有一个扫描周期的高电平信号。如图所示2.字右移指令•字右移指令执行时,当允许输入EN的状态为“1”时,将执行移位指令LAD参数数据类型说明存储区ENBOOL允许输入I、Q、M、D、LENOBOOL允许输出INWORD移位对象NWORD移动的位数OUTWORD移动操作的结果2.字右移指令•如图所示的程序3.双字左移指令•双字左移指令是移位对象是32位,当EN端的为“1”时,CPU将IN端的内容读入累加器1,并将累加器1中的内容整体左移N端指定的位数。移位过程中,按照高位丢失低位补“0”的原则进行LAD参数数据类型说明存储区ENBOOL允许输入I、Q、M、D、LENOBOOL允许输出INDWORD移位对象NWORD移动的位数OUTDWORD移动操作的结果4.双字右移指令•双字右移指令移位的对象是32位,当EN端的状态为“1”时,CPU将IN端指定的内容读入累加器1中,并将累加器1整体右移N端指定的位数,按照低位丢失高位补“0”的原则进行LAD参数数据类型说明存储区ENBOOL允许输入I、Q、M、D、LENOBOOL允许输出INDWORD移位对象NWORD移动的位数OUTDWORD移动操作的结果5.整数右移指令•整数右移指令与字移位指令不同。整数只有右移指令,移位时按照低位丢失,高位补符号位状态的原则,也就是正数高位补“0”,负数高位补“1”的原则LAD参数数据类型说明存储区ENBOOL允许输入I、Q、M、D、LENOBOOL允许输出ININT移位对象NWORD移动的位数OUTINT移动操作的结果6.双整数右移指令•双整数右移指令与整数右移类似,双整数移位对象为32位LAD参数数据类型说明存储区ENBOOL允许输入I、Q、M、D、LENOBOOL允许输出ININT移位对象NWORD移动的位数OUTINT移动操作的结果7.双字左循环指令•双字左循环指令的循环移位对象为32位,当EN端的状态为“1”时,将执行指令:CPU将IN端指定的内容读入累加器1中,然后将累加器1中的内容循环左移N端指定的位数,并写入OUT端指定的目的地址中LAD参数数据类型说明存储区ENBOOL允许输入I、Q、M、D、LENOBOOL允许输出INWORD移位对象NWORD移动的位数OUTWORD移动操作的结果7.双字右循环指令LAD参数数据类型说明存储区ENBOOL允许输入I、Q、M、D、LENOBOOL允许输出INWORD移位对象NWORD移动的位数OUTWORD移动操作的结果控制转移指令及应用•1.转移指令(JMP)•2.若非转移指令(JMPN)1.转移指令(JMP)•当逻辑位RLO的状态为“1”时,将触发转移指令,程序将直接跳转至标号指定的网路,并从此网路开始顺序执行以下的程序,在转移指令和标号之间的程序将不予执行1.转移指令(JMP)•如图所示程序1.转移指令(JMP)•如图所示程序2.若非转移指令(JMPN)•若非转移指令(JMPN)与转移指令相似,其转移条件是当逻辑位的状态为“0”时。2.若非转移指令(JMPN)•如图所示程序:当I0.1的状态为“1”,时,跳转条件不成立,CPU将按正常顺序执行程序。当I0.1的状态为“0”时,跳转条件成立,CPU将跳过程序段2,直接执行程序段3的指令。2.若非转移指令(JMPN)•使用跳转指令的以下结构,可实现选择性执行程序段的功能。程序如图所示比较指令及其应用•两个整数的比较(每一整数均为16位);•两个双整数的比较(每一双整数均为32位);•两个实数的比较(每一实数均为32位);比较类型有以下几种类型:•等于(EQ):IN1等于(==)IN2;•不等于(NQ):IN1不等于()IN2;•大于(GT):IN1大于()IN2;•小于(LT):IN1小于()IN2;•大于或等于(GE):IN1大于或等于(=)IN2;•小于或等于(LE):IN1小于或等于(=)IN2;1.整数等于比较指令•整数比较指令关键字符为I。整数等于比较指令是判断两个正数是否相等,如果相等,则逻辑结果为“1”,如果不相等则逻辑结果为“0”。LAD参数数据类型说明存储区IN1INT比较的第一个数值I、Q、M、D、LIN2INT比较的第二个数值1.整数等于比较指令•如图所示的程序,当MW10中的内容等于23时,Q0.0的状态为“1”,否则,Q0.0的状态为“0”。1.整数等于比较指令•注意:比较指令的使用触点类似,因此比较指令不能放在逻辑串的最后。如图所示注意:上图所示程序是一个不完整的程序,不能被保存或下载。比较指令只能放在逻辑串的中间。2.整数不等于比较指令•整数不等于比较指令是指当两个整数不相等时,比较的逻辑结果为“1”,而当两个数相等时逻辑结果为“0”。这一指令相当于等于比较指令的“非”操作。LAD参数数据类型说明存储区IN1INT比较的第一个数值I、Q、M、D、LIN2INT比较的第二个数值3.双整数大于比较指令•双整数的关键字为D。大于比较指令是当第一个数值大于第二个数值时,即IN1大于IN2,比较逻辑结果为“1”,否则逻辑结果为“0”。LAD参数数据类型说明存储区IN1DINT比较的第一个数值I、Q、M、D、LIN2DINT比较的第二个数值4.实数小于等于比较指令•实数比较指令的关键字为R。小于等于比较指令是当第一个数值小于或等于第二个数值时,即IN1=IN2时,比较逻辑结果为“1”,否则逻辑结果为“0”。LAD参数数据类型说明存储区IN1DINT比较的第一个数值I、Q、M、D、LIN2DINT比较的第二个数值1.计数器置初值指令(SC)•当逻辑位RLO有正跳沿时,计数器置初值线圈将预置值装入指定计数器中。若RLO位的状态没有正跳沿发生,则计数器的值保持不变。LAD参数数据类型存储区说明计数器号COUNTERC地址表示预置初值的计数器号预置值WORDI,Q,M,D,L预置值(必须是BCD码格式,即为C#,例如C#23)2.加法计数器线圈•当逻辑位RLO有正跳沿时,加法计数器线圈使指定计数器的值加1,如果RLO位的状态没有正跳沿发生,或者计数器数值已经达到最大值999,则计数器的值保持不变。LAD参数数据类型存储区说明计数器号COUNTERC地址表示要执行加法计数的计数器号3.减法计数器线圈•当逻辑位RLO有正跳沿时,减法计数器线圈使指定计数器的值减1,如果RLO位的状态没有正跳沿发生,或者计数器数值已经达到最小值0,则计数器的值保持不变。LAD参数数据类型存储区说明计数器号COUNTERC地址表示要执行减法计数的计数器号计数器指令的使用举例•如图所示计数器指令的使用举例•当I0.0的状态由“0”变为“1”时,(SC)指令将数值23装入计数器C0中,当I0.1的状态由“0”变为“1”时,计数器C0的值将减1,当I0.2的状态由“0”变为“1”时,计数器C0的值将加1。计数器的位状态与计数器值的关系如表所示计数器的计数值计数器的位状态不等于0“1”(高电平)等于0“0”(低电平)计数器指令的使用举例•如图所示,若I0.3的状态为“1”,则计数器C0所计的数值立刻变为零,由于(R)指令是高电平执行,因此若I0.3的状态保持“1”,则计数器C0始终处于清零状态而无法正常使用。用户在使用指令时,应注意指令的执行方式。4.可逆计数器S_CUDLAD参数数据类型说明存储区地址COUNTER计数器标识号CCUBOOL加计数输入I,Q,M,D,LCDBOOL减计数输入SBOOL计数器预置输入PVWORD计数器预置值(C#格式)RBOOL复位输入QBOOL计数器状态CVWORD计数器当前值(整数格式)CV_BCDWORD计数器当前值(BCD格式)4.可逆计数器S_CUD•可以看到,可逆计数器方框指令可以完成计数器的加(CU)、减(CD)计数和置初值(S、PV)以及计数器值清零(R)等功能,还可以将计数器当前值以不同的格式输出,整数格式(CV)和BCD格式(CV_BCD)。计数器的状态可以Q端输出,也可以由计数器的触点输出。4.可逆计数器S_CUD•例如,前面例子中两图所示的程序可以由下图所示的程序代替4.可逆计数器S_CUD•使用计数器时应该注意下面几点问题•(1)计数器指令的加、减计数输入端以及预置值输入端均为上升沿执行,即逻辑位必须有从“0”到“1”的变化时,指令才会执行。4.可逆计数器S_CUD•(2)计数器的预置的初始值及PV端的数据格式为BCD码二~十进制格式。如果在PV端使用地址如MW10,而不是直接数C#...,应该保证在执行置初值指令时,地址MW10中保存的数据满足BCD码格式,否则执行程序时,CPU将会出错。4.可逆计数器S_CUD•(3)计数器触点的状态由计数器的值决定,如果计数值等于零,则计数器触点的状态为低电平“0”,如果计数值不等于零(无论等于几),则计数器触点的状态为高电平“1”。算数运算指令•加法运算指令ADD•减法运算指令SUB•乘法运算指令MUL•除法运算指令DIV1.整数加法运算ADD_ILAD参数数据类型说明存储区ENBOOL允许输入I、Q、M、D、LENOBOOL允许输出IN1INT相加的第1个值IN2INT相加的第2个值OUTINT相加的结果1.整数加法运算ADD_I•程序示例如图所示1.整数加法运算ADD_I•如图所示的程序中1.整数加法运算ADD_I•若I0.0后面没有边沿检测指令,程序段1如图所示2.整数减法运算SUB_I•减法指令运算规则为:IN1—IN2=OUTLAD参数数据类型说明存储区ENBOOL允许输入I、Q、M、D、LENOBOOL允许输出IN1INT被减数IN2INT减数OUTINT减法运算的结果3.整数乘法运算MUL_I•允许输入EN的状态为“1”时,启动乘法运算指令,将IN1乘以IN2,并将计算结果送至OUT端。如果计算结果正确,ENO端输出为“1”。LAD参数数据类型说明存储区ENBOOL允许输入I、Q、M、D、LENOBOOL允许输出IN1INT第1个乘数IN2INT第2个乘数OUTINT乘法运算的结果4.整数除法运算DIV_I•除法指令的运算规则为:IN1÷IN2=OUTLAD参数数据类型说明存储区ENBOOL允许输入I、Q、M、D、LENOBOOL允许输出IN1INT被除数IN2INT除数OUTINT除法运算的结果4.整数除法运算DIV_I•例如如图所示的程序,运算结果为6。5.双整数取余数指令MOD_DI•