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