找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7518|回复: 0
打印 上一主题 下一主题
收起左侧

S7-200当整数相除遇到余数

[复制链接]
跳转到指定楼层
楼主
ID:26188 发表于 2015-5-28 00:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家注意到没有,为什么S7-200编程软件里面除了有DIV_I指令,还要有DIV指令,它们不都是实现整数相除的功能吗?”。这样说是有道理的,那它们之间的差异在哪儿呢?先来看看两个指令的功能说明:


1. DIV指令是将两个16位的整数相除,得出一个32位的结果,其中包括一个16位的余数(高位)和一个16位的商(低位)。

2. DIV_I指令是将两个16位的整数相除,产生一个16位的商,不保留余数。

看来区别是在结果上面,一起来做个实验看看吧:


    其中,VW0是被除数,VW2是除数,VD4的低十六位(即VW6 = 16#000D)是整数相除得到的商(VW6十进制值是13);高十六位(即VW4 = 16#00DC)是整数相除得到的余数(VW4十进制值是220)。



其中,VW0是被除数,VW2是除数,VW10是整数相除得到的商,余数没有保留。由此,这两个功能块的区别就显而易见了。

    那我们再反过来看看“S7-300中哪个指令块可以实现S7-200中DIV指令块的功能吗?”。经过一番查找,在STEP7中整数运算的指令块,也没有见到与DIV指令完全相同功能的指令块,但却发现了MOD_DI功能块是可以单独取余数的。那么,我们接着实验:

    其中,MD0为被除数,MD4为除数,MD8为双整数相除得到的余数 ,不保留商。


其中,MD0为被除数,MD4为除数,MD12为双整数相除得到的商,不保留余数。
看来我们写程序想要实现一个指令块既得商,又得余数的功能不得不分步实施啦。虽然说在STEP7的编程中不存在DIV同样功能的指令块,但它的实现更为灵活——将余数与商分开,根据工艺的需要单独取之。另外,在S7-200中实现整数取余有一定的局限性,就是DIV指令块只能实现16位的整数相除取余,而STEP 7中的MOD_DI则可以使用32位的双整数直接取余。

   通过实验是不是更清楚明了呢?相信您已经牢牢记住了。













分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表