張 磊 磊
(雅礱江流域水電開發有限公司,四川 成都 610051)
常規水電站機組技術供水系統用戶主要包括水導軸承、推力、下導軸承、上導軸承、發電機空冷器及主軸工作密封等。技術供水程序設計時一般以水泵出口壓力和排水總管流量作為控制量。當壓力或流量降低至設定值時進行泵組切換。若切換后壓力流量仍不滿足要求,則兩臺或多臺泵組同時運行,以滿足設備運行需要。常規水電站油氣水系統等輔助具有一定的通用性,其控制邏輯和程序也同樣如此,相互之間可以借鑒。本文以某電站技術供水系統控制程序為例,提出了控制程序模塊化設計的意義。
某電站技術供水系統包括頂蓋取水方式和水泵尾水取水方式。頂蓋取水方式與水泵取水方式通過三通閥相連。三通閥排水位置以頂蓋取水方式退出,供水位置頂蓋以取水方式投入。同時,頂蓋取水管上還設計了輔助泄壓管,當管路壓力過高時進行泄壓。此外,供水管路上還設計了四通閥實現管路正反向供水切換。
控制部分系統主要采集了出水總管的壓力、流量及頂蓋泄壓管泄壓閥前壓力。水泵供水時,當管路壓力和流量低于設定值時,輪換另外一臺泵,同時兩臺水泵會定期輪換。頂蓋取水時,當泄壓閥前管路壓力高于設定值時,泄壓旁路電動閥打開。當供水總管壓力和流量不滿足要求時,運行方式切換為水泵供水,期間涉及到三通閥的關閉控制。
為了將程序模塊化、流程化,便于其他系統移植,技術供水系統控制程序將變量也進行了模塊化設計。程序中定義了4個結構數據類型,分別是模擬量定值結構(AI_LIMITS)、水泵參數結構(PUMP_STR)、觸摸屏設定結構(SETTING_STR)和時間統計結構(TIME_COUNT_STR)。以水泵結構參數為例,其導出的數據類型見表1。

表1 水泵結構參數
變量定義時,利用以上導出結構類型定義了一個包括5臺水泵結構參數的數組,數組元素的類型即是上述導出的結構類型。無論被控制設備是2臺還是2臺以上,相關內容可以直接移植,按需使用(見表2)。

表2 5臺水泵結構參數的數組
程序設計部分包括主程序MAIN、IO-SCAN函數以及各類子程序程序,結構見圖1,程序的控制主要流程見圖2。

