![西门子PLC从入门到精通](https://wfqqreader-1252317822.image.myqcloud.com/cover/666/27126666/b_27126666.jpg)
2.7 数学运算类指令
PLC普遍具有较强的运算功能,其中数学运算指令是实现运算的主体,它包括四则运算指令、数学功能指令和递增、递减指令。其中四则运算指令包括整数四则运算指令、双整数四则运算指令、实数四则运算指令;数学功能指令包括三角函数指令、对数函数指令和平方根指令等。S7-200PLC对于数学运算指令来说,在使用时需注意存储单元的分配,在梯形图中,源操作数IN1、IN2和目标操作数OUT可以使用不一样的存储单元,这样编写程序比较清晰且容易理解。在使用语句表时,其中的一个源操作数需要和目标操作数OUT的存储单元一致,因此给理解和阅读带来不便,在使用数学运算指令时,建议读者使用梯形图。
2.7.1 四则运算指令
(1)加法/乘法运算
整数、双整数、实数的加法/乘法运算是将源操作数运算后产生的结果,存储在目标操作数OUT中,操作数数据类型不变。常规乘法两个16位整数相乘,产生一个32位的结果。
梯形图表示:IN1+IN2=OUT(IN1×IN2=OUT),其含义为当加法(乘法)允许信号EN=1时,被加数(被乘数)IN1与加数(乘数)IN2相加(乘)送到OUT中。
语句表表示:IN1+OUT=OUT(IN1×OUT=OUT),其含义为先将加数(乘数)送到OUT中,然后把OUT中的数据和IN1中的数据进行相加(乘),并将其结果传送到OUT中。
① 指令格式 加法运算指令格式如表2-24所示,乘法运算指令格式如表2-25所示。
表2-24 加法运算指令格式
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/27.jpg?sign=1739916368-bw4jCf1GGI3JX2AoHpKZ3Mq7GFAveKmK-0-fb876445e21b44b178940161092c985c)
表2-25 乘法运算指令格式
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/28.jpg?sign=1739916368-cUD2I4IrVtx3awup6b8WrRfHuKpJIKS0-0-d2a70fe072d523ae398015b721e437df)
② 应用举例 按下启动按钮,小灯Q0.0会点亮吗?加法/乘法指令应用举例如图2-77所示。
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/2d77.jpg?sign=1739916368-oBf9RZYFtyNXyex3bjHy8paJnpYC7kZ0-0-78cd905fade297dd82d7e94cf15505c9)
图2-77 加法/乘法指令应用举例
(2)减法/除法运算
整数、双整数、实数的减法/除法运算是将源操作数运算后产生的结果,存储在目标操作数OUT中,整数、双整数除法不保留小数。而常规除法两个16位整数相除,产生一个32位的结果,其中高16位存储余数,低16位存储商。
梯形图表示:IN1-IN2=OUT(IN1/IN2=OUT),其含义为当减法(除法)允许信号EN=1时,被减数(被除数)IN1与减数(除数)IN2相减(除)送到OUT中。
语句表表示:IN1-OUT=OUT(IN1/OUT=OUT),其含义为先将减数(除数)送到OUT中,然后把OUT中的数据和IN1中的数据进行相减(除),并将其结果传送到OUT中。
① 指令格式 减法运算指令格式如表2-26所示,除法运算指令格式如表2-27所示。
表2-26 减法运算指令格式
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/29.jpg?sign=1739916368-cHcKXJAJ6tbRb4kClPuzSzJqgG60daDP-0-d07c41c351ee2eb1b7dbccf76c3cadd3)
表2-27 除法运算指令格式
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/30.jpg?sign=1739916368-9OKqGqYgsFRX8dDB8bChsxE8VU4aRWYS-0-37913db1a736835506f060ab2d6d7a74)
② 应用举例 按下启动按钮,小灯Q0.0会点亮吗?减法/除法指令应用实例如图2-78所示。
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/2d78.jpg?sign=1739916368-IOuHI2apDOTyOW34cpbMv0JgPmVgycGK-0-7d4694eb79ca1398da936d3217676d9c)
图2-78 减法/除法指令应用举例
2.7.2 数学功能指令
S7-200PLC的数学函数指令有平方根指令、自然对数指令、指数指令、正弦指令、余弦指令和正切指令。平方根指令是将一个双字长(32位)的实数IN开平方,得到32位的实数结果送到OUT;自然对数指令是将一个双字长(32位)的实数IN取自然对数,得到32位的实数结果送到OUT;指数指令是将一个双字长(32位)的实数IN取以e为底的指数,得到32位的实数结果送到OUT;正弦、余弦和正切指令是将一个弧度值IN分别求正弦、余弦和正切,得到32位的实数结果送到OUT。以上运算输入/输出数据都为实数,结果大于32位二进制数表示的范围时产生溢出。
(1)指令格式
数学功能指令的指令格式如表2-28所示。
表2-28 数学功能指令的指令格式
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/31.jpg?sign=1739916368-uhVAbrWiZoC3g5iqOzCED5VOS07fs7jg-0-e6989a471cba9d38a821e0314a090ad9)
(2)应用举例
按下启动按钮,观察哪些灯亮,哪些灯不亮,为什么?三角函数指令应用举例如图2-79所示。
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/2d79.jpg?sign=1739916368-sBX934V3qSW7RvJwOWKRQrWdMdyhThOQ-0-651cfd95ed3301b0c269c9fbf08c2f4d)
图2-79 三角函数指令应用举例
2.7.3 递增、递减指令
(1)指令简介
字节、字、双字的递增/递减指令是源操作数加1或减1,并将结果存放到OUT中,其中字节增减是无符号的数,字和双字增减是有符号的数。
① 梯形图表示 IN+1=OUT,IN-1=OUT。
② 语句表表示 OUT+1=OUT,OUT-1=OUT。
值得说明的是,IN和OUT使用相同的存储单元。递增、递减指令格式如表2-29所示。
表2-29 递增、递减指令格式
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/32.jpg?sign=1739916368-tXvM4dwmgtSgfSQ93YkuRNtfCwHEosYJ-0-78afea258e9d51d5ebcc4b90e253ca8d)
(2)应用举例
按下启动按钮,观察Q0.0灯是否会点亮?递增/递减指令应用举例如图2-80所示。
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/2d80.jpg?sign=1739916368-zBMPtwcKxiEaxQqwoHtITE9IK45512oS-0-a409175201270f005c243b2a2bad3cef)
图2-80 递增/递减指令应用举例
2.7.4 综合应用举例
例1:试用编程计算(9+1)×10-19,再开方的值。
具体程序如图2-81所示。程序编制并不难,按照数学(9+1)×10-19,一步步地用数学运算指令表达出来即可。这里考虑到SQRT指令输入/输出操作数均为实数,故加、减和乘指令也都选择了实数型。如果结果等于9,Q0.0灯会亮。
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/2d81.jpg?sign=1739916368-XNsGdUJ8Q7q2ydz0ai0mNNN5tLmegsro-0-1580f2d02f63ac89e25715b17da7e547)
图2-81 例1程序
例2:控制1台3相异步电动机,要求电动机按正转30s→停止30s→反转30s→停止30s的顺序并自动循环运行,直到按下停止按钮,电动机方停止。
具体程序如图2-82所示。需要注意的是,递增指令前面习惯上加一个脉冲P,否则每个扫描周期都会加1。
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/2d82.jpg?sign=1739916368-o7WtZJvF0kS7J299OE6kXCAamsCVQeRq-0-71e6fd6c3225634f7393b6527326b2bd)
图2-82 例2程序
重点提示
① 数学运算类指令是实现模拟量等复杂运算的基础,需要予以重视。
② 递增/递减指令习惯上用脉冲形式,如使能端一直为ON,则每个扫描周期都会加1或减1,这样有些程序就无法实现了。