基于plc的流量計(jì)量的應(yīng)用
對(duì)于高速計(jì)數(shù)器是否達(dá)到最大計(jì)數(shù)值時(shí)需要判斷,s7-200cpu的高速計(jì)數(shù)器是可以周而復(fù)始地進(jìn)行累計(jì)的,最高位為符號(hào)位,最小值為7fffffff。由于計(jì)數(shù)器是一直累加的,不可能出現(xiàn)本次讀取的計(jì)數(shù)值小于上次計(jì)數(shù)值的情況,因此判斷計(jì)數(shù)器當(dāng)前值是否小于前一次的計(jì)數(shù)值,就可以判斷計(jì)數(shù)是否達(dá)到最大值的拐點(diǎn)(7fffffff),如果達(dá)到,則執(zhí)行特殊的計(jì)算以便消除計(jì)算錯(cuò)誤,程序如圖2所示(此程序應(yīng)放在定時(shí)中斷子程序中執(zhí)行)。本文引用地址:http://m.butianyuan.cn/article/160945.htm
當(dāng)當(dāng)前計(jì)數(shù)值大于等于上次計(jì)數(shù)值時(shí),兩個(gè)計(jì)數(shù)值做差,就得到程序兩次掃描時(shí)間間隔內(nèi)的計(jì)數(shù)差值,同時(shí)將當(dāng)前計(jì)數(shù)值賦值到上次計(jì)數(shù)值上;當(dāng)當(dāng)前計(jì)數(shù)值小于上次計(jì)數(shù)值時(shí),計(jì)算上次計(jì)數(shù)值與7fffffff之間的差值(用減法),以及當(dāng)前計(jì)數(shù)值和7fffffff之間的差值(用加法),然后將兩個(gè)結(jié)果相加就是程序兩次掃描時(shí)間間隔內(nèi)的計(jì)數(shù)差值,從而實(shí)現(xiàn)對(duì)累計(jì)計(jì)數(shù)值達(dá)到拐點(diǎn)時(shí)的正確計(jì)算。
圖2 消除計(jì)算錯(cuò)誤程序
實(shí)際上,在現(xiàn)場(chǎng)應(yīng)用中定時(shí)中斷子程序是采用250ms中斷一次執(zhí)行的,使用smb34進(jìn)行控制的。需要注意的是,系統(tǒng)中必須只保證這個(gè)中斷是唯一存在的,不會(huì)受到其他中斷的影響,否則可能會(huì)因其它中斷的影響使周期性中斷不準(zhǔn)時(shí),從而影響精度。
通過(guò)以上計(jì)算就得到了250ms內(nèi)流量計(jì)發(fā)過(guò)來(lái)的脈沖個(gè)數(shù),這個(gè)數(shù)值乘以脈沖當(dāng)量就是250ms內(nèi)的流量值,再除以時(shí)間就是瞬時(shí)流量。另外,在250ms內(nèi)再執(zhí)行累加程序就可以計(jì)算累積流量了。在計(jì)算累積流量過(guò)程中需要避免累積過(guò)程的計(jì)算誤差,我們知道,流量累積量是一直累積的一個(gè)數(shù)值,一般會(huì)累積到8位數(shù),而plc內(nèi)部浮點(diǎn)數(shù)的有效位數(shù)是6位,當(dāng)累積量數(shù)值很大的時(shí)候就會(huì)造成一個(gè)大數(shù)和一個(gè)小數(shù)相加,勢(shì)必導(dǎo)致小數(shù)的有效位數(shù)丟失,造成很大的累積誤差,因此,要避免大數(shù)和小數(shù)相加的情況出現(xiàn)。解決方法是采用多個(gè)流量累積器,只允許同數(shù)量級(jí)的數(shù)值相加,從而避免數(shù)值有效位數(shù)損失,實(shí)際編程中采用了5個(gè)累積器,根據(jù)常用流量情況下,在周期中斷時(shí)間間隔(250ms)內(nèi)流過(guò)的流量乘以15作為第一個(gè)累積器的上限,當(dāng)達(dá)到這個(gè)累積器的上限值后,將這個(gè)累積器的值累加到第2個(gè)累積器中,并把第一個(gè)累積器清零,對(duì)于第三個(gè)累積器也同樣處理,第4個(gè)累積器用于保存累積量小數(shù)部分?jǐn)?shù)值,第5個(gè)累積器用于保存累積量整數(shù)部分?jǐn)?shù)值,這樣在顯示總累積量時(shí)只需顯示整數(shù)部分和小數(shù)部分就可以了,整個(gè)過(guò)程充分避免了累積過(guò)程中大數(shù)與小數(shù)相加的情況出現(xiàn)。在實(shí)際工程中,需根據(jù)流量的大小、周期中斷的時(shí)間間隔來(lái)確定所用累積器的個(gè)數(shù),而累積器的整數(shù)部分用雙整數(shù)來(lái)表示,雙整數(shù)的范圍是-2,147,483,648到+2,147,483,647,可以使累積器的整數(shù)位數(shù)達(dá)到9位。這樣,在顯示累積量時(shí)就可以最多顯示9位整數(shù)的累積量和6位小數(shù)的累積量,總計(jì)15位,從而省略累積器倍乘系數(shù),使讀數(shù)更簡(jiǎn)便。
對(duì)累積器需要在一定條件下復(fù)位,累積到最大數(shù)值或手動(dòng)復(fù)位,在中斷程序中判斷累積量是否達(dá)到或超過(guò)最大位數(shù),當(dāng)超過(guò)最大數(shù)值時(shí),將各個(gè)累積器清零,清零的觸發(fā)信號(hào)也可以是手動(dòng)觸發(fā)。
3 結(jié)束語(yǔ)
本文列出了在plc中計(jì)算和顯示瞬時(shí)流量和計(jì)算累積量時(shí)可能遇到的問(wèn)題,并以西門(mén)子s7-200 cpu 224系列探討了解決辦法,值得進(jìn)行該工作的工程人員借鑒。
評(píng)論