4.7 数学运算类指令
4.7.1 四则运算指令
(1)整数四则运算指令格式和功能
整数四则运算指令格式和功能如表4-35所示。
表4-35 整数四则运算指令格式和功能
(2)例说整数四则混合运算指令
编程计算。
图4-56 四则混合运算指令
梯形图如图4-56(a)所示,程序仿真结果如图4-56(b)所示。当I0.0接通时,6+7的结果放入VW0,VW0×5的结果放入VW2,VW2-3的结果放入VW4,则VW4里面存放的结果就是的值。
由于整数的四则混合运算指令的OUT的数据类型为16位有符号整数,故操作数采用VW。
VW0包含VB0和VB1两个字节,VW2包含VB2和VB3两个字节,VW4包含VB4和VB5两个字节。所以,计算的中间结果分别存入VW0、VW2、VW4中,而不能用VW0、VW1、VW3。
4.7.2 双整数四则运算指令
(1)双整数四则运算指令格式和功能
双整数四则运算指令格式和功能如表4-36所示。
表4-36 双整数四则运算指令格式和功能
(2)例说双整数四则混合运算指令
编程计算。
梯形图如图4-57(a)所示,程序仿真结果如图4-57(b)所示。当I0.1接通时,369-15的结果放入VD0,VD0×5的结果放入VD4,VD4÷21的结果放入VD8,则VD8里面存放的结果就是的值。事实上,计算并不能被21整除,而对于整数和双整数的一般除法,不管余数有多大,都会被舍掉,只保留整数部分,所以,计算结果为84,如果需要精确计算,则需要使用实数的混合运算。
图4-57 双整数四则混合运算指令
由于双整数的四则混合运算指令的OUT的数据类型为32位有符号整数,故操作数采用VD。由于VD0包含VB0~VB3四个字节,故程序中使用地址的方式是VD0、VD4、VD8。
4.7.3 实数四则运算指令
(1)实数四则运算指令格式和功能
实数四则运算指令格式和功能如表4-37所示。
表4-37 实数四则运算指令格式和功能
进行加、减、乘、除运算后会对特殊寄存器的一些位产生影响,因此在执行完这些指令后可以查看特殊寄存器里面的这些位的值,从而知道计算的结果是否正确。
受影响的特殊寄存器位有:SM1.0(零)、SM1.1(溢出位)、SM1.2(负)、SM1.3(被零除)。其具体含义如表4-38所示。
表4-38 受影响的特殊寄存器位
(2)例说实数四则混合运算指令
编程计算。
梯形图如图4-58(a)所示,程序仿真结果如图4-58(b)所示。当I0.2接通时,888.9-5.0的结果放入VD0,VD0×2.1的结果放入VD4,VD4÷5.3的结果放入VD8,则VD8里面存放的结果就是的值。
图4-58 实数四则混合运算指令
本次所用指令都是实数运算,所以在减法指令中,IN2的数值应该输入“5.0”而不是“5”。
4.7.4 完全整数乘法、除法指令
(1)完全整数乘法、除法指令格式和功能
完全整数乘法、除法指令格式和功能如表4-39所示。
表4-39 完全整数乘法、除法指令格式和功能
一般说来,乘法计算的积要比乘数的位数高,除法运算后还有余数问题,一般乘法和除法运算不能解决这些问题。例如在一般整数除法中,两个16位的整数相除,产生一个16位的整数商,不保留余数。双整数除法也同样,只是位数变为32位。
完全乘法指令是将两个有符号整数的IN1和IN2相乘,产生一个32位双整数结果OUT。完全整数除法中,两个16位的有符号整数相除,产生一个32位结果,其中,低16位为商,高16位为余数。
(2)例说完全整数乘法、除法指令
图4-59中,相除后得到32位结果存入VD10中。其中,VD10包含VW10(高16位)和VW12(低16位)。
图4-59 完全整数乘法、除法指令
4.7.5 数学函数指令
数学函数指令格式和功能如表4-40所示。
表4-40 数学函数功能指令格式和功能
4.7.6 递增、递减指令
(1)递增、递减指令格式和功能
递增、递减指令格式和功能如表4-41所示。
表4-41 递增、递减指令格式和功能
(2)例说递增指令
梯形图如图4-60所示,SM0.1接通一个扫描周期,使MB1=2#00000000,I0.0接通一次,MB1的内容加1并将结果存入MB1中,执行过程如图4-60(b)所示。
图4-60 递增指令
此程序可用于单一开关控制两灯,甲灯亮(甲组设备工作),乙灯不亮(乙组设备不工作);按一次按钮,乙灯亮(乙组设备工作),甲灯不亮(甲组设备不工作);再按一次按钮,甲灯亮(甲组设备工作),乙灯不亮(乙组设备不工作);依此类推。
4.7.7 综合实例
综合实例1——求直线坐标
一直线的斜率为32.5,在Y轴上的截距为-42,已知某点X轴坐标,编写程序求该点的Y轴坐标。
元件说明见表4-42。
表4-42 元件说明
控制程序如图4-61所示。
图4-61 控制程序
已知某点X轴坐标,求该点的Y轴坐标的计算公式为
SM0.0为特殊功能寄存器,只要CPU运行时,该位始终为1。
如图4-61所示,VD1000存放的是X轴坐标值,32.5乘以VD1000内的数值将计算结果存入VD1004,VD1004的数据减去42,便得到Y轴坐标值,将其存入VD1008中。
综合实例2——求温度传感器输出电压对应的温度。
已知某温度传感器的测量范围为-20~80℃,对应的输出电压为0~5V,试编程计算当输出电压为V时,对应的环境温度T。
元件说明见表4-43。
表4-43 元件说明
控制程序如图4-62所示。
图4-62
图4-62 控制程序
① 由控制要求知,最低检测温度Tmin=-20℃,最高检测温度Tmax=80℃,最小输出电压Vmin=0V,最大输出电压Vmax=5V,则输出电压V与所对应的温度T计算公式为
(4-1)
② 程序执行过程,在梯形图中有详尽的注释,在此不再赘述。
编写梯形图程序时,为保证计算精度,要先做乘法再做除法。
综合实例3——求余弦值
求30°余弦值。
元件说明见表4-44。
表4-44 元件说明
控制程序如图4-63所示。
图4-63 控制程序
三角函数指令是对实数弧度值进行相应的计算,本案例中需先将角度值转化为实数弧度值,然后再求余弦。
公式为
综合实例4——广告灯控制
范例示意如图4-64所示。
图4-64 范例示意
一组广告灯包括8个彩色LED从左到右依次排开。启动时,要求8个彩色广告灯从右到左逐个点亮,全部点亮时,再从左到右逐个熄灭,全部熄灭后,再从左到右逐个点亮,全部点亮时,再从右到左逐个熄灭,并不断重复上述过程。
元件说明见表4-45。
表4-45 元件说明
控制程序如图4-65所示。
图4-65 控制程序
① 按下启动开关,I0.0常开触点闭合,MB0=1,即M0.1=OFF,M0.0=ON,使Q0.0被置1,同时T37、T38开始计时,Q0.0置位,T37每隔1s发出一个脉冲,执行左移指令,将Q0.0的1依次左移至Q0.1~Q0.7,8个LED依次点亮,最后全亮。
② T38隔8s再发一个脉冲执行一次INC加1指令,M0.1=ON,M0.0=OFF,M0.1常开触点闭合,M0.0常开触点断开,执行右移指令,T37每隔1s发出一个脉冲右移一次,每右移一次最左位补0,0依次右移到Q0.6~Q0.0,8个LED依次熄灭,最后全灭。
③ T38隔8s再发一个脉冲,执行一次INC加1指令,M0.1=ON,M0.0=ON,M0.1、M0.0常开触点都闭合,执行右移指令,并将Q0.7置位,T37每隔1s发一个脉冲,将Q0.7的1依次右移至Q0.6~Q0.0,8个LED依次点亮,最后全亮。
④ T38隔8s再发一个脉冲,执行一次INC加1指令,M0.1=OFF,M0.0=OFF,M0.1常闭触点闭合,M0.0常开触点断开并执行左移指令,每左移一位,最右位Q0.0即补零,T37每隔1s发出一个脉冲,最右位补零,0依次左移到Q0.1~Q0.7,8个LED依次熄灭,最后全灭。
⑤ T38每隔8s发出一个脉冲,不断重复上述过程。