![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=1739421226-vDQ9FQcXzlS8Rs22WOXeo1vwgRI04nOw-0-8c5a0ad4064091ac65a7ed6d08de2052)
(2)例说整数四则混合运算指令
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0026.jpg?sign=1739421226-IdEe9nofQQCQME36N32mBbcQ2y71wnLT-0-e08f583034a09ddd6ad4e9c9248e447c)
编程计算。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/4d56.jpg?sign=1739421226-0hJ3Cw7VccFoa9p02tXxOH2w7noNXH5r-0-46f8605468c8b4135302ed6eae2d9134)
图4-56 四则混合运算指令
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0029.jpg?sign=1739421226-6YUVKiN7HL9Y37wxIsUeeJYACKal6dUZ-0-c3f9d393ea94ad4f0b44db7d9ee1962e)
梯形图如图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=1739421226-BYtySaw3osNWg36ewfvVknpAMLh4HGjz-0-5a935a5e88cc2637d479508486597c71)
由于整数的四则混合运算指令的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=1739421226-h9pao8PHxK73XfK5pfSM4D1JfbwqovNy-0-b97c1020ae719c859a68a5c8e8cce48d)
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/b132.jpg?sign=1739421226-etVB7ZTDjKlLMnDgUOhMx1cUyQGQl3j6-0-de58ce8b8b6622c8f60e4b5178fed4c8)
(2)例说双整数四则混合运算指令
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0026.jpg?sign=1739421226-IdEe9nofQQCQME36N32mBbcQ2y71wnLT-0-e08f583034a09ddd6ad4e9c9248e447c)
编程计算。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0029.jpg?sign=1739421226-6YUVKiN7HL9Y37wxIsUeeJYACKal6dUZ-0-c3f9d393ea94ad4f0b44db7d9ee1962e)
梯形图如图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=1739421226-WSw8v8PAk7bpFI6Y5Opg17PMVMTJrIZ7-0-452818c230fd1dbfe101d165a5af1b11)
图4-57 双整数四则混合运算指令
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0038.jpg?sign=1739421226-BYtySaw3osNWg36ewfvVknpAMLh4HGjz-0-5a935a5e88cc2637d479508486597c71)
由于双整数的四则混合运算指令的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=1739421226-7eKUuiO8KX9q4dnKB5qqUnoV2SsohSYT-0-e973b96bdd46d7dab1a4b69d53c5f11f)
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0038.jpg?sign=1739421226-BYtySaw3osNWg36ewfvVknpAMLh4HGjz-0-5a935a5e88cc2637d479508486597c71)
进行加、减、乘、除运算后会对特殊寄存器的一些位产生影响,因此在执行完这些指令后可以查看特殊寄存器里面的这些位的值,从而知道计算的结果是否正确。
受影响的特殊寄存器位有: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=1739421226-RPaoAcJliFIWqtsV8dHDEyCa56qwKCBs-0-5f24967685d0534883539933538e2bda)
(2)例说实数四则混合运算指令
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0026.jpg?sign=1739421226-IdEe9nofQQCQME36N32mBbcQ2y71wnLT-0-e08f583034a09ddd6ad4e9c9248e447c)
编程计算。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0029.jpg?sign=1739421226-6YUVKiN7HL9Y37wxIsUeeJYACKal6dUZ-0-c3f9d393ea94ad4f0b44db7d9ee1962e)
梯形图如图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=1739421226-Q1Vg4n3317wIYYEJ61uWLjlRIBTE5KpG-0-9e9a6edb22f43a1b3ef7353a3fd30247)
图4-58 实数四则混合运算指令
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0038.jpg?sign=1739421226-BYtySaw3osNWg36ewfvVknpAMLh4HGjz-0-5a935a5e88cc2637d479508486597c71)
本次所用指令都是实数运算,所以在减法指令中,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=1739421226-FqP3tp23BTSS8aduFVOTvUyv6dBgubLC-0-2eb5e9a793d5c72ee457f520b84dddb3)
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0038.jpg?sign=1739421226-BYtySaw3osNWg36ewfvVknpAMLh4HGjz-0-5a935a5e88cc2637d479508486597c71)
一般说来,乘法计算的积要比乘数的位数高,除法运算后还有余数问题,一般乘法和除法运算不能解决这些问题。例如在一般整数除法中,两个16位的整数相除,产生一个16位的整数商,不保留余数。双整数除法也同样,只是位数变为32位。
完全乘法指令是将两个有符号整数的IN1和IN2相乘,产生一个32位双整数结果OUT。完全整数除法中,两个16位的有符号整数相除,产生一个32位结果,其中,低16位为商,高16位为余数。
(2)例说完全整数乘法、除法指令
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0029.jpg?sign=1739421226-6YUVKiN7HL9Y37wxIsUeeJYACKal6dUZ-0-c3f9d393ea94ad4f0b44db7d9ee1962e)
图4-59中,相除后得到32位结果存入VD10中。其中,VD10包含VW10(高16位)和VW12(低16位)。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/4d59.jpg?sign=1739421226-F5pAOerIX5mjXYeUri8Q6yE07s3AOVJ9-0-626139ab6298da15459c0127a4482450)
图4-59 完全整数乘法、除法指令
4.7.5 数学函数指令
数学函数指令格式和功能如表4-40所示。
表4-40 数学函数功能指令格式和功能
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/b4-40.jpg?sign=1739421226-PtcpAVqNxe4hSIJpK2pgliSaaHTPxjYC-0-3d33a40cc84db66803de496f958c1b32)
4.7.6 递增、递减指令
(1)递增、递减指令格式和功能
递增、递减指令格式和功能如表4-41所示。
表4-41 递增、递减指令格式和功能
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/b4-41.jpg?sign=1739421226-uQCxg79eqjk1hzZptHHnYSq0qYmu0TRr-0-aeea641ce4c9d704184b388842c24824)
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/b137.jpg?sign=1739421226-VfRbKRTLUdM9XSbLueVDMi1GJbO6QZzc-0-b1ba69979a37f8a5b14a7b15fbf90f95)
(2)例说递增指令
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0029.jpg?sign=1739421226-6YUVKiN7HL9Y37wxIsUeeJYACKal6dUZ-0-c3f9d393ea94ad4f0b44db7d9ee1962e)
梯形图如图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=1739421226-apYG8lQD1EdOtM43d1ikhKaCrsiFEQ5I-0-99af34fbaa63f82e404203e46c70129e)
图4-60 递增指令
此程序可用于单一开关控制两灯,甲灯亮(甲组设备工作),乙灯不亮(乙组设备不工作);按一次按钮,乙灯亮(乙组设备工作),甲灯不亮(甲组设备不工作);再按一次按钮,甲灯亮(甲组设备工作),乙灯不亮(乙组设备不工作);依此类推。
4.7.7 综合实例
综合实例1——求直线坐标
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0019.jpg?sign=1739421226-jsG4hFNVnzlMqaZ2CAStVBIJqCFaNWUa-0-716bf863413714789619b99777f037ec)
一直线的斜率为32.5,在Y轴上的截距为-42,已知某点X轴坐标,编写程序求该点的Y轴坐标。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0004.jpg?sign=1739421226-F6IOkbgYWniT4zw1d804KsAHN7B26XoT-0-34cc15e2aaf584c1b757cc92e054bae3)
元件说明见表4-42。
表4-42 元件说明
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/b4-42.jpg?sign=1739421226-8cDJJ6B37qmGMDb77pg6fGKIvwy63eg0-0-3108c90a871c309db78011399485d110)
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0015.jpg?sign=1739421226-4JJAayxAhHG64wizFhoQqXUlpTwuncPP-0-6139e7c3bd255de0e4912874b7c5ac76)
控制程序如图4-61所示。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/4d61.jpg?sign=1739421226-40ft4MPqXzuLo3EmOtYhvRVRPybINghw-0-28b528d75d6a962572f7a8d1a63e0d83)
图4-61 控制程序
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0029.jpg?sign=1739421226-6YUVKiN7HL9Y37wxIsUeeJYACKal6dUZ-0-c3f9d393ea94ad4f0b44db7d9ee1962e)
已知某点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=1739421226-jsG4hFNVnzlMqaZ2CAStVBIJqCFaNWUa-0-716bf863413714789619b99777f037ec)
已知某温度传感器的测量范围为-20~80℃,对应的输出电压为0~5V,试编程计算当输出电压为V时,对应的环境温度T。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0004.jpg?sign=1739421226-F6IOkbgYWniT4zw1d804KsAHN7B26XoT-0-34cc15e2aaf584c1b757cc92e054bae3)
元件说明见表4-43。
表4-43 元件说明
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/b4-43.jpg?sign=1739421226-491sTstzjHvPwLj6q0aZfnHwE7Df7m7A-0-89cb1888890d7f8492a95919736cc398)
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0015.jpg?sign=1739421226-4JJAayxAhHG64wizFhoQqXUlpTwuncPP-0-6139e7c3bd255de0e4912874b7c5ac76)
控制程序如图4-62所示。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/4d62.jpg?sign=1739421226-QcJuBL0vJc8dgk7xofzdWJF4a6zx1yQh-0-1e3237aa503fa8453ba2e4fa6d834603)
图4-62
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/4d621.jpg?sign=1739421226-6MgBXHnCvYEFBbjxJVEnVVCpGaigowAQ-0-4b44ee0fdf92ced362726083e2838ebf)
图4-62 控制程序
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0029.jpg?sign=1739421226-6YUVKiN7HL9Y37wxIsUeeJYACKal6dUZ-0-c3f9d393ea94ad4f0b44db7d9ee1962e)
① 由控制要求知,最低检测温度Tmin=-20℃,最高检测温度Tmax=80℃,最小输出电压Vmin=0V,最大输出电压Vmax=5V,则输出电压V与所对应的温度T计算公式为
(4-1)
② 程序执行过程,在梯形图中有详尽的注释,在此不再赘述。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0038.jpg?sign=1739421226-BYtySaw3osNWg36ewfvVknpAMLh4HGjz-0-5a935a5e88cc2637d479508486597c71)
编写梯形图程序时,为保证计算精度,要先做乘法再做除法。
综合实例3——求余弦值
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0019.jpg?sign=1739421226-jsG4hFNVnzlMqaZ2CAStVBIJqCFaNWUa-0-716bf863413714789619b99777f037ec)
求30°余弦值。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0004.jpg?sign=1739421226-F6IOkbgYWniT4zw1d804KsAHN7B26XoT-0-34cc15e2aaf584c1b757cc92e054bae3)
元件说明见表4-44。
表4-44 元件说明
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/b4-44.jpg?sign=1739421226-NedGtTXNlOmkqwfCK3qfzRykJTyjwsiW-0-434b98973a052fae724c595cd6faa950)
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0015.jpg?sign=1739421226-4JJAayxAhHG64wizFhoQqXUlpTwuncPP-0-6139e7c3bd255de0e4912874b7c5ac76)
控制程序如图4-63所示。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/4d63.jpg?sign=1739421226-40dwtHVuXkBVlcY4tBYEdNv99ZODh9KN-0-45bd1b7b5c5038862664405dae1cd450)
图4-63 控制程序
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0029.jpg?sign=1739421226-6YUVKiN7HL9Y37wxIsUeeJYACKal6dUZ-0-c3f9d393ea94ad4f0b44db7d9ee1962e)
三角函数指令是对实数弧度值进行相应的计算,本案例中需先将角度值转化为实数弧度值,然后再求余弦。
公式为
综合实例4——广告灯控制
范例示意如图4-64所示。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/4d64.jpg?sign=1739421226-yebUKLQjQVwge5k0LN5UFBbmP8IGK5hX-0-7d77f2370d9c8b705a5a4ad8c5f80934)
图4-64 范例示意
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0019.jpg?sign=1739421226-jsG4hFNVnzlMqaZ2CAStVBIJqCFaNWUa-0-716bf863413714789619b99777f037ec)
一组广告灯包括8个彩色LED从左到右依次排开。启动时,要求8个彩色广告灯从右到左逐个点亮,全部点亮时,再从左到右逐个熄灭,全部熄灭后,再从左到右逐个点亮,全部点亮时,再从右到左逐个熄灭,并不断重复上述过程。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0004.jpg?sign=1739421226-F6IOkbgYWniT4zw1d804KsAHN7B26XoT-0-34cc15e2aaf584c1b757cc92e054bae3)
元件说明见表4-45。
表4-45 元件说明
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/b4-45.jpg?sign=1739421226-1Xq9hX7Z1y6bULbf0KpEB3uGYiN7PYZh-0-cfafa6635fc452361cd56a447e059041)
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0015.jpg?sign=1739421226-4JJAayxAhHG64wizFhoQqXUlpTwuncPP-0-6139e7c3bd255de0e4912874b7c5ac76)
控制程序如图4-65所示。
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/4d65.jpg?sign=1739421226-AiWLbY2uEZHXGJAzyr4BqF9vYOd6mvd0-0-70f502d1a5cca377ba5e7a33761e491c)
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/4d651.jpg?sign=1739421226-pSayqHOZhj2UGa0bm7U9YIh9fSFrJhtq-0-586afa32245288eb024da75cbd9129dd)
图4-65 控制程序
![](https://epubservercos.yuewen.com/95F10D/21838926108253506/epubprivate/OEBPS/Images/Section0029.jpg?sign=1739421226-6YUVKiN7HL9Y37wxIsUeeJYACKal6dUZ-0-c3f9d393ea94ad4f0b44db7d9ee1962e)
① 按下启动开关,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发出一个脉冲,不断重复上述过程。