話說一個(gè)細(xì)心的客戶詢問我“為什么西門子s7-200plc編程軟件里面除了有div_i指令,還要有div指令,它們不都是實(shí)現(xiàn)整數(shù)相除的功能嗎?”。說的有道理,差異在哪兒呢?先來看看兩個(gè)指令的功能說明:
1. div指令是將兩個(gè)16位的整數(shù)相除,得出一個(gè)32位的結(jié)果,其中包括一個(gè)16位的余數(shù)(高位)和一個(gè)16位的商(低位)。
2.div_i指令是將兩個(gè)16位的整數(shù)相除,產(chǎn)生一個(gè)16位的商,不保留余數(shù)。
哦,看來區(qū)別是在結(jié)果上面,一起來做個(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ù)沒有保留。
由此,這兩個(gè)功能塊的區(qū)別就顯而易見了,然后本以為問題到此結(jié)束,剛要與客戶說再見,但客戶接著又拋出了一個(gè)問題“s7-300中哪個(gè)指令塊可以實(shí)現(xiàn)s7-200中div指令塊的功能???”,這個(gè),這個(gè)。。。。我得查查。然后,搜遍step7中整數(shù)運(yù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ù)。
看來客戶想要實(shí)現(xiàn)一個(gè)指令塊既得商,又得余數(shù)的功能不得不分步實(shí)施啦。雖然說在step7的編程中不存在div同樣功能的指令塊,但它的實(shí)現(xiàn)更為靈活——將余數(shù)與商分開,根據(jù)客戶的需要單獨(dú)取之。另外,在s7-200中實(shí)現(xiàn)整數(shù)取余有一定的局限性,就是div指令塊只能實(shí)現(xiàn)16位的整數(shù)相除取余,而step 7中的mod_di則可以使用32位的雙整數(shù)直接取余。
通過實(shí)驗(yàn)是不是更清楚明了呢?相信您已經(jīng)牢牢記住了,那么我要給客戶回電話去啦。。。