首页 理论教育 算术运算指令:增强计算功能

算术运算指令:增强计算功能

时间:2023-06-29 理论教育 版权反馈
【摘要】:表4-32 整数加指令和参数梯形图和指令表如图4-91所示。图4-94 双整数除指令应用举例算术运算程序示例,其中开始时AC1中内容为4000,AC0中内容为6000,VD100中内容为200,VW200中内容为41,程序和运行结果如图4-95所示。

算术运算指令:增强计算功能

1.整数算术运算指令

S7-200的整数算术运算分为加法运算、减法运算、乘法运算和除法运算,其中每种运算方式又有整数型和双整数型两种。

(1)整数加(ADD_I)

当允许输入端EN为高电平时,输入端IN1和IN2中的整数相加,结果送入OUT中。IN1和IN2中的数可以是常数。整数加的表达式是:IN1+IN2=OUT。整数加(ADD_I)指令和参数见表4-32。

表4-32 整数加(ADD_I)指令和参数

978-7-111-47553-8-Chapter04-133.jpg

【例4-44】梯形图和指令表如图4-91所示。MW0中的整数为11,MW2中的整数为21,则当I0.0闭合时,整数相加的结果存储在OUT端的MW4中,其结果是多少?

【解】

当I0.0闭合时,激活整数加指令,IN1中的整数存储在MW0中,这个数为11,IN2中的整数存储在MW2中,这个数为21,整数相加的结果存储在OUT端的MW4中的数是32。由于没有超出计算范围,所以Q0.0输出为“1”。假设IN1中的整数为9999,IN2中的整数为30000,则超过整数相加的范围。由于超出计算范围,所以Q0.0输出为“0”。

【关键点】整数相加未超出范围时当I0.0闭合则Q0.0输出为高电平否则Q0.0输出为低电平

978-7-111-47553-8-Chapter04-134.jpg

图4-91 整数加(ADD_I)指令应用举例

双整数加(ADD_DI)指令与整数加(ADD_I)类似,只不过其数据类型为双整数,在此不再赘述。

(2)双整数减(SUB_DI)

当允许输入端EN为高电平时,输入端IN1和IN2中的双整数相减,结果送入OUT中。IN1和IN2中的数可以是常数。双整数减的表达式是:IN1-IN2=OUT。双整数减(SUB_DI)指令和参数见表4-33。

表4-33 双整数减(SUB_DI)指令和参数

978-7-111-47553-8-Chapter04-135.jpg

【例4-45】梯形图和指令表如图4-92所示,IN1中的双整数存储在MD0中,数值为22,IN2中的双整数存储在MD4中,数值为11,当I0.0闭合时,双整数相减的结果存储在OUT端的MD4中,其结果是多少?

【解】

当I0.0闭合时,激活双整数减指令,IN1中的双整数存储在MD0中,假设这个数为22,IN2中的双整数存储在MD4中,假设这个数为11,双整数相减的结果存储在OUT端的MD4中的数是11。由于没有超出计算范围,所以Q0.0输出为“1”。

978-7-111-47553-8-Chapter04-136.jpg

图4-92 双整数减(SUB_DI)指令应用举例

整数减(SUB_I)指令与双整数减(SUB_DI)类似,只不过其数据类型为整数,在此不再赘述。

(3)整数乘(MUL_I)

当允许输入端EN为高电平时,输入端IN1和IN2中的整数相乘,结果送入OUT中。IN1和IN2中的数可以是常数。整数乘的表达式是:IN1×IN2=OUT。整数乘(MUL_I)指令和参数见表4-34。

表4-34 整数乘(MUL_I)指令和参数

978-7-111-47553-8-Chapter04-137.jpg

【例4-46】梯形图和指令表如图4-93所示。IN1中的整数存储在MW0中,数值为11,IN2中的整数存储在MW2中,数值为11,当I0.0闭合时,整数相乘的结果存储在OUT端的MW4中,其结果是多少?

【解】

当I0.0闭合时,激活整数乘指令,IN1×IN2=OUT,整数相乘的结果存储在OUT端的MW4中,结果是121。由于没有超出计算范围,所以Q0.0输出为“1”。

978-7-111-47553-8-Chapter04-138.jpg

图4-93 整数乘(MUL_I)指令应用举例

两个整数相乘得双整数乘指令(MUL),其两个乘数都是整数,乘积为双整数,注意MUL和MUL_I的区别。

