一、項目簡介
上虞杭協(xié)聯(lián)電廠(見圖1)位于浙江省上虞市精細(xì)化工園區(qū)內(nèi),是杭州協(xié)聯(lián)熱電廠于2003年在上虞市投資創(chuàng)建的。一期項目總的裝機(jī)容量為27MW,3臺130t/h循環(huán)硫化床鍋爐,一臺12MW的凝汽式汽輪機(jī),一臺15MW的背壓式汽輪機(jī),年發(fā)電能力2億千瓦時,供汽能力150萬噸。
圖1電場外景
本項目采用西門子PCS7控制系統(tǒng),
控制系統(tǒng)的設(shè)計上包括了三臺130t/h循環(huán)硫化床鍋爐,一臺12MW的凝汽式汽輪機(jī),一臺15MW的背壓式汽輪機(jī),及減溫減壓,化學(xué)水處理等輔機(jī)系統(tǒng)。其中主機(jī)部分采用了五套冗余的414-H控制器,三爐兩機(jī)各單獨使用一套控制器,輔機(jī)部分使用了一套非冗余的414控制器。
本項目遇到了控制器內(nèi)存不足的情況,實施了一些特殊的處理方法,現(xiàn)記錄如下。
二、CPU內(nèi)存的組成情況
CPU的內(nèi)存組成情況如圖2所示。
圖2CPU內(nèi)存組成情況
CPU的內(nèi)存由loadmemory和workmemory兩部分組成。Loadmemory是可以通過外擴(kuò)存倒卡的方式擴(kuò)展,而workmemory是集成在CPU內(nèi)部無法擴(kuò)展的,所以我們需要節(jié)省workmemor的使用。Workmemory包括codememory和datamemory。對于PCS7項目,codememory的d用量要遠(yuǎn)遠(yuǎn)高于datamemory的使用量i所以要節(jié)省CPU的內(nèi)存zui終就是要節(jié)省workmemory[}的codememory。
codememory的使用分配包括了四部分,如圖3所示。
圖3codememory的使用分配
用戶程序--block
I/O過程映像區(qū)--input/outputimage
診斷緩沖區(qū)--diagnosebuffer
通訊任務(wù)數(shù)量--communicatejob
所以我們就要通過節(jié)省以上四部分的使用來節(jié)省CPU的codememory。
本項目中的CPU內(nèi)存不足出現(xiàn)在3個鍋爐系統(tǒng)對應(yīng)的3套414-H控制器,每個鍋爐的信號數(shù)量為550點,其中Al信號為200點,控制回路為23個,414-H控制器的workmemory為768K,codememory為384K,zui初程序完成后,已超400K,無法下載程序,后進(jìn)行了以下處理。
三、節(jié)省內(nèi)存的方法
1.減少用戶程序
由以上workmemory的組成情況可以看出,用戶程序的使用情況決定了workmemory余量的大小,所以我們要盡量減少用戶程序,方法如下:
方法1,避免使用開關(guān)量信號的信號驅(qū)動塊,即CH-DI、CH-DO塊。這兩種塊只有在我們調(diào)試程序時有一些作用,當(dāng)我們內(nèi)存不足時,*可以不使用這兩種驅(qū)動塊,而直接使用地址來編程序。
方法2,用用戶自定義的FB塊來替換模擬量信號驅(qū)動塊CH-AI、CH-AO。首先對于PCS7項目,相同大小的FC塊的重復(fù)調(diào)用要比相同大小的FB塊的重復(fù)調(diào)用所占用的CPU的codememory大得多,而CH-AI、CH-AO塊是FC塊,且尺寸較大,所以我們要用用戶自定義的FB塊來代替CH-AI、CH-AO塊;其次,CH-AI、CH-AO塊不僅在循環(huán)掃描周期中(如OB35)被調(diào)用,而且還在OB100中被調(diào)用,這就使這兩種塊占用CPU的內(nèi)存加倍,所以如果不需要在OB100中做特殊程序處理時,我們自己創(chuàng)建FB塊只在循環(huán)掃描周期中(如OB35)被調(diào)用,來減少用戶程序。
方法3,刪除系統(tǒng)生成的I/O模板的驅(qū)動塊。在采用以上兩種方法,但CPU內(nèi)存還不能滿足要求時,可以采取這種方法。當(dāng)我們編譯產(chǎn)生模板驅(qū)動后,系統(tǒng)會自動生成許多驅(qū)動塊,其中包括I/O模板的驅(qū)動塊、CPU的驅(qū)動塊、冗余的驅(qū)動塊、IM153的驅(qū)動塊等,而其中I/O模板的驅(qū)動塊占用了較多的程序。當(dāng)我們不使用信號驅(qū)動塊時,則可以刪除I/O模板的驅(qū)動塊,但是我們將無法得到模板的運行報警信息。
2.減少診斷緩沖區(qū)
CPU的診斷緩沖區(qū)存儲了系統(tǒng)的硬件診斷信息,利用診斷信息,工程師可以清楚地了解到CPU歷史及現(xiàn)在的運行狀況和故障信息。如我們不需要保存太久的CPU診斷信息,我們可以減少診斷緩沖區(qū)的容量來節(jié)省內(nèi)存。PCS7V6版本中CPU414-H的默認(rèn)緩沖區(qū)大小為3000條診斷信息,我們可以zui低減少到100條診斷信息。
3.減少I/O過程映像區(qū)
通過減少過程映像區(qū)的大小,同樣可以節(jié)省CPU的codememory。對于PCS7系統(tǒng)組態(tài)硬件時,模擬信號默認(rèn)的起始地址為IW512和QW512,這時我們就要調(diào)整相應(yīng)的起始地址,將其盡量減小。例如,開關(guān)量信號組態(tài)的zui高地址如果是140.7和Q20.7,我們可以將模擬信號的起始地址設(shè)為IW50和QW30,以此可減少過程映像區(qū)的大小。
4.減少CPU的通訊任務(wù)數(shù)量
CPU的通訊任務(wù)占用了CPU大量的內(nèi)存,對CPU的codememory的影響很大,所以我們要盡量減少CPU的通訊任務(wù)數(shù)量,來節(jié)省大量的內(nèi)存空間。
具有報警信息功能的FB塊的數(shù)量決定了通訊任務(wù)數(shù)量,這些FB塊包括CTRL-PID.MOTOR、MEAS-MON.VAL-MOT.MOD1等,所以我們在CFC編程時要盡量減少這些塊的數(shù)量。
方法1,不使用MEAS-MON塊。我們常用MEAS-MON塊來實現(xiàn)對采集的過程模擬信號進(jìn)行顯示及報警,但是由于它占用了CPU的通訊任務(wù),我們將不能使用它。對于模擬信號的顯示,我們可創(chuàng)建一個FB塊來實現(xiàn),對于模擬信號的高低限報警,我們可以使用ALARM-8P來實現(xiàn),這樣可以大大減少通訊任務(wù)數(shù)量。
方法2,刪除系統(tǒng)生成的I/O模板的驅(qū)動塊。I/O模板的驅(qū)動塊同樣占用了CPU的通訊任務(wù),所以刪除系統(tǒng)生成的I/O模板的驅(qū)動塊,同樣可以大大減少通訊任務(wù)數(shù)量,刪除方法上己闡述。
四、內(nèi)存不足時程序的優(yōu)化
CPU的內(nèi)存不足,將給我們帶來的主要問題是程序無法部分下裝,所以我們將針對這個問題進(jìn)行程序的優(yōu)化。
方法1,建立多個運行組,盡量減少每個運行組內(nèi)所調(diào)用的程序塊的數(shù)量。每個運行組內(nèi)所調(diào)用的程序塊的數(shù)量越多,則編譯后系統(tǒng)生成的FC塊的尺寸就越大,如果FC塊的尺寸太大,則程序?qū)o法部分下裝。
方法2,CFC盡量按功能分,減少CFC程序之間的連接。一般情況下,我們編程時每個CFC都對應(yīng)一個運行組,減少CFC程序之間的連接,則在修改程序后進(jìn)行部分編譯時,所更改的程序就會相對減少,部分下裝的可行性就要大一些。
五、小結(jié)
通過以上方法基本解決了本項目中CPU內(nèi)存不足的問題,為杭州協(xié)聯(lián)熱電廠節(jié)省了大量的資金投入?,F(xiàn)三爐兩機(jī)已全部投產(chǎn),一切運行正常。