1.四则运算指令
数学函数指令中的ADD、SUB、MUL和DIV分别是加、减、乘、除指令,它们执行的操作见表3-4。操作数的数据类型可选整数和浮点数,IN1和IN2可以是常数。IN1、IN2和OUT的数据类型应相同。
整数除法指令将得到的商截尾取整后,作为整数格式的输出OUT。
ADD和MUL指令允许有多个输入,单击方框中参数IN2后面的,将会增加输入IN3,以后增加的输入的编号依次递增。
【例3-9】 压力变送器的量程为0~10MPa,输出信号为0~10V,被CPU集成的模拟量输入的通道0(地址为IW2)转换为0~27648的数字。假设转换后的数字为N,试求以kPa为单位的压力值。
解:0~10MPa(0~10000kPa)对应于转换后的数字0~27648,转换公式为
P=(10000×N)/27648(kPa) (3-1)
值得注意的是,在运算时一定要先乘后除,否则将会损失原始数据的精度。
公式中乘法运算的结果可能会大于一个字能表示的最大值,因此应使用数据类型为双整数的乘法和除法(见图3-52)。为此首先使用CONV指令,将IW2转换为双整数(DInt)。
图3-52 压力测量值计算程序
将指令列表中的MUL和DIV指令拖放到梯形图中后,单击指令方框内指令名称下面的问号,再单击出现的按钮,用下拉式列表框设置操作数的数据类型为双整数DInt。在OB1的块接口区定义数据类型为DInt的临时局部变量Temp1,用来保存运算的中间结果。
表3-4 数学函数指令
双整数除法指令DIV的运算结果为双整数,但是由式(3-1)可知运算结果实际上不会超过16位正整数的最大值32767,所以MD10的高位字MW10为0,运算结果的有效部分在MD10的低位字MW12中。
【例3-10】 使用浮点数运算计算上例以kPa为单位的压力值。将式(3-1)改写为式(3-2):
P=(10000×N)/27648=0.361690×N(kPa) (3-2)
在OB1的块接口区定义数据类型为Real的局部变量Temp2,用来保存运算的中间结果。
解:首先用CONV指令将IW4中的数的数据类型转换为实数(Real),再用实数乘法指令完成式(3-2)的运算(见图3-53)。最后使用四舍五入的ROUND指令,将运算结果转换为整数。
图3-53 使用浮点数运算指令的压力计算程序
2.CALCULATE指令
可以使用“计算”指令CALCULATE定义和执行数学表达式,根据所选的数据类型计算复杂的数学运算或逻辑运算。
单击图3-54指令框中CALCULATE下面的“???”,用出现的下拉式列表选择该指令的数据类型为Real。根据所选的数据类型,可以用某些指令组合的函数来执行复杂的计算。单击指令框右上角的图标,或双击指令框中间的数学表达式方框,打开图3-54下面的对话框。对话框给出了所选数据类型可以使用的指令,在该对话框中输入待计算的表达式,表达式可以包含输入参数的名称(INn)和运算符,不能指定方框外的地址和常数。
图3-54 CALCULATE指令实例
在初始状态下,指令框只有两个输入IN1和IN2。单击方框左下角的符号,可以增加输入参数的个数。功能框按升序对插入的输入编号,表达式可以不使用所有已定义的输入。
运行时使用方框外输入的值执行指定的表达式的运算,运算结果传送到MD36中。
3.浮点数函数运算指令
浮点数(实数)数学运算指令(见表3-4)的操作数IN和OUT的数据类型为Real。(www.xing528.com)
“计算指数值”指令EXP和“计算自然对数”指令LN中的指数和对数的底数e=2.718282。
“计算平方根”指令SQRT和LN指令的输入值如果小于0,输出OUT为无效的浮点数。
三角函数指令和反三角函数指令中的角度均为以弧度为单位的浮点数。如果输入值是以度为单位的浮点数,使用三角函数指令之前应先将角度值乘以π/180.0,转换为弧度值。
“计算反正弦值”指令ASIN和“计算反余弦值”指令ACOS的输入值的允许范围为-1.0~1.0,ASIN和“计算反正切值”指令ATAN的运算结果的取值范围为-π/2~+π/2弧度,ACOS的运算结果的取值范围为0~π弧度。
求以10为底的对数时,需要将自然对数值除以2.302585(10的自然对数值)。例如lg100=ln100/2.302585=4.605170/2.302585=2。
【例3-11】 测量远处物体的高度时,已知被测物体到测量点的距离L和以度为单位的夹角θ,求被测物体的高度H,H=Ltanθ,角度的单位为度。
解:假设以度为单位的实数角度值在MD40中,乘以π/180=0.0174533,得到角度的弧度值(见图3-55),运算的中间结果用实数临时局部变量Temp2保存。MD44中是L的实数值,运算结果在MD48中。
图3-55 浮点数函数运算指令的应用
4.其他数学函数指令
(1)MOD指令
除法指令只能得到商,余数被丢掉。可以用“返回除法的余数”指令MOD来求各种整数除法的余数(见图3-56)。输出OUT中的运算结果为除法运算IN1/IN2的余数。
图3-56 MOD指令和INC指令
(2)NEG指令
“求二进制补码”(取反)指令NEG(negation)将输入IN的值的符号取反后,保存在输出OUT中。IN和OUT的数据类型可以是SInt、Int、DInt和Real,S7-1500还可以使用LInt。输入IN还可以是常数。
(3)INC与DEC指令
执行“递增”指令INC与“递减”指令DEC时,参数IN/OUT的值分别被加1和减1。IN/OUT的数据类型为各种有符号或无符号的整数。
如果图3-56中的INC指令用来计I0.4动作的次数,应在INC指令之前添加检测能流上升沿的P_TRIG指令。否则在I0.4为1状态的每个扫描周期,MW64都要加1。
(4)ABS指令
“计算绝对值”指令ABS用来求输入IN中的有符号整数(SInt、Int、DInt)或实数(Real)的绝对值,将结果保存在输出OUT中。S7-1500还可以使用LInt。IN和OUT的数据类型应相同。
(5)MIN与MAX指令
“获取最小值”指令MIN比较输入IN1和IN2的值(见图3-57),将其中较小的值送给输出OUT。“获取最大值”指令MAX比较输入IN1和IN2的值,将其中较大的值送给输出OUT。输入参数和OUT的数据类型为各种整数和浮点数,可以增加输入的个数。
(6)LIMIT指令
“设置限值”指令LIMIT(见图3-57)将输入IN的值限制在输入MIN与MAX的值范围之间。如果IN的值没有超出该范围,将它直接保存在OUT指定的地址中。如果IN的值小于MIN的值或大于MAX的值,将MIN或MAX的值送给输出OUT。
图3-57 MIN指令和LIMIT指令
(7)提取小数与取幂指令
“提取小数”指令FRAC将输入IN的小数部分传送到输出OUT。“取幂”指令EXPT计算以输入IN1的值为底,以输入IN2为指数的幂(OUT=IN1IN2),计算结果在OUT中。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。