双整数乘(MUL_DI)指令与整数乘(MUL_I)类似,只不过双整数乘数据类型为双整数,在此不再赘述。

(4)双整数除(DIV_DI)

当允许输入端EN为高电平时,输入端IN1中的双整数除以IN2中的双整数,结果为双整数,送入OUT中,不保留余数。IN1和IN2中的数可以是常数。双整数除(DIV_DI)指令和参数见表4-35。

表4-35 双整数除(DIV_DI)指令和参数

978-7-111-47553-8-Chapter04-139.jpg

【例4-47】梯形图和指令表如图4-94所示。IN1中的双整数存储在MD0中,数值为11,IN2中的双整数存储在MD4中,数值为2,当I0.0闭合时,双整数相除的结果存储在OUT端的MD8中,其结果是多少?

【解】

当I0.0闭合时,激活双整数除指令,IN1中的双整数存储在MD0中,数值为11,IN2中的双整数存储在MD4中,数值为2,双整数相除的结果存储在OUT端的MD8中的数是5,不产生余数。由于没有超出计算范围,所以Q0.0输出为“1”。

【关键点】双整数除法不产生余数

整数除(DIV_I)指令与双整数除(DIV_DI)类似,只不过其数据类型为整数,在此不再赘述。整数相除得商和余数指令(DIV),其除数和被除数都是整数,输出OUT为双整数,其高位是一个16位余数,其低位是一个16位商,注意DIV和DIV_I的区别。

978-7-111-47553-8-Chapter04-140.jpg

图4-94 双整数除(DIV_DI)指令应用举例

【例4-48】算术运算程序示例,其中开始时AC1中内容为4000,AC0中内容为6000,VD100中内容为200,VW200中内容为41,程序和运行结果如图4-95所示。

【解】

累加器AC0和AC1中可以装入字节、字、双字和实数等数据类型的数据,可见其使用比较灵活。DIV指令的除数和被除数都是整数,而结果为双整数,对于本例除数为4000,被除数41,双整数结果存储在VD202中,其中余数23存储在高位VW202中,商97存储在低位VW204中。

978-7-111-47553-8-Chapter04-141.jpg

图4-95 程序和运行结果

a)程序b)运行结果

【例4-49】用模拟电位器调节定时器T37的设定值为5~20s,设计此程序。

【解】

CPU 221和CPU 222有一个模拟电位器,其他CPU有2个模拟电位器。CPU将电位器的位置转换为0~255的数值,然后存入SM28和SM29中,分别对应电位器0和电位器1的值。电位器的位置用小螺钉旋具调整。

由于设定时间的范围是5~20s,电位器上对应的数字是0~255,设读出的数字为X,则100ms定时器(单位是0.1ms)的设定值为

(200-50)×X/255+50=150×X/255+50

为了保证精度,要先乘法后除法,梯形图如图4-96所示。

978-7-111-47553-8-Chapter04-142.jpg

图4-96 梯形图

(5)递增/递减运算指令

在输入端IN1上加1或减1,并将结果置入OUT。递增/递减指令的操作数类型为字节、字和双字。字递增运算指令格式见表4-36。

表4-36 字递增运算指令格式

978-7-111-47553-8-Chapter04-143.jpg

1)字节递增/字节递减运算(INC_B/DEC_B)。使能端输入有效时,将一个字节的无符号数IN增1/减1,并将结果送至OUT指定的存储器单元输出。

2)双字递增/双字递减运算(INC_DW/DEC_DW)。使能端输入有效时,将双字长的符号数IN增1/减1,并将结果送至OUT指定的存储器单元输出。

【例4-50】递增/递减运算程序如图4-97a所示。初始时AC0中的内容为125,VD100中的内容为128000,试分析运算结果。

978-7-111-47553-8-Chapter04-144.jpg

图4-97 程序和运行结果

a)程序b)运行结果

【例4-51】设计记录一台设备的运行的时间,当设备运行时,I0.0为1,停止时I0.0为0,测量的小时数存放在VW0中,分钟数存放在VW2,秒数存放在VW4中,当前的秒数显示在数码管上。

【解】

程序如图4-98所示。

978-7-111-47553-8-Chapter04-145.jpg

图4-98 程序

