高小劍
中交機(jī)電工程局有限公司
港口控制系統(tǒng)設(shè)備類型多、數(shù)量大,控制流程復(fù)雜,一個港口可能包含幾十個甚至上百個控制模式,一個設(shè)備可能參與在幾個甚至幾十個控制模式中。不同的模式下,同一設(shè)備控制邏輯極易交叉。采用完全枚舉法,極少的設(shè)備數(shù)量或控制模式改變,都會引起程序巨大的改變[1]。將關(guān)系型數(shù)據(jù)結(jié)構(gòu)引入控制,用關(guān)系型數(shù)據(jù)模式字確認(rèn)代替模式的解析過程,使模式解析和設(shè)備執(zhí)行分層進(jìn)行,減少模式之間的邏輯交叉,增強(qiáng)程序的可擴(kuò)展性和編程靈活性,在復(fù)雜控制系統(tǒng)中具有重要意義。
以港口皮帶機(jī)系統(tǒng)控制為例,為確保其有效性和穩(wěn)定性,同時兼顧項(xiàng)目成本投入,控制系統(tǒng)采用經(jīng)典的分層結(jié)構(gòu),分為中心級控制和現(xiàn)場級控制(見圖1)。
圖1 港口控制系統(tǒng)分層結(jié)構(gòu)圖
中心級控制位于整個港口控制系統(tǒng)的核心,負(fù)責(zé)整個港口傳輸控制系統(tǒng)的協(xié)調(diào),將控制模式的選擇、執(zhí)行前的判斷、流程的控制命令根據(jù)現(xiàn)場實(shí)際連接有序地下發(fā)到各個分站控制器;同時接收各個分站的狀態(tài)信息,并通過與上位軟件的通信,將現(xiàn)場控制系統(tǒng)設(shè)備的實(shí)時狀態(tài)在上位界面上進(jìn)行呈現(xiàn)[2]。
現(xiàn)場級控制中各分站負(fù)責(zé)收集本站周圍的皮帶機(jī)系統(tǒng)的運(yùn)行狀態(tài)信息,接收中控的控制命令,并經(jīng)過邏輯運(yùn)算,將最終的控制命令下發(fā)到控制區(qū)域內(nèi)的設(shè)備控制器中。在和中心級控制發(fā)生通信故障時,能夠按照預(yù)先設(shè)置好的程序,對區(qū)域內(nèi)的設(shè)備進(jìn)行有序的控制。
系統(tǒng)的主控制字用于對控制模式的快速選擇、下發(fā)前的快速的判斷,借助數(shù)據(jù)結(jié)構(gòu),將現(xiàn)場控制單元的控制命令、位置信息、和運(yùn)行狀態(tài)反饋信息、故障信息以一定的數(shù)據(jù)結(jié)構(gòu)進(jìn)行編碼。
為了方便介紹,假設(shè)該系統(tǒng)包含8條皮帶機(jī),3個三通,15個控制單體,將所有的設(shè)備按照順序,用1個位(bit)表示1個控制單體,用1個字(Word)型變量表示編碼系統(tǒng)所含設(shè)備的控制信息(見圖2)。
圖2 主控制字編碼示意圖
(1)主控制字(Main Control)編碼。主要負(fù)責(zé)將港口皮帶機(jī)控制系統(tǒng)所有皮帶機(jī)、三通閘門等與流程連鎖控制有關(guān)的控制單體進(jìn)行編碼。1個控制單體用1個位(bit)編碼,如皮帶機(jī)參與該條流程控制,則對應(yīng)位置1。例如Main Control[0]=1,表明該BC01皮帶機(jī)參與該條流程的控制,否則,Main Control[0]=0,表明該BC01皮帶機(jī)在該條流程中不需要參與控制。
(2)位置字(Remote/Locel)編碼。對所有參與系統(tǒng)流程的單體設(shè)備的遠(yuǎn)程或就地位置進(jìn)行編碼,每個控制單元用1位(bit)表示。位置字為“1”,表示當(dāng)前該控制單元處于遠(yuǎn)程狀態(tài),可以通過上位機(jī)控制;否則,表示該控制單元處于就地狀態(tài),不能參與流程控制。只有當(dāng)所有參與流程控制的單體都處在遠(yuǎn)程位置時,該流程才具備執(zhí)行的先決條件。
(3)故障字(Fault)編碼。系統(tǒng)自動控制過程中,為了避免設(shè)備帶故障運(yùn)行,需要將所有控制單體的綜合故障進(jìn)行編碼,如果系統(tǒng)中有控制單體處于故障狀態(tài),則不允許該流程被選中執(zhí)行。這里的故障指綜合故障,是所有能夠引起控制單體停機(jī)的故障的綜合體,例如皮帶機(jī)的拉繩禁停、重跑偏、撕裂開關(guān)、堵塞故障、開關(guān)柜故障、電機(jī)繞組及驅(qū)動軸溫度過高等可能引重大事故或者設(shè)備重大損害的故障。如果控制單體處于故障狀態(tài),將在故障字中對應(yīng)的位(bit)置0,否則置1。
在執(zhí)行過程中,將設(shè)備的Remote/Local、Fault狀態(tài)時刻進(jìn)行掃描,將設(shè)備反饋狀態(tài)實(shí)時的寫入Remote/Local、Fault狀態(tài)字,以上狀態(tài)字的編碼,可為流程下發(fā)執(zhí)行前的判斷做好準(zhǔn)備。
流程輔助控制字(Auxiliary)格式見圖3。根據(jù)主控制的排列順序,對每個控制可能具有的控制命令進(jìn)行編碼,如BC01皮帶機(jī)有正轉(zhuǎn)控制、反轉(zhuǎn)控制、停止控制,則由輔助控制字Auxiliary[1]的第0、1、2共3個(bit)表示,“001、010、100”分別表示BC01正轉(zhuǎn)控制、反轉(zhuǎn)控制、停止控制3個控制命令。同理,電動三通ST01有2個導(dǎo)通方向,由輔助控制字Auxiliary[2]的第2、3共2個位(bit)表示,“01、10、00”分別表示ST01 A向?qū)?、反轉(zhuǎn)控制、無需控制。這樣把所有控制單體按照主控制字的順序依次在Auxiliary[1]、Auxiliary[2]中排列編碼。某一條控制流程所包含控制單體的控制命令都存儲在Auxiliary[1]、Auxiliary[2]2個輔助字中。如果設(shè)備較多,可以多設(shè)置幾個字節(jié),增加設(shè)備時,僅需將設(shè)備的控制特性排列在Spare區(qū)域即可,不需改變數(shù)據(jù)結(jié)構(gòu)和后續(xù)已有控制單體的執(zhí)行程序。
圖3 流程輔助控制字結(jié)構(gòu)圖
設(shè)備的執(zhí)行狀態(tài)字Running與Auxiliary相對應(yīng),每一位為對應(yīng)設(shè)備的運(yùn)行狀態(tài),如BC01正轉(zhuǎn)運(yùn)行時,將Running[1].0置1,這樣流程的執(zhí)行結(jié)果,均可以通過輔助控制字和執(zhí)行狀態(tài)字相同的邏輯表達(dá)實(shí)現(xiàn),極大地降低了控制算法工作量,增加了程序的通用性和擴(kuò)展性。
流程控制表包含3個部分,流程索檢表、主控制字表、輔助控制字表。1組主控制字和輔助控制字組成1個流程的控制字組,稱為1條記錄,系統(tǒng)有多少控制流程就有多少條記錄。
根據(jù)工藝提供的要求,首先對所有流程進(jìn)行編號,并將編號按照順序錄入控制程序的存儲區(qū)中,形成模式檢索表(見圖4)。為了增加控制系統(tǒng)的擴(kuò)展性,在編制索檢表時要做好足夠的備用空間,在備用的區(qū)域Mode Num設(shè)為0,工藝增加控制流程時,只需將實(shí)際流程編號寫入對應(yīng)的索檢表中Mode Num值中即可。
圖4 模式檢索表
主控制字、輔助控制字與索檢表相對應(yīng),在程序控制區(qū)中,分別為一個N×n1、N×n2矩陣,其中N為索檢表中記錄的個數(shù),n1為每個主控制字中所占的字節(jié)數(shù),n2為每個輔助控制字中所占的字節(jié)數(shù)。程序可以根據(jù)流程的索檢編號Index,根據(jù)線性對應(yīng)關(guān)系快速定位到流程主控制字和輔助控制字的開始地址,將主控制字和輔助控制字搜索出來。
需增加模式時,只用在流程索檢表加入流程編號,主控制字表、輔助控制字表中將對應(yīng)流程控制單體的編碼值填入即可,而不用修改具體設(shè)備的執(zhí)行程序,使得流程的增減及擴(kuò)展更加靈活,增加了程序的擴(kuò)展性和移植性。
系統(tǒng)的流程執(zhí)行控制流程見圖5。
圖5 系統(tǒng)流程執(zhí)行控制流程圖
3.4.1 流程下發(fā)前的判斷
以下判斷過程,對主控制字、遠(yuǎn)程就地位置字、故障字的邏輯過程均以字為單位進(jìn)行,實(shí)際流程占用幾個字節(jié),就進(jìn)行幾次判斷。為了說明的簡潔性,所有的判斷過程均按占用1個字節(jié)為例說明。
當(dāng)系統(tǒng)下發(fā)模式時,首先判斷當(dāng)前系統(tǒng)所處的狀態(tài),如果上一個模式還在執(zhí)行過程中,模式執(zhí)行標(biāo)志位為1,則不能將新的模式下發(fā),能夠避免2個模式存在設(shè)備交叉,要求設(shè)備執(zhí)行相反操作,給設(shè)備帶來巨大沖擊,以保護(hù)設(shè)備安全,提高設(shè)備使用壽命。
模式執(zhí)行中標(biāo)志位為0且下發(fā)模式不等于已執(zhí)行成功的模式時,允許程序掃描檢索表,找到程序下發(fā)的模式,根據(jù)索引值Index在主控制表中檢索出下發(fā)模式的主控制字和輔助控制字,并在下發(fā)前完成以下判斷。
(1)判斷流程所包含的設(shè)備是否均處于遠(yuǎn)程狀態(tài),判斷方式見式(1):
A=Main Control & Remote⊕Main Control
(1)
首先,對Main Control和Remote狀態(tài)字進(jìn)行邏輯“與”操作,排除本流程外控制單體狀態(tài)對于本流程判斷的干擾,與本流程無關(guān)的控制單體將不會參與到后序邏輯運(yùn)算。然后,將邏輯運(yùn)算結(jié)果與Main Control控制字進(jìn)行邏輯“異或”運(yùn)算,如果A≠0,則說明本流程中至少有一個設(shè)備處于就地位置,不能遠(yuǎn)程完成控制單元的控制,該流程不能執(zhí)行成功,程序拒絕流程下發(fā)執(zhí)行,同時會在上位機(jī)上顯示該流程無法下發(fā),本流程中有控制單體未處于遠(yuǎn)程狀態(tài);如果計(jì)算結(jié)果A=0,則說明參與本流程執(zhí)行的所有設(shè)備均處在遠(yuǎn)程位置,可以遠(yuǎn)程啟動或者停止流程中所有控制單體。
(2)判斷模式中所選中的設(shè)備是否有的處于故障狀態(tài),將Main Control和Fault狀態(tài)字進(jìn)行邏輯“與”操作,見式(2),排除與本條流程外的控制單體,如果流程包含的控制單體均正常,則B=0,可以下發(fā)該流程。
B=Main Control & Fault⊕Main Control
(2)
3.4.2 模式設(shè)備的執(zhí)行
經(jīng)過判斷,流程所涉及的控制單體均能遠(yuǎn)程控制、狀態(tài)良好,且沒有被占用,符合流程下發(fā)的條件。程序根據(jù)索檢編號Index流程記錄的線性對應(yīng)關(guān)系??焖俣ㄎ坏搅鞒讨骺刂萍拜o助控制字的開始地址,把主控字和輔助控制字搜索出來下發(fā)到程序的執(zhí)行區(qū)中,同時將選中設(shè)備的執(zhí)行結(jié)果實(shí)時更新到運(yùn)行狀態(tài)字Running中,參與模式執(zhí)行結(jié)果的判斷。
根據(jù)流程輔助控制字中的控制目標(biāo)狀態(tài)和運(yùn)行狀態(tài)字的實(shí)際執(zhí)行結(jié)果,通過式(3)邏輯運(yùn)算,判斷模式執(zhí)行成功與否。
C=Auxiliary & Running⊕Auxiliary
(3)
在設(shè)定的流程執(zhí)行時間內(nèi),C=0,則該模式包含的全部設(shè)備均達(dá)到了流程期望達(dá)到的狀態(tài),模式執(zhí)行成功;否則,超出了模式執(zhí)行時間,或者有控制單體沒有達(dá)到預(yù)定的動作,程序判斷流程執(zhí)行失敗。
將關(guān)系型數(shù)據(jù)結(jié)構(gòu)引入港口復(fù)雜的流程控制中,用流程記錄代替?zhèn)鹘y(tǒng)完全枚舉法執(zhí)行過程的復(fù)雜邏輯關(guān)系,實(shí)現(xiàn)流程解析和設(shè)備運(yùn)行的分層和相對獨(dú)立控制,減少程序控制過程中的邏輯交叉,使程序控制變的簡單,實(shí)現(xiàn)過程更加靈活,易于擴(kuò)展和移植。此方案已在多個工程實(shí)踐中使用,操作簡單,運(yùn)行穩(wěn)定可靠,具有一定的推廣價值。