圖1 主程序MAIN、IO-SCAN函數以及各類子程序
主程序MAIN函數根據不同的控制需要,按照不同的循環周期對子函數進行調用。如模擬量采樣AI_PROC函數,每1 s調用一次,輸出函數OUTPUT每100 ms調用一次,狀態監視函數則是一直調用。這樣處理既能滿足系統控制要求,又能很好節省CPU內存和處理時間。
子程序中主要包含了初始化程序INIT、狀態判斷STATUS、啟泵PUMP_START、停泵PUMP_STOP、四通閥控制STF_CONTROL等程序。
初始化程序INIT很重要,特別是對于系統設定值來源于觸摸屏的控制系統,如果不在INIT程序中將原始值寫入CPU內部寄存器,那么在系統掉電重啟的情況下,相關參數可能丟失。技術供水系統INIT函數中主要對主泵的號數、水泵臺數、運行狀態所在的點號、水泵的啟動步驟號、流量低定值和壓力低定值進行了初始化,防止系統啟動后的混亂。
狀態判斷STATUS程序主要是判斷水泵是否存在故障、水泵是否需要輪換、技術供水方式的選擇、水泵運行時間統計,并根據狀態判斷開出水泵啟動或輪換信號,最終輸出啟泵PUMP_START中變量PUMP_START_STEP[START_MAIN_PUMP_NO]的值。
啟泵PUMP_START程序則利用CASE OF函數,對設備進行順控,CASE函數主要包括5個標簽:
1:PUMP[START_MAIN_PUMP_NO].STARTING:=1;(*置主泵正在啟動標志*)
IF DI[45]THEN(*機組頂蓋取水三通閥處排水位置*)
PUMP_START_STEP[START_MAIN_PUMP_NO]:=3;
(*機組頂蓋取水三通閥處排水位置,直接起泵*)
ELSE
OUT[5]:=5000;(*機組頂蓋取水三通閥正轉*)
PUMP_START_STEP[START_MAIN_PUMP_NO]:=2;
END_IF;
2:PUMP_KON(IN1:= DI[45],PT1:=T#180S);
IF PUMP_KON.Q1 THEN
PUMP_START_STEP[START_MAIN_PUMP_NO]:=3;
END_IF;
IF PUMP_KON.Q2 THEN
PUMP[START_MAIN_PUMP_NO].STARTING:=0;(*清主泵正在啟動標志*)
PUMP_START_STEP[START_MAIN_PUMP_NO]:=1;
OUT[(START_MAIN_PUMP_NO-1)*2+1]:=0;(*開啟泵脈沖清0*)
END_IF;
3:OUT[(START_MAIN_PUMP_NO-1)*2+1]:=5000;(*起泵*)
PUMP_START_STEP[START_MAIN_PUMP_NO]:=4;
4:PUMP_KON(IN1:=0,PT1:=T#20S);
IF PUMP_KON.Q2 THEN
PUMP_START_STEP[START_MAIN_PUMP_NO]:=5;
END_IF;
5:(*檢測兩組泵運行信號*)
PUMP_KON(IN1:=(DI[(START_MAIN_PUMP_NO-1)*6+4]),PT1:=T#50S);
IF PUMP_KON.Q1 THEN(*啟動成功*)
PUMP[START_MAIN_PUMP_NO].STARTING:=0;
PUMP_START_STEP[START_MAIN_PUMP_NO]:=1;
END_IF;
IF PUMP_KON.Q2 THEN(*啟動失敗*)
IF NOT DI[(START_MAIN_PUMP_NO-1)*6+4]THEN(*泵啟動異常*)
PUMP[START_MAIN_PUMP_NO].FAULT_CODE:=4;(*故障碼*)
END_IF;
PUMP[START_MAIN_PUMP_NO].STARTING:=0;(*清主泵正在啟動標志*)
PUMP_START_STEP[START_MAIN_PUMP_NO]:=1;
OUT[(START_MAIN_PUMP_NO-1)*2+1]:=0;(*開啟泵脈沖清0*)
END_IF;
啟泵程序中,首先判斷三通閥是否處于排水位置,如果處于排水位置則直接啟泵,即將泵啟動步驟號賦值為3,執行CASE中的第三個標簽。若三通閥處于供水位置,則即將泵啟動步驟號賦值為2,執行CASE中的第2個標簽,開啟三通閥。標簽4則是延時20 s后轉到標簽5,判斷泵是否啟動成功,并根據結果做相應處理。
在上述程序設計中,相關變量并未明確,如PUMP[START_MAIN_PUMP_NO].STARTING中的START_MAIN_PUMP_NO值是通過其他子程序進行判斷的,無論系統有幾臺控制或輪換設備,啟泵程序只需要這一段,不需要針對不同的主泵號重復編寫程序,效率得到了明顯提高。
技術供水系統控制程序涉及到多個設備,并且各設備運行狀態和啟動流程具有一定的先后關系,可以采用CASE函數對程序步驟化,且邏輯比較清晰。但對于不涉及多個設備的控制系統若采用這種結構,反而顯得累贅。
水電站涉及的油水氣系統眾多,如果能做到程序化設計或直接將類似產品通用控制部分做成功能塊,則對系統移植是有幫助的,能夠提高現場工作效率。
隨著模塊化設計運用時間積累,當系統存在的問題逐漸暴露后,模塊化設計的錯誤率會越來越低,通用性則越來越強,可以極大縮短新建廠站設備的設計和調試時間,并產生顯著經濟效益。
文章通過某電站技術供水系統控制程序的設計,運用結構化變量實現了多泵組參數的快速定義。主程序對多臺泵組的啟動優先順序進行排序,利用順控程序實現各臺泵組的啟停。程序的控制邏輯是針對某一特征條件,而非具體的某一泵組,因此,無需針對各泵組重復設計控制程序。本設計實現了程序的模塊化,使程序更加緊湊,邏輯更加清晰;通過對某電站技術供水系統控制程序的設計分析,提出了其程序設計存在的一些優勢,說明了程序化、模塊化、流程化程序設計存在的意義。
(1)因程序的模塊化設計,在設備調試過程中可以快速發現程序中存在的問題和不合理之處,只需一次修改就可實現同類問題的一次性處理,相比于針對各泵組重復設計的控制程序,具有便捷性。
(2)通過本文的解析,輔助設備控制程序的模塊流程化設計,對水電站及其他工業系統中常用的輔助設備均是通用的。如水電站的中低壓氣系統、廠房的排水系統、機組油壓裝置的液壓油泵控制系統、水廠的水泵取水系統等,各系統涉及的控制變量和設備的啟停及輪換具有相似性,模塊化設計程序在相關系統中均可根據需要進行移植。
(3)設備的控制程序應在使用中不斷完善,以最精簡的語句實現程序所需的功能。類似設備的控制程序模塊化設計經過使用驗證,應實現程序的固化,不斷積累某一類工程的源程序。新用戶只需在源程序中進行選擇和適當修改便可使用,并將通用程序功能塊化,降低人力物力,提高生產效率。