【例4-52】有一个电炉,加热功率有1000W、2000W和3000W三个档次,电炉有1000W和2000W两种电加热丝。要求用一个按钮选择三个加热档,当按一次按钮时,1000W电阻丝加热,即第一档;当按两次按钮时,2000W电阻丝加热,即第二档;当按三次按钮时,1000W和2000W电阻丝同时加热,即第三档;当按四次按钮时停止加热,请编写程序。

【解】

程序如图4-99所示。(www.xing528.com)

978-7-111-47553-8-Chapter04-146.jpg

图4-99 程序

2.浮点数运算指令

浮点数函数有浮点数运算函数、三角函数对数函数、幂运算函数和PID等。浮点数运算函数又分为加法运算、减法运算、乘法运算和除法运算函数。浮点数运算函数见表4-37。

表4-37 浮点数运算函数

978-7-111-47553-8-Chapter04-147.jpg

分别介绍如下:

①实数加(ADD_R)。当允许输入端EN为高电平时,输入端IN1和IN2中的实数相加,结果送入OUT中。IN1和IN2中的数可以是常数。实数加的表达式是:IN1+IN2=OUT。实数加(ADD_R)指令和参数见表4-38。

表4-38 实数加(ADD_R)指令和参数

978-7-111-47553-8-Chapter04-148.jpg

用一个例子来说明实数加(ADD_R)指令,梯形图和指令表如图4-100所示。当I0.0闭合时,激活实数加指令,IN1中的实数存储在MD0中,假设这个数为10.1,IN2中的实数存储在MD4中,假设这个数为21.1,实数相加的结果存储在OUT端的MD8中的数是31.2。

978-7-111-47553-8-Chapter04-149.jpg

图4-100 实数加(ADD_R)指令应用举例

②实数减(SUB_R)、实数乘(MUL_R)和实数除(DIV_R)的使用方法与前面的指令用法类似,在此不再赘述。

③MUL_DI/DIV_DI和MUL_R/DIV_R的输入都是32位,输出的结果也是32位,但前者的输入和输出是双整数,属于双整数运算,而后者输入和输出的是实数,属于浮点运算,简单地说,后者的输入和输出数据中有小数点,而前者没有,后者的运算速度要慢得多。

值得注意的是,乘/除运算对特殊标志位SM1.0(零标志位)、SM1.1(溢出标志位)、SM1.2(负数标志位)、SM1.3(被0除标志位)会产生影响。若SM1.1在乘法运算中被置1,表明结果溢出,则其他标志位状态均置0,无输出。若SM1.3在除法运算中被置1,说明除数为0,则其他标志位状态保持不变,原操作数也不变。

【关键点】浮点数的算术指令的输入端可以是常数但必须是带有小数点的常数如5.0不能为5否则会出错

3.转换指令

转换指令是将一种数据格式转换成另外一种格式进行存储。例如,要让一个整型数据和双整型数据进行算术运算,一般要将整型数据转换成双整型数据。STEP 7-Micro/Win的转换指令见表4-39。

表4-39 转换指令

978-7-111-47553-8-Chapter04-150.jpg

(续)

978-7-111-47553-8-Chapter04-151.jpg

(1)整数转换成双整数(ITD)

整数转换成双整数指令是将IN端指定的内容以整数的格式读入,然后将其转换为双整数码格式输出到OUT端。整数转换成双整数指令和参数见表4-40。

表4-40 整数转换成双整数指令和参数

978-7-111-47553-8-Chapter04-152.jpg

