標(biāo)題: S7-200當(dāng)整數(shù)相除遇到余數(shù) [打印本頁(yè)]

作者: hujia    時(shí)間: 2015-5-28 00:51
標(biāo)題: S7-200當(dāng)整數(shù)相除遇到余數(shù)
大家注意到?jīng)]有,為什么S7-200編程軟件里面除了有DIV_I指令,還要有DIV指令,它們不都是實(shí)現(xiàn)整數(shù)相除的功能嗎?”。這樣說(shuō)是有道理的,那它們之間的差異在哪兒呢?先來(lái)看看兩個(gè)指令的功能說(shuō)明:


1. DIV指令是將兩個(gè)16位的整數(shù)相除,得出一個(gè)32位的結(jié)果,其中包括一個(gè)16位的余數(shù)(高位)和一個(gè)16位的商(低位)。

2. DIV_I指令是將兩個(gè)16位的整數(shù)相除,產(chǎn)生一個(gè)16位的商,不保留余數(shù)。

看來(lái)區(qū)別是在結(jié)果上面,一起來(lái)做個(gè)實(shí)驗(yàn)看看吧:


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



其中,VW0是被除數(shù),VW2是除數(shù),VW10是整數(shù)相除得到的商,余數(shù)沒(méi)有保留。由此,這兩個(gè)功能塊的區(qū)別就顯而易見(jiàn)了。

    那我們?cè)俜催^(guò)來(lái)看看“S7-300中哪個(gè)指令塊可以實(shí)現(xiàn)S7-200中DIV指令塊的功能嗎?”。經(jīng)過(guò)一番查找,在STEP7中整數(shù)運(yùn)算的指令塊,也沒(méi)有見(jiàn)到與DIV指令完全相同功能的指令塊,但卻發(fā)現(xiàn)了MOD_DI功能塊是可以單獨(dú)取余數(shù)的。那么,我們接著實(shí)驗(yàn):

    其中,MD0為被除數(shù),MD4為除數(shù),MD8為雙整數(shù)相除得到的余數(shù) ,不保留商。


其中,MD0為被除數(shù),MD4為除數(shù),MD12為雙整數(shù)相除得到的商,不保留余數(shù)。
看來(lái)我們寫程序想要實(shí)現(xiàn)一個(gè)指令塊既得商,又得余數(shù)的功能不得不分步實(shí)施啦。雖然說(shuō)在STEP7的編程中不存在DIV同樣功能的指令塊,但它的實(shí)現(xiàn)更為靈活——將余數(shù)與商分開(kāi),根據(jù)工藝的需要單獨(dú)取之。另外,在S7-200中實(shí)現(xiàn)整數(shù)取余有一定的局限性,就是DIV指令塊只能實(shí)現(xiàn)16位的整數(shù)相除取余,而STEP 7中的MOD_DI則可以使用32位的雙整數(shù)直接取余。

   通過(guò)實(shí)驗(yàn)是不是更清楚明了呢?相信您已經(jīng)牢牢記住了。


















歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1