王小勇,薛峰
(1.上海辛格林納新時達電機有限公司,上海 200072;2.揚州市經(jīng)濟和信息化委員會,江蘇 揚州 225209)
橋式起重機作為一種物料搬運設(shè)備,對于企業(yè)生產(chǎn)活動中的重型物料搬運,和生產(chǎn)活動的有序進行具有重要意義。傳統(tǒng)的橋式起重控制系統(tǒng)主要采用繼電器接觸器進行控制,采用交流繞線串電阻的方法進行啟動和調(diào)速[1],這種控制系統(tǒng)存在可靠性差,操作復(fù)雜,故障率高的缺點,并且造成電能浪費。近年來,由于變頻器在起重領(lǐng)域的廣泛應(yīng)用,改善了傳統(tǒng)控制系統(tǒng)的一些缺點,大部分變頻器必須配合PLC控制器使用,但PLC的IO刷新一般在整個程序的單次循環(huán)結(jié)束以后,可能會造成實時性偏弱并且可能由此造成潛在的邏輯風險;另外,PLC程序編制過程中對于時序邏輯的保證完全依賴于程序員個人的邏輯嚴謹程度,沒有安全的機制保證。普通的單片機程序也存在類似的問題,由于大量地使用了散落在程序各個部分的相互關(guān)聯(lián)的條件分支,系統(tǒng)反應(yīng)部分的代碼顯得凌亂不堪,這些都使得程序?qū)τ诒WC嚴格的時序邏輯存在潛在的風險[2]。
橋式起重機橋架兩端通過運行裝置直接支撐在高架軌道上,通常用于生產(chǎn)車間內(nèi)的物料搬運。橋式起重機的基本機構(gòu)類別有以下兩種:
(1)起升機構(gòu)是實現(xiàn)重物上升或下降的機構(gòu),根據(jù)起吊重物噸位的不同分為主起升機構(gòu)和副起升機構(gòu)。
(2)運行機構(gòu)是橋式起重機平行移動的機構(gòu),它分為大車走行機構(gòu)和小車走行機構(gòu)。
起升機構(gòu)是位能性負載。其特點是:重物上升時,電動機克服各種阻力作功,屬于阻力負載;重物下降時,重物本身的重力是下降的動力,電動機成為了能量的接受者,故屬于動力負載。起重機的運行機構(gòu)都是阻力負載[3]。
通過對各機構(gòu)運行過程的分析可以抽象出一些共性邏輯即每一個獨立機構(gòu)都存在電機正反轉(zhuǎn)、多段速切換、速度限位保護和極限限位保護等相似邏輯。對于應(yīng)用變頻調(diào)試的起重設(shè)備而言,控制的關(guān)鍵在于變頻器起制動過程與機械制動器動作的配合,這個邏輯的合理與否直接關(guān)乎變頻器運行壽命以及橋式起重機的安全性。起升機構(gòu)運行開始前抱閘處于閉合狀態(tài),要起動運行就要開抱閘,如果開閘過早變頻器未建立足夠的轉(zhuǎn)矩就會發(fā)生溜鉤;反之如果開閘過晚則可能出現(xiàn)磨閘一方面影響制動器壽命和變頻器逆變器壽命,另一方面容易引起變頻器過流保護系統(tǒng)停止運行[4]。制動器是機械抱閘裝置,該裝置釋放需要時間,在制動器釋放過程中變頻器不宜加速,否則也會出現(xiàn)磨閘,并且電機堵轉(zhuǎn)時變頻器輸出頻率偏高,造成釋放瞬間電機速度過高引起振動。起升機構(gòu)停止命令發(fā)出后,制動器要閉合,同樣制動器閉合也需要時間,在此過程中變頻器必須保持轉(zhuǎn)矩,否則也會溜鉤。
橋式起重機整體結(jié)構(gòu)由中控室、主起升機構(gòu)、副起升機構(gòu)、大車行走機構(gòu)和小車行走機構(gòu)五大部分組成,由駕駛室人員在駕駛室內(nèi)通過操作桿給出各機構(gòu)運行的方向和段速,這些信號通過通信總線給到每一機構(gòu),而和每一機構(gòu)相關(guān)的故障及報警等保護邏輯點就近接入該機構(gòu)控制器,這樣整個系統(tǒng)的走線可以最簡,調(diào)試和檢修更加方便。整機電氣控制系統(tǒng)如圖1所示。
圖1 橋式起重機電氣控制系統(tǒng)
由圖1可看出每一機構(gòu)的IO控制CPU要給出控制邏輯的運行結(jié)果需要從三個方面得到輸入信息,即從主控室信號采集板處通過CAN通信取到運行方向標志和段速標志,從和本機構(gòu)相關(guān)的保護和控制觸點處得到限位、報警、故障以及抱閘信號,從變頻器CPU通過串口通信取得變頻器故障、允許給速度信號和張閉閘信號,綜合以上信號由IO控制CPU計算相應(yīng)的速度曲線,給到變頻器連續(xù)的運行速度,同時給出相應(yīng)控制輸出。
高性能的橋式起重機各機構(gòu)在啟動和停止瞬間對于邏輯要求非常高,因為這對起重機運行安全性和壽命均有相當重要的意義,因此必須尋求一種機制以保證運行狀態(tài)的安全和精確切換。美國Miro Samek博士提出的量子平臺QP(Quantum Platform)是一種關(guān)于反應(yīng)式的系統(tǒng),這種系統(tǒng)類比了量子力學中的基本概念,建立了QF(Quantum Frame)框架以及狀態(tài)、事件、信號以及狀態(tài)間的躍遷條件等,這種系統(tǒng)使用事件驅(qū)動的方法達到與環(huán)境不斷交互的目的,非常適合用于嵌入式軟件領(lǐng)域[5],特別是應(yīng)用于工業(yè)控制系統(tǒng)的程序設(shè)計。本文采用量子平臺狀態(tài)機機制建立橋式起重機控制系統(tǒng)程序框架,確??刂七壿嬛懈黜椚蝿?wù)的調(diào)度,從而滿足橋式起重機對高安全性和高性能方面的要求。
量子平臺由Miro Samek博士提出,借鑒了量子力學中量子在各種能量態(tài)之間躍遷的描述手段來描述嵌入式軟件中的編程模型。量子平臺本身實際上較為系統(tǒng)地提出了嵌入式系統(tǒng)中狀態(tài)機的編程模型。量子框架QF提供了更快速、更安全和更可靠的開發(fā)并發(fā)任務(wù)的方法,基于QF的應(yīng)用不需要直接操作臨界區(qū)、信號量和其他類似的機制,在編程時不用擔心競爭條件、死鎖以及優(yōu)先級反轉(zhuǎn)等帶來的風險,但是卻可以獲得多線程的所有好處。
狀態(tài)機工程中必須包含狀態(tài)機內(nèi)核,這個內(nèi)核可以以庫的形式包含在工程中,由該內(nèi)核完成狀態(tài)的躍遷、信號的發(fā)送及調(diào)度機制。每個工程中可以包含若干個狀態(tài)機,每個狀態(tài)機中包含了若干個狀態(tài),這些狀態(tài)可以存在層次包含,在每個狀態(tài)機中任何時候都只有個狀態(tài)是活動的,每個狀態(tài)機都有個屬于其自身的消息隊列,這個消息隊列由事件觸發(fā)并由QF框架完成消息分發(fā),并由該狀態(tài)機中的唯一活動的狀態(tài)進行響應(yīng)。每個狀態(tài)機在初始化的時候可以指定狀態(tài)機的優(yōu)先級,量子內(nèi)核根據(jù)設(shè)定的優(yōu)先級進行狀態(tài)機響應(yīng)函數(shù)的調(diào)度。在每狀態(tài)機中均唯一維護了屬于自身的結(jié)構(gòu)體變量,由量子內(nèi)核利用該結(jié)構(gòu)體完成響應(yīng)處理過程的參數(shù)傳遞。
本文中的量子平臺狀態(tài)機基于Miro Samek設(shè)計的量子框架,根據(jù)前面所作分析,橋式起重機每個機構(gòu)的邏輯都可以抽象為應(yīng)用邏輯和驅(qū)動邏輯,應(yīng)用邏輯和驅(qū)動邏輯都對設(shè)備運行的穩(wěn)定性、可靠性和安全性加以保證,據(jù)此可將其抽象為應(yīng)用邏輯狀態(tài)機AppCtrl和驅(qū)動邏輯狀態(tài)機DrvCtrl,另外出于構(gòu)建整個狀態(tài)機系統(tǒng)間的事件驅(qū)動機制的考慮,可以再構(gòu)建一個系統(tǒng)狀態(tài)機SysCtrl,將這幾個狀態(tài)機的對應(yīng)類均從qpc:Qactive類派生,由此可以在每個狀態(tài)機中聲明一個類對象并將其強制轉(zhuǎn)化為QActive*類型,基本情況如下:
/*橋式起重機驅(qū)動邏輯狀態(tài)機部分*/
static DrvCtrl l_drvctrl;
QActive*My_Drv=(QActive*)&l_drvctrl;
/*橋式起重機應(yīng)用邏輯狀態(tài)機部分*/
static AppCtrl l_appctrl;
QActive*My_App=(QActive*)&l_appctrl;
/*橋式起重機系統(tǒng)邏輯狀態(tài)機部分*/
static SysCtrl l_sysctrl;//為狀態(tài)機命名
QActive*My_Sys=(QActive*)&l_sysctrl;//為狀態(tài)機引用
本項目利用可視化量子平臺的建模工具QM(Quantum Platform Modeler),來建立工程,由此可以通過建立層次狀態(tài)模型,輕易實現(xiàn)層次狀態(tài)機,并可以自動生成代碼框架。由QM建模工具生成的代碼具有如下特點,首先為狀態(tài)機中的每個狀態(tài)生成一個函數(shù),在這個函數(shù)中兩個函數(shù)指針,一個是本狀態(tài)類的指針,另一個是事件類指針,以驅(qū)動狀態(tài)機中的Stop狀態(tài)為例,生成的代碼框架如下:
QState DrvCtrl_Stop(DrvCtrl*me,QEvent const*e){
switch(e->sig){
case Q_ENTRY_SIG:{ //進入事件
……
return Q_HANDLED();//返回0 }
case TIME10MS_SIG:{ //收到10ms定時器事件……
return Q_HANDLED();//返回0 }
case DRV_EVENT_SIG:{ //收到驅(qū)動事件,由PostDrvEvt函數(shù)觸發(fā)
……
return Q_TRAN(&DrvCtrl_InvRun);//跳轉(zhuǎn)到 RUN狀態(tài) }
break;
}
return Q_SUPER(&QHsm_top);//執(zhí)行父狀態(tài)相應(yīng)事件處理代碼,不發(fā)生狀態(tài)跳轉(zhuǎn)
}
每個狀態(tài)機都各自維護自身定義的這個對象,并由QF將該指針對象和完成狀態(tài)響應(yīng)函數(shù)中的第一個指針形參結(jié)合完成地址傳遞,第二個事件指針的值也由QF框架完成傳遞。
信號的選擇對于基于活動對象的系統(tǒng)非常關(guān)鍵,它影響事件和活動對象,因此必須聲明一個枚舉類型的信號結(jié)構(gòu)體,將所有事件對應(yīng)信號均封裝在內(nèi),如定時器信號、按鍵信號、出錯信號以及通信信號等。
為建立狀態(tài)機機制,首先必須對QF框架以及狀態(tài)機進行初始化,本文將其封裝在BSP_init函數(shù)中,如下所示:
void BSP_init(void)
{ QF_psInit(subscrSto,Q_DIM(subscrSto));//初始化 QF框架的報文發(fā)布和訂閱
QF_poolInit((EVENT*)regPoolSto,sizeof(regPoolSto),sizeof(regPoolSto[0]));//初始化消息池
QActive_ctor(&((SysCtrl*)My_Sys)- > super,(QStateHandler)&SysCtrl_initial);//初始化狀態(tài)機
QTimeEvt_ctor(&((SysCtrl*)My_Sys)- >timeEvt__5,TIME5MS_SIG);//初始化5ms定時器
QActive_start((QActive*)My_Sys,1,SysCtrlQueueSto,Q_DIM(SysCtrlQueueSto),(void*)0,0,(QEvent*)0);//開啟 My_Sys狀態(tài)機(優(yōu)先級別:1)
QActive_ctor(&((AppCtrl*)My_App)- >super,(QStateHandler)&AppCtrl_initial);//初始化狀態(tài)機
QActive_start((QActive*)My_App,2,AppCtrlQueueSto,Q_DIM(AppCtrlQueueSto),(void*)0,0,(QEvent*)0);//開啟 My_App狀態(tài)機(優(yōu)先級別:2)
QActive_ctor(&((DrvCtrl*)My_Drv)- > super,(QStateHandler)&DrvCtrl_initial);
QActive_start((QActive*)My_Drv,3,DrvCtrlQueueSto,Q_DIM(DrvCtrlQueueSto),(void*)0,0,(QEvent*)0);//開啟 My_Drv狀態(tài)機(優(yōu)先級別:3)
……}
另外還必須為狀態(tài)機系統(tǒng)提供時鐘節(jié)拍,利用QF_run()函數(shù)啟動狀態(tài)機,將上面的BSP_init()和QF_run()均放在在主程序入口處首先調(diào)用,這樣就建立了基本的狀態(tài)機工作機制。同時為在狀態(tài)機之間傳遞消息還封裝了兩個事件對象DrvEvt和ErrorEvt以及兩個消息發(fā)送函數(shù)PostDrvEvt和PostErrorEvt,其中Post-DrvEvt在應(yīng)用邏輯狀態(tài)機中調(diào)用以向驅(qū)動邏輯狀態(tài)機發(fā)送運行消息,PostErrorEvt則在驅(qū)動狀態(tài)機中想應(yīng)用邏輯狀態(tài)機發(fā)消息,以此完成狀態(tài)機間的信息交互。每個狀態(tài)機都有且僅有其中的一個狀態(tài)處于活動狀態(tài),由該活動狀態(tài)處理相應(yīng)的事件消息,而活動狀態(tài)的父狀態(tài)是一種隱含的活動狀態(tài)。
本項目中為了數(shù)碼管、按鍵、液晶面板的顯示和參數(shù)切換、故障保存等還建立了其他的狀態(tài)機,各狀態(tài)機中的狀態(tài)都接受不同的事件消息,這些都在狀態(tài)機模型建立的時候充分考慮和設(shè)計,其中液晶面板的參數(shù)顯示和設(shè)置采用鏈表的機制完成。
基于量子平臺狀態(tài)機的橋式起重機電氣控制系統(tǒng)代碼簡潔、結(jié)構(gòu)清晰,整個程序運行均基于事件驅(qū)動,符合設(shè)備運行的真實狀態(tài),通過將起重機起停瞬間的關(guān)鍵邏輯抽象成狀態(tài)機中的獨立狀態(tài)并預(yù)先規(guī)劃出狀態(tài)之間跳轉(zhuǎn)的路徑和條件的方法確保了設(shè)備的安全性和可靠性。由于采用了QM的可視化建模和代碼生成工具,整個控制系統(tǒng)的軟件開發(fā)和調(diào)試時間大幅降低,目前該電控系統(tǒng)已得到成功應(yīng)用,設(shè)備運行穩(wěn)定、可靠,得到了客戶的好評。
[1]王德偉.智能控制在橋式起重機上的研究及應(yīng)用[D].武漢:武漢科技大學,2007.
[2]MIRO SAMEK PH D.嵌入式系統(tǒng)的微模塊化程序設(shè)計——實用狀態(tài)圖C/C++實現(xiàn)[M].北京:北京航空航天大學出版社,2004.
[3]戴明宏.起重機變頻調(diào)速控制系統(tǒng)的設(shè)計與研究[D].成都:西南交通大學,2004.
[4]夏翔.起重電控設(shè)計參考手冊[M].北京:機械工業(yè)出版社,2012.
[5]馮源,夏立.基于量子平臺的PMU軟件及狀態(tài)機描述[J].單片機與嵌入式系統(tǒng)應(yīng)用,2007,7(6):8.