【例4-53】梯形图和指令表如图4-101所示。IN中的整数存储在MW0中(用十六进制表示为16#0016),当I0.0闭合时,转换完成后OUT端的MD2中的双整数是多少?

【解】

当I0.0闭合时,激活整数转换成双整数指令,IN中的整数存储在MW0中(用十六进制表示为16#0016),转换完成后OUT端的MD2中的双整数是16#00000016。但要注意,MW2=16#0000,而MW4=16#0016。

978-7-111-47553-8-Chapter04-153.jpg

图4-101 整数转换成双整数指令应用举例

(2)双整数转换成实数(DTR)

双整数转换成实数指令是将IN端指定的内容以双整数的格式读入,然后将其转换为实数码格式输出到OUT端。实数格式在后续算术计算中是很常用的,如3.14就是实数形式。双整数转换成实数指令和参数见表4-41。

表4-41 双整数转换成实数指令和参数

978-7-111-47553-8-Chapter04-154.jpg

【例4-54】梯形图和指令表如图4-102所示。IN中的双整数存储在MD0中,(用十进制表示为16),转换完成后OUT端的MD4中的实数是多少?

【解】

当I0.0闭合时,激活双整数转换成实数指令,IN中的双整数存储在MD0中(用十进制表示为16),转换完成后OUT端的MD4中的实数是16.0。一个实数要用4个字节存储。

978-7-111-47553-8-Chapter04-155.jpg

图4-102 双整数转换成实数指令应用举例

【关键点】应用I_DI转换指令后数值的大小并未改变但有时转换是必需的因为只有相同的数据类型才可以进行数学运算例如要将一个整数和双整数相加则比较保险的做法是先将整数转化成双整数再做双整数加法

DI_I是双整数转换成整数的指令,并将结果存入OUT指定的变量中。若双整数太大,则会溢出。

DI_R是双整数转换成实数的指令,并将结果存入OUT指定的变量中。

(3)实数四舍五入为双整数(ROUND)

ROUND指令是将实数进行四舍五入取整后转换成双整数的格式。实数四舍五入为双整数指令和参数见表4-42。

表4-42 实数四舍五入为双整数指令和参数

978-7-111-47553-8-Chapter04-156.jpg

【例4-55】梯形图和指令表如图4-103所示。IN中的实数存储在MD0中,假设这个实数为3.14,进行四舍五入运算后OUT端的MD4中的双整数是多少?假设这个实数为3.88,进行四舍五入运算后OUT端的MD4中的双整数是多少?

【解】

当I0.0闭合时,激活实数四舍五入指令,IN中的实数存储在MD0中,假设这个实数为3.14,进行四舍五入运算后OUT端的MD4中的双整数是3,假设这个实数为3.88,进行四舍五入运算后OUT端的MD4中的双整数是4。

978-7-111-47553-8-Chapter04-157.jpg

图4-103 实数四舍五入为双整数指令应用举例

【关键点】ROUND是四舍五入指令而TRUNC是取整指令将输入的32位实数转换成整数只有整数部分保留舍去小数部分结果为双整数并将结果存入OUT指定的变量中例如输入是32.2执行ROUND或者TRUNC指令结果转换成32而输入是32.5执行TRUNC指令结果转换成32执行ROUND指令结果转换成33请注意区分

【例4-56】将英寸转换成厘米,已知单位为英寸的长度保存在VW0中,数据类型为整数,英寸和厘米的转换单位为2.54,数据类型为实数,要将最终单位厘米的结果保存在VD4中,且结果为整数。编写程序实现这一功能。

【解】

要将单位为英寸的长度转化成单位为厘米的长度,必须要用到实数乘法,因此乘数必须为实数,而已知的英寸长度是整数,所以先要将整数转换成双整数,再将双整数转换成实数,最后将乘积取整就得到结果。程序如图4-104所示。

4.数学功能指令

数学功能指令包含正弦(SIN)、余弦(COS)、正切(TAN)、自然对数(LN)、自然指数(EXP)和平方根(SQRT)等。这些指令的使用比较简单,仅以正弦(SIN)为例说明数学功能指令的使用,见表4-43。

978-7-111-47553-8-Chapter04-158.jpg

图4-104 程序

表4-43 求正弦(SIN)值指令和参数

978-7-111-47553-8-Chapter04-159.jpg

用一个例子来说明求正弦(SIN)值指令,梯形图和指令表如图4-105所示。当I0.0闭合时,激活求正弦值指令,IN中的实数存储在VD0中,假设这个数为0.5,实数求正弦的结果存储在OUT端的VD8中的数是0.479。

978-7-111-47553-8-Chapter04-160.jpg

图4-105 正弦运算指令应用示例

【关键点】三角函数的输入值是弧度而不是角度

求余弦(COS)和求正切(TAN)的使用方法与前面的指令用法类似,在此不再赘述。

5.编码和解码指令

编码指令(ENCO)将输入字IN的最低有效位的位号写入输出字OUT的最低有效“半字节”(4位)中。解码指令(DECO)根据输入字IN的低4位所表示的位号,置输出字OUT的相应位为1。也有人称解码指令为译码指令。编码和解码指令格式见表4-44。

表4-44 编码和解码指令格式

978-7-111-47553-8-Chapter04-161.jpg

用一个例子说明以上指令的应用,如图4-106所示是编码和解码指令程序示例。

978-7-111-47553-8-Chapter04-162.jpg

图4-106 编码和解码指令程序示例

a)程序b)运行结果

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