首页 理论教育 数学运算指令的优化方法

数学运算指令的优化方法

时间:2023-06-29 理论教育 版权反馈
【摘要】:表5.5数学运算指令1.四则运算指令数学运算指令中的 ADD、SUB、MUL 和 DIV 分别指加、减、乘、除,它们执行的操作如表5.5所示。图5.26使用浮点数运算指令的压力测量值计算程序2.其他整数数学运算指令l)MOD指令除法指令只能得到商,余数被丢掉。图5.27整数运算指令2)NEG指令NEG将输入IN的值的符号取反后,保存在输出OUT中。图5.28整数运算指令5)MIN与MAX指令MIN指令比较输入INl和IN2的值,将其中较小的值送给输出OUT。图5.29函数运算指令的应用

数学运算指令的优化方法

数学运算指令包括数学运算指令(见表5.5)、浮点数函数运算指令和逻辑运算指令。

表5.5 数学运算指令

1.四则运算指令

数学运算指令中的 ADD、SUB、MUL 和 DIV 分别指加、减、乘、除,它们执行的操作如表5.5所示。操作数的数据类型可选SInt、Int、Dint、USInt、UInt、UDInt和Real,IN1和IN2可以是常数。IN1、IN2和OUT的数据类型应该相同。

整数除法指令将得到的商截位取整后,作为整数格式的输出(OUT)。

用右键点击ADD指令,执行弹出快捷菜单中的“插入输入”命令,ADD指令将会增加一个输入变量。用鼠标右键点击某条输入短线,执行快捷菜单中的“删除”命令,将会减少一个输入变量。

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

解:0~10 MPa(0~l0 000 kPa)对应于转换后的数字0~27 648,转换公式为

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

公式中乘法运算的结果可能会大于一个字能表示的最大值,因此,应使用数据类型为双整数的乘法和除法(见图5.25)。为此,首先使用CONV指令,将IW64转换为双整数(DInt)。

图5.25 压力测量值计算程序

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

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

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

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

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

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

2.其他整数数学运算指令

l)MOD指令

除法指令只能得到商,余数被丢掉。可以用 MOD 指令来求除法的余数(见图5.27)。输出OUT中的运算结果为除法运算IN1/IN2的余数。

图5.27 整数运算指令(www.xing528.com)

2)NEG指令

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

3)INC与DEC指令

执行指令INC与DEC时,参数IN/OUT的值分别被加1和减l。IN/OUT的数据类型可选是SInt、USlnt、Int、UInt、DInt和UDInt(有符号或无符号的整数)。

如图5.27中的INC指令用来计I1.2动作的次数,应在INC指令之前添加检测能流的上升沿的P_TRIG指令。否则在I0.2为l状态的每个扫描循环周期,MB96都要加1。

4)绝对值指令ABS

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

图5.28 整数运算指令

5)MIN与MAX指令

MIN(minimum)指令比较输入INl和IN2的值,将其中较小的值送给输出OUT。

MAX(maximum)指令比较输入IN1和IN2的值,将其中较大的值送给输出OUT。

IN1和IN2的数据类型相同才能执行指定的操作。

6)LIMIT指令

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

3.浮点数函数运算指令

浮点数(实数)数学运算指令(见表5.6)的操作数IN和OUT的数据类型为Rea1。

浮点数自然指数指令EXP和浮点数自然对数指令LN中的指数和对数的底数e=2.718 28。

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

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

表5.6 浮点数函数运算指令

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

求以10为底的对数时,需要将自然对数值除以2.302 585(10的自然对数值)。例如:lgl00=ln100/2.302 585=4.605 170/2.302 585=2。

【例 5.4】 测量远处物体的高度时,已知被测物体到测量点的距离 L 和以度为单位的夹角θ,求被测物体的高度 H,H=Ltanθ,角度的单位为度。假设以度为单位的实数角度值在MD116,乘以 π/180=0.017 453 3 得角度的弧度值(见图5.29),运算的中间结果保存在数据类型为Real的临时局部变量Temp2中。L的实数值保存在MD128,运算结果保存在MD132。

图5.29 函数运算指令的应用

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

我要反馈