![PLC编程及案例手册](https://wfqqreader-1252317822.image.myqcloud.com/cover/804/41806804/b_41806804.jpg)
4.7 数学运算类指令
4.7.1 四则运算指令
(1)整数四则运算指令格式和功能
整数四则运算指令格式和功能如表4-35所示。
表4-35 整数四则运算指令格式和功能
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/b4-35.jpg?sign=1739590388-l3O6rDfHzvP4kftggLEgQbvslRBsblQa-0-2d949166fee972a8fe0e23f8dc5cda8a)
(2)例说整数四则混合运算指令
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0026.jpg?sign=1739590388-w5TzNprfG7lT6damHcyxZqhHQ6pzqzSV-0-ab3587f122fcc1d61dcca5a6654fb2bc)
编程计算。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/4d56.jpg?sign=1739590388-ERmCavoCT5ahN573VYHOyVEbZBDg8gNv-0-a1be9b48142aa986c35a26683b02fba0)
图4-56 四则混合运算指令
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0029.jpg?sign=1739590388-9Jti9rYkAwkUaW9Ur432crtTUj0wjA2U-0-e29e3e81528758d41be9f512fcfb8137)
梯形图如图4-56(a)所示,程序仿真结果如图4-56(b)所示。当I0.0接通时,6+7的结果放入VW0,VW0×5的结果放入VW2,VW2-3的结果放入VW4,则VW4里面存放的结果就是的值。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0038.jpg?sign=1739590388-QCRb8kUwlvY8ATEmCeKwlZrSy5mzTf9W-0-782f43fa9a915cf05a447619a824de4d)
由于整数的四则混合运算指令的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 双整数四则运算指令格式和功能
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/b4-36.jpg?sign=1739590388-9pi5QE2mMh6SlyNtI0FLZvLh7X2YzjIE-0-af69a180f8e017a4247566f309a122e8)
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/b132.jpg?sign=1739590388-JhTPIqqkie6YC5h3UVtP6LxJQQj2NlVh-0-3a9bbbb213538459f5d0dae8363ba0ef)
(2)例说双整数四则混合运算指令
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0026.jpg?sign=1739590388-w5TzNprfG7lT6damHcyxZqhHQ6pzqzSV-0-ab3587f122fcc1d61dcca5a6654fb2bc)
编程计算。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0029.jpg?sign=1739590388-9Jti9rYkAwkUaW9Ur432crtTUj0wjA2U-0-e29e3e81528758d41be9f512fcfb8137)
梯形图如图4-57(a)所示,程序仿真结果如图4-57(b)所示。当I0.1接通时,369-15的结果放入VD0,VD0×5的结果放入VD4,VD4÷21的结果放入VD8,则VD8里面存放的结果就是的值。事实上,计算
并不能被21整除,而对于整数和双整数的一般除法,不管余数有多大,都会被舍掉,只保留整数部分,所以,计算结果为84,如果需要精确计算,则需要使用实数的混合运算。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/4d57.jpg?sign=1739590388-YVQqU2nvhHjAKRo9sueIoDAvh1mW0QwI-0-be7e2856048030240cc0d3d6ae2724e7)
图4-57 双整数四则混合运算指令
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0038.jpg?sign=1739590388-QCRb8kUwlvY8ATEmCeKwlZrSy5mzTf9W-0-782f43fa9a915cf05a447619a824de4d)
由于双整数的四则混合运算指令的OUT的数据类型为32位有符号整数,故操作数采用VD。由于VD0包含VB0~VB3四个字节,故程序中使用地址的方式是VD0、VD4、VD8。
4.7.3 实数四则运算指令
(1)实数四则运算指令格式和功能
实数四则运算指令格式和功能如表4-37所示。
表4-37 实数四则运算指令格式和功能
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/b4-37.jpg?sign=1739590388-2zpKa2OrjUwiFTpOqfm2aHbpMjMwFT3L-0-466c890e032dc6ae8b114af51856662c)
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0038.jpg?sign=1739590388-QCRb8kUwlvY8ATEmCeKwlZrSy5mzTf9W-0-782f43fa9a915cf05a447619a824de4d)
进行加、减、乘、除运算后会对特殊寄存器的一些位产生影响,因此在执行完这些指令后可以查看特殊寄存器里面的这些位的值,从而知道计算的结果是否正确。
受影响的特殊寄存器位有:SM1.0(零)、SM1.1(溢出位)、SM1.2(负)、SM1.3(被零除)。其具体含义如表4-38所示。
表4-38 受影响的特殊寄存器位
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/b4-38.jpg?sign=1739590388-KalGIU4MND9kddqUW9lZoLRr3aoYMz5S-0-6dbe05f37426ab74635b71009be1ea37)
(2)例说实数四则混合运算指令
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0026.jpg?sign=1739590388-w5TzNprfG7lT6damHcyxZqhHQ6pzqzSV-0-ab3587f122fcc1d61dcca5a6654fb2bc)
编程计算。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0029.jpg?sign=1739590388-9Jti9rYkAwkUaW9Ur432crtTUj0wjA2U-0-e29e3e81528758d41be9f512fcfb8137)
梯形图如图4-58(a)所示,程序仿真结果如图4-58(b)所示。当I0.2接通时,888.9-5.0的结果放入VD0,VD0×2.1的结果放入VD4,VD4÷5.3的结果放入VD8,则VD8里面存放的结果就是的值。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/4d58.jpg?sign=1739590388-1srKhbpoV4Ou1NnNDMWrT9KsboHoaT0u-0-b6eca02206ee20da04f6250b506398c1)
图4-58 实数四则混合运算指令
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0038.jpg?sign=1739590388-QCRb8kUwlvY8ATEmCeKwlZrSy5mzTf9W-0-782f43fa9a915cf05a447619a824de4d)
本次所用指令都是实数运算,所以在减法指令中,IN2的数值应该输入“5.0”而不是“5”。
4.7.4 完全整数乘法、除法指令
(1)完全整数乘法、除法指令格式和功能
完全整数乘法、除法指令格式和功能如表4-39所示。
表4-39 完全整数乘法、除法指令格式和功能
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/b4-39.jpg?sign=1739590388-8tRApYRzTZw7lhOLEUr1EzIOoPx6shN0-0-700f565fb11c60a6f10cb24414293ead)
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0038.jpg?sign=1739590388-QCRb8kUwlvY8ATEmCeKwlZrSy5mzTf9W-0-782f43fa9a915cf05a447619a824de4d)
一般说来,乘法计算的积要比乘数的位数高,除法运算后还有余数问题,一般乘法和除法运算不能解决这些问题。例如在一般整数除法中,两个16位的整数相除,产生一个16位的整数商,不保留余数。双整数除法也同样,只是位数变为32位。
完全乘法指令是将两个有符号整数的IN1和IN2相乘,产生一个32位双整数结果OUT。完全整数除法中,两个16位的有符号整数相除,产生一个32位结果,其中,低16位为商,高16位为余数。
(2)例说完全整数乘法、除法指令
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0029.jpg?sign=1739590388-9Jti9rYkAwkUaW9Ur432crtTUj0wjA2U-0-e29e3e81528758d41be9f512fcfb8137)
图4-59中,相除后得到32位结果存入VD10中。其中,VD10包含VW10(高16位)和VW12(低16位)。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/4d59.jpg?sign=1739590388-A0t6gAxekEp6NdGaw8FIZKjRnJvN5zzP-0-a4ef8a5a34d555748e21e0f2f3c4789f)
图4-59 完全整数乘法、除法指令
4.7.5 数学函数指令
数学函数指令格式和功能如表4-40所示。
表4-40 数学函数功能指令格式和功能
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/b4-40.jpg?sign=1739590388-i8j34dXljzbaFKwFzJyRSV2Xi4QYGhbo-0-55b3eb09d926cd338424e6897f9e637f)
4.7.6 递增、递减指令
(1)递增、递减指令格式和功能
递增、递减指令格式和功能如表4-41所示。
表4-41 递增、递减指令格式和功能
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/b4-41.jpg?sign=1739590388-GZZ2u8Bd0ib8oAICppDRSs9OzhteGPkw-0-0a33f0e45e9d452a93022d306efa162a)
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/b137.jpg?sign=1739590388-9U7XOIyAuB9CJgK1sKkLH31AWlIUdcCJ-0-940b9cd4ce4f88470dc57f1db5c781e8)
(2)例说递增指令
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0029.jpg?sign=1739590388-9Jti9rYkAwkUaW9Ur432crtTUj0wjA2U-0-e29e3e81528758d41be9f512fcfb8137)
梯形图如图4-60所示,SM0.1接通一个扫描周期,使MB1=2#00000000,I0.0接通一次,MB1的内容加1并将结果存入MB1中,执行过程如图4-60(b)所示。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/4d60.jpg?sign=1739590388-GAvha8bRXodnKHCSti1WVJTD5WLjbxvb-0-158b72d9e3fc0c30ae31e6f95f5dbe85)
图4-60 递增指令
此程序可用于单一开关控制两灯,甲灯亮(甲组设备工作),乙灯不亮(乙组设备不工作);按一次按钮,乙灯亮(乙组设备工作),甲灯不亮(甲组设备不工作);再按一次按钮,甲灯亮(甲组设备工作),乙灯不亮(乙组设备不工作);依此类推。
4.7.7 综合实例
综合实例1——求直线坐标
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0019.jpg?sign=1739590388-oaY6dOXFDDDbfjq46c98UIjmlzYAb5vZ-0-644cc78268484a6d3e4be97f60e07007)
一直线的斜率为32.5,在Y轴上的截距为-42,已知某点X轴坐标,编写程序求该点的Y轴坐标。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0004.jpg?sign=1739590388-g0Vy79FcFkYOapVywSnqbBbH34vE6zTC-0-e2619d95c309a538d1948e19f4e5e943)
元件说明见表4-42。
表4-42 元件说明
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/b4-42.jpg?sign=1739590388-VBW9zzxhNsjaQrBAarTdx07cdC9Oqe4q-0-29ac9c49cc1e4d9c82602bbd628f1c30)
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0015.jpg?sign=1739590388-t6foT5K2YbDiCIPSV4jjjHINeotTuluY-0-e1755df5516358d20e8da3f1165508fd)
控制程序如图4-61所示。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/4d61.jpg?sign=1739590388-oCsdRYiw6U781s1fBif7E4VO3RGVt8ZF-0-ef58b270bc253d810a8f485660fcc00c)
图4-61 控制程序
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0029.jpg?sign=1739590388-9Jti9rYkAwkUaW9Ur432crtTUj0wjA2U-0-e29e3e81528758d41be9f512fcfb8137)
已知某点X轴坐标,求该点的Y轴坐标的计算公式为
SM0.0为特殊功能寄存器,只要CPU运行时,该位始终为1。
如图4-61所示,VD1000存放的是X轴坐标值,32.5乘以VD1000内的数值将计算结果存入VD1004,VD1004的数据减去42,便得到Y轴坐标值,将其存入VD1008中。
综合实例2——求温度传感器输出电压对应的温度。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0019.jpg?sign=1739590388-oaY6dOXFDDDbfjq46c98UIjmlzYAb5vZ-0-644cc78268484a6d3e4be97f60e07007)
已知某温度传感器的测量范围为-20~80℃,对应的输出电压为0~5V,试编程计算当输出电压为V时,对应的环境温度T。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0004.jpg?sign=1739590388-g0Vy79FcFkYOapVywSnqbBbH34vE6zTC-0-e2619d95c309a538d1948e19f4e5e943)
元件说明见表4-43。
表4-43 元件说明
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/b4-43.jpg?sign=1739590388-gsSqJWeFpqGPyflFW1a8i4K2SYlXaLOt-0-aeaaaecf786f3d41607e27320f1a6353)
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0015.jpg?sign=1739590388-t6foT5K2YbDiCIPSV4jjjHINeotTuluY-0-e1755df5516358d20e8da3f1165508fd)
控制程序如图4-62所示。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/4d62.jpg?sign=1739590388-O56JiJ2ZeeAVuvHlo3PPekdkLfJLgPUB-0-75f26dc4311e66945db48227494201ad)
图4-62
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/4d621.jpg?sign=1739590388-yEZQlDQ70jHcPPrGjiyD56sJmESX7d9f-0-62a5e86b5cc1487a91e884d3dd6846df)
图4-62 控制程序
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0029.jpg?sign=1739590388-9Jti9rYkAwkUaW9Ur432crtTUj0wjA2U-0-e29e3e81528758d41be9f512fcfb8137)
① 由控制要求知,最低检测温度Tmin=-20℃,最高检测温度Tmax=80℃,最小输出电压Vmin=0V,最大输出电压Vmax=5V,则输出电压V与所对应的温度T计算公式为
(4-1)
② 程序执行过程,在梯形图中有详尽的注释,在此不再赘述。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0038.jpg?sign=1739590388-QCRb8kUwlvY8ATEmCeKwlZrSy5mzTf9W-0-782f43fa9a915cf05a447619a824de4d)
编写梯形图程序时,为保证计算精度,要先做乘法再做除法。
综合实例3——求余弦值
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0019.jpg?sign=1739590388-oaY6dOXFDDDbfjq46c98UIjmlzYAb5vZ-0-644cc78268484a6d3e4be97f60e07007)
求30°余弦值。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0004.jpg?sign=1739590388-g0Vy79FcFkYOapVywSnqbBbH34vE6zTC-0-e2619d95c309a538d1948e19f4e5e943)
元件说明见表4-44。
表4-44 元件说明
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/b4-44.jpg?sign=1739590388-SWmWYRxWWBd9nGxPb7xq3O3bgIptiHpd-0-cda1d31d5872e7d07ef426a45964be51)
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0015.jpg?sign=1739590388-t6foT5K2YbDiCIPSV4jjjHINeotTuluY-0-e1755df5516358d20e8da3f1165508fd)
控制程序如图4-63所示。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/4d63.jpg?sign=1739590388-y8gIS7e4QLNJlzLvyGwNSQtnFs6Rw8yi-0-402414221364cdfb177811cf4382e08b)
图4-63 控制程序
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0029.jpg?sign=1739590388-9Jti9rYkAwkUaW9Ur432crtTUj0wjA2U-0-e29e3e81528758d41be9f512fcfb8137)
三角函数指令是对实数弧度值进行相应的计算,本案例中需先将角度值转化为实数弧度值,然后再求余弦。
公式为
综合实例4——广告灯控制
范例示意如图4-64所示。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/4d64.jpg?sign=1739590388-wcVi5WryTIOKUu5aIOdjioBfGnWPPM1E-0-81a39a5d155491d4020c07aabb3c6631)
图4-64 范例示意
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0019.jpg?sign=1739590388-oaY6dOXFDDDbfjq46c98UIjmlzYAb5vZ-0-644cc78268484a6d3e4be97f60e07007)
一组广告灯包括8个彩色LED从左到右依次排开。启动时,要求8个彩色广告灯从右到左逐个点亮,全部点亮时,再从左到右逐个熄灭,全部熄灭后,再从左到右逐个点亮,全部点亮时,再从右到左逐个熄灭,并不断重复上述过程。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0004.jpg?sign=1739590388-g0Vy79FcFkYOapVywSnqbBbH34vE6zTC-0-e2619d95c309a538d1948e19f4e5e943)
元件说明见表4-45。
表4-45 元件说明
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/b4-45.jpg?sign=1739590388-fPbk5KM7J5MZaLdmGkjVQCSi3H9Hsuv0-0-5722e71a9da6f9b864cc99dc08cde4f3)
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0015.jpg?sign=1739590388-t6foT5K2YbDiCIPSV4jjjHINeotTuluY-0-e1755df5516358d20e8da3f1165508fd)
控制程序如图4-65所示。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/4d65.jpg?sign=1739590388-UcPw9FmmZ5X6IzvdWswIGajLkZ8PfuUO-0-b9faa788b2520e10a1b6129852b689f2)
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/4d651.jpg?sign=1739590388-8rdkf3Mi12iK1gYBcQ6s9SSfGwzNxmek-0-c761e3873b5646e8e254db9eae05d9ae)
图4-65 控制程序
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0029.jpg?sign=1739590388-9Jti9rYkAwkUaW9Ur432crtTUj0wjA2U-0-e29e3e81528758d41be9f512fcfb8137)
① 按下启动开关,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发出一个脉冲,不断重复上述过程。