首页 理论教育 数学运算指令优化技巧

数学运算指令优化技巧

时间:2023-06-21 理论教育 版权反馈
【摘要】:数学运算指令包括四则运算指令、其他常用的数学运算指令、浮点数函数运算指令和逻辑运算指令。表4-5 数学运算指令操作数的数据类型可选SInt、Int、DInt、USInt、UInt、UDInt和Real,IN1和IN2可以是常数。图4-54 使用浮点数运算指令的压力测量值计算程序2.其他常用的数学运算指令MOD指令除法指令只能得到商,余数被丟掉。

数学运算指令优化技巧

数学运算指令包括四则运算指令、其他常用的数学运算指令、浮点数函数运算指令和逻辑运算指令。

1.四则运算指令

数学运算指令中的ADD、SUB、MUL和DIV分别是加、减、乘、除指令。它们执行的操作见表4-5。

表4-5 数学运算指令

978-7-111-47789-1-Chapter04-59.jpg

操作数的数据类型可选SInt、Int、DInt、USInt、UInt、UDInt和Real,IN1和IN2可以是常数。IN1、IN2和OUT的数据类型应该相同。整数除法指令将得到的商截位取整后,作为整数格式的输出OUT。用右键单击ADD指令,执行出现的快捷菜单中的“插入输入”命令,ADD指令将会增加一个输入变量。用鼠标右键单击某条输入短线,执行快捷菜单中的“删除”命令,将会减少一个输入变量。

【例4-6】压力变送器的量程为0~10MPa,输出信号为0~10V,被CPU集成的模拟量输入的通道0(地址为IW64)转换为0~27648的数字。假设转换后的数字为N,试求以kPa为单位的压力值。

0~10MPa(0~10000kPa)对应于转换后的数字0~27648,转换公式为

P=(10000×N)/27648(kPa) (4-1)

值得注意的是,在运算时一定要先乘后除,否则会损失原始数据的精度。

式(4-1)中乘法运算的结果可能会大于一个字能表示的最大值,因此应使用数据类型为双整数的乘法和除法如图4-53。

978-7-111-47789-1-Chapter04-60.jpg

图4-53 压力测量值计算程序

为此首先使用CONV指令,将IW64转换为双整数(DInt)。将指令列表中的MUL和DIV指令拖放到梯形图中后,单击指令方框内指令名称下面的问号,再单击出现的下拉按钮,用下拉式列表框设置操作数的数据类型为双整数:DInt。在OB1的界面区定义数据类型为DInt的临时局部变量Temp1,用来保存运算的中间结果。

双字除法指令DIV的运算结果为双字,但是由式(4-1)可知运算结果实际上不会超过16位正整数的最大值32767,所以双字MD74的高位字MW74为0,运算结果的有效部分在MD74的低位字MW76中。

【例4-7】使用浮点数运算计算上例以kPa为单位的压力值。将式(4-1)改写为式(4-2):

P=(10000×N)/27648=0.361690×N(kPa) (4-2)

在OB1的界面区定义数据类型为Real的局部变量Temp2,用来保存运算的中间结果。

首先用CONV指令将IW64转换为实数(Real),再用实数乘法指令完成式(4-2)的运算如图4-54。最后使用四舍五入的ROUND指令,将运算结果转换为整数。

978-7-111-47789-1-Chapter04-61.jpg

图4-54 使用浮点数运算指令的压力测量值计算程序

2.其他常用的数学运算指令

(1)MOD指令

除法指令只能得到商,余数被丟掉。可以用MOD指令来求除法的余数如图4-55所示。输出OUT中的运算结果为除法运算IN1/IN2的余数。

(2)NEG指令

NEG(negation)将输入IN的值的符号取反后,保存在输出OUT中。IN和OUT的数据类型可以是SInt、Int、DInt和Real,输入IN还可以是常数。(www.xing528.com)

978-7-111-47789-1-Chapter04-62.jpg

图4-55 MOD、NEG、INC运算指令

(3)INC与DEC指令

执行指令INC与DEC时,参数IN/OUT的值分别被加1和减1。IN/OUT的数据类型可选SInt、USInt、Int、UInt、DInt和UDInt(有符号或无符号的整数)。如果图4-55中的INC指令用来计I1.2动作的次数,应在INC指令之前添加检测能流的上升沿的P_TRIG指令。否则在I1.2为1状态的每个扫描循环周期,MD96都要加1。

(4)绝对值指令ABS

ABS指令(见图4-56)用来求输入IN中的有符号整数(SInt、Int、DInt)或实数(Re-al)的绝对值,将结果保存在输出OUT中。IN和OUT的数据类型应相同。

978-7-111-47789-1-Chapter04-63.jpg

图4-56 ABS、MIN、LIMIT运算指令

(5)MIN与MAX指令

MIN(minimum)指令比较输入IN1和IN2的值,将其中较小的值送给输出OUT。MAX(maximum)指令比较输入IN1和IN2的值,将其中较大的值送给输出OUT。IN1和IN2的数据类型相同才能执行指定的操作。

(6)LIMIT指令

LIMIT指令检查输入IN的值是否在参数MIN和MAX指定的范围内,如果IN的值没有超出该范围,将它直接保存在OUT指定的地址中。如果IN的值小于MIN的值或大于MAX的值,将MIN或MAX的值送给输出OUT。

3.浮点数函数运算指令

浮点数(实数)数学运算指令(见表4-6)的操作数IN和OUT的数据类型为Real。浮点数自然指数指令EXP和浮点数自然对数指令LN中的指数和对数的底数e=2.71828。

表4-6 浮点数数学运算指令

978-7-111-47789-1-Chapter04-64.jpg

浮点数开平方指令SQRT和LN指令的输入值如果小于0,输出OUT返回一个无效的浮点数。

浮点数三角函数指令和反三角函数指令中的角度均为以弧度为单位的浮点数。如果输入值是以度为单位的浮点数,使用三角函数指令之前应先将角度值乘以π/180.0,转换为弧度值。

浮点数反正弦函数指令ASlN和浮点数反余弦函数指令ACOS的输入值的允许范围为-1.0~1.0,ASIN和ATAN的运算结果的取值范围为-π/2~π/2弧度,ACOS的运算结果的取值范围为0~π弧度。

求以10为底的对数时,需要将自然对数值除以2.302585(10的自然对数值)。例如Ig100=In100/2.302585=4.605170/2.302585=2。

【例4-8】测量远处物体的高度。

已知被测物体到测量点的距离L和以度为单位的夹角θ,求被测物体的高度HH=LTANθ,角度的单位为度。假设以度为单位的实数角度值在MD116,π/180=0.0174533得角度的弧度值(见图4-57),运算的中间结果保存在数据类型为Real的临时局部变量Temp2中。L的实数值在MD128中,运算结果在MD132中。

978-7-111-47789-1-Chapter04-65.jpg

图4-57 函数运算指令的应用

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

我要反馈