構建開放式數控系統的一個基本原則就是模塊化,通過模塊化進行系統功能和結構的分解,降低耦合、增強內聚并控制粒度,以提高模塊的復用性。很多學者開展了有關這方面的研究工作,我們也在這個領域進行了一些探索,并發表了一些研究成果,圍繞模塊的接口設計、建模方法、系統配置等問題都進行了探討和研究。
隨著研究的深入,我們認識到除上述內容之外,控制信息在各模塊間的傳遞也是值得研究的問題。本文主要針對數控系統內控制信息的表述及傳遞的問題,結合自主開發的開放式系統HITCNC進行深入探討。首先介紹HITCNC系統的組成,然后重點闡述如何利用嵌套式任務單元實現信息的表達與有效傳遞,最后通過實驗加以驗證。
1 開放式數控系統HITCNC的模塊化構成
我們采用Windows NT+RTX(Real—time exten-sion for Windows)為系統平臺,以軟件化方式實現運動控制和邏輯控制功能,建立了基于PC機的軟件型開放式數控系統HITCNC。它與外部設備之間的數據通訊通過遵循SERCOS協議的SofiSercans通訊卡完成,系統結構如圖1所示。
圖1開放式效控系統HITCNC的模塊化系統結構
HITCNC是“軟件數控”,即CNC功能全部由軟件實現,各部分功能被分解到不同的軟件模塊中。其中人機接口、任務生成器模塊是在Windows環境下運行的COM組件;任務協調器、軸組、離散邏輯控制器、軸模塊、控制規律模塊則是運行于RTX實時環境下的動態鏈接庫。
各模塊具體功能如下:
(1)任務協調器進行任務分配,負責系統內各模塊的協調與調度。
(2)任務生成器根據一定的語法規則對數控加工程序進行語法檢查,完成譯碼工作,生成包含運動信息的運動段指令和邏輯控制指令,并對運動指令進行刀具補償。
(3)軸組模塊完成加減速處理、插補任務,對譯碼得到的運動段按照一定的進給速度要求進行細分,得到單個插補周期內的直線段進給量,然后分解并輸出給各個軸模塊。
(4)軸模塊接收來自軸組模塊的指令,同時讀取外部的反饋信息,根據用戶需求選擇性地調用伺服控制規律完成位置控制或速度控制等功能,并將控制信息發送給外部執行單元。
(5)控制規律模塊負責伺服控制規律的計算,提供多種控制策略。
(6)離散邏輯控制模塊負責對外部輸入和內部狀態變量進行布爾運算得到相應輸出和內部狀態變量,并對外部輸入輸出設備進行控制,包括機電設備的啟停、刀具的交換等。
2 控制信息的抽象與表達
2.1 任務單元
對數控系統而言,其所要處理的信息主要來自數控加工程序。在本系統中,數控程序經任務生成器處理得到的控制信息(包括運動控制與邏輯控制)采用有限狀態機FSM(Finite State Machine)進行描述。這里,將包含控制信息的FSM對象稱為任務單元。有限狀態機通常采用狀態轉移圖來表示,其構成要素包括狀態、轉移、事件、動作。簡化的任務單元狀態轉移圖參見圖2。其中“未初始化、已初始化、運行、停止、結束”表示狀態;“初始化、執行、刷新、復位、完成、停止”表示事件;“initialization()、runningAction()、stopAction()、resetAction()”表示動作;當任務單元處于“未初始化”狀態,并接收到事件“初始化”時,它會執行動作“initialization()”,并完成由“未初始化”狀態向“已初始化”狀態的轉移。任務單元本身就是一個有限狀態機對象。有限狀態機的基本概念和軟件化實現方法參見文獻,這里不再詳述。
圖2簡化的任務單元狀態轉移圖
2.2 任務單元的種類
根據任務單元所要完成功能,本系統定義了多種任務單元類,如圖3。
圖3任務單元的種類
(1)運動任務單元對應于輸入軸組模塊的數據FSM,分為直線、圓弧運動任務單元等。除了具有基本的FSM管理和參數化方法之外,運動任務單元還包括速率、待加工的幾何信息等以及負責刀具軌跡規劃的速度輪廓生成器。它們在軸組模塊內按照圖2規劃的FSM運行,通過執行動作initilization()和runningAc—tion()分別完成插補的初始化和插補計算任務。
(2)離散邏輯任務單元對應于輸入離散邏輯模塊的數據FSM。離散邏輯單元負責對外部輸人輸出單元的協調和控制。如主軸的啟停、冷卻液的開關等。
(3)執行步任務單元在任務協調器內的FSM對象,包括運動任務執行步和離散邏輯任務執行步,分別負責監控和管理運動任務單元和離散邏輯任務單元的執行。例如直線運動任務單元就是在運動執行步的監控下運行的,具體實現過程將在下文詳細解釋。對于圖3中的各種任務單元,采用面向對象編程技術,以基類任務單元模板來抽象表示它們的共性,則每一種具體類型的任務單元都通過從任務模板基類派生定制實現。
3 控制信息的傳遞與系統模塊的協作
任務單元是可以嵌套的,一個任務單元能夠包含其它的任務單元。當外層任務單元的有限狀態機被激活時,它能夠向下層模塊發送其內嵌的任務單元。這樣,就可以將數控程序包含的控制信息以任務單元的形式在模塊間傳送,被傳送的任務單元成為下層模塊內活動的狀態機,從而控制下層模塊的行為。外層任務通過對嵌套任務的管理就可以實現對下層邏輯和運動控制模塊的協調調度。在本系統中,執行步任務單元屬于外層任務,它負責嵌套包含運動任務單元和離散邏輯任務單元。通過下面的例子來說明當數控系統執行一個加工程序時,模塊間的協作關系與數據流的傳遞過程,如圖4所示。執行步驟如下:
圖4模塊間的協作與數據傳遞
步驟1 加工程序在任務生成器中被翻澤為一系列執行步任務單元,以鏈表的形式存在;每個執行步任務單元都是嵌套的,內部包含有等待執行的運動任務單元或邏輯控制單元。
步驟2 任務協調器通過調用getTasks()獲取執行步單元。在本系統中,任務生成器是一個COM組件,在Windows環境下運行;任務協調器是一個實時動態鏈接庫,在實時操作系統RTX環境下運行。兩個模塊通過共享內存傳遞具有嵌套結構的執行步任務單元。
步驟3 任務協調器調用執行步單元提供的exe—cuteUnit()激活其包含的狀態機。步驟3會重復執行多次,因為它要與下層模塊保持同步(例如,等待當前嵌套的運動任務單元被完成)。
步驟4 在任務協調器內處于活動狀態的執行步任務單元將內嵌的運動任務單元發送到軸組模塊的運動隊列中,通過調用setNextMotionSegment()實現。運動任務單元被加載到軸組隊列后等待被激活。
步驟5 加載到軸組隊列首位的運動單元首先被激活,軸組模塊周期性調用該運動任務單元的exe-cuteUnit()方法,運動任務單元依照它的有限狀態機規劃開始運行。此時外層執行步的狀態機在任務協調器內同步運行,并不斷查詢運動任務單元的狀態,直至運動任務單元轉變為“結束”狀態為止。
圖5給出了上述任務單元在控制系統內的被傳遞和執行過程中自身狀態所發生的轉變,同時可以看出它們的管理對象也發生了變化。首先,嵌套任務單元由任務生成器譯碼得到,任務協調器調用外層執行步任務單元的executeUnit()方法激活其有限狀態機進行一系列更新操作,執行步由“未初始化”轉變為“已初始化”狀態,同時完成動作initiationAction(),把內嵌的運動任務單元發送到軸組的運動隊列中。軸組調用運動任務單元的executeUnit()方法,使運動任務單元在軸組內被激活,周期性刷新,依次處理“初始化”、“執行”事件,完成動作“runningAction()”進行插補計算直至插補結束。在此過程中,位于上層任務協調器中的執行步進入“運行”狀態,它也通過自身的“runningAction()”動作不斷查詢其內嵌運動任務單元是否為“結束”狀態。當運動任務單元結束時,軸組將其從運動隊列中刪除;任務協調器中的執行步繼續監控它所包含的下一任務單元或者將控制權移交給下一個執行步。圖中兩側所示為執行步任務單元與運動任務單元在不同時刻所對應的管理對象。
圖5嵌套任務單元在系統內的執行過程
通過上面的例子可以看出,利用有限狀態機,任務單元通過在其內部封裝一系列狀態變化,進而實現了系統預期完成的操作和功能;更重要的是,任務單元的嵌套結構設計就象是一棵樹上的主干和分支,實現了信息在系統內的有序流動和傳遞,而且這種嵌套設計使任務單元具有智能特征,具備了協調下層運動模塊和邏輯控制模塊的能力。
4 實驗驗證
筆者開發的開放式數控系統其組成如前所述,配備于一臺三軸銑床上。為了驗證任務單元的設計是否實現了控制信息的有效表達與傳遞,進行了下面實驗。
(1)直線、圓弧運動任務單元的驗證:我們所開發的系統最初只具有直線、圓弧加工能力,因此利用該三軸銑床進行了圖6所示的鼠標殼體的加工。實驗表明包含FSM的嵌套式任務單元設計合理,控制信息在模塊間傳遞無誤,數控系統具有實用性,整體性能良好。
(2)運動任務單元的派生——擴充NURBS曲線加工能力:系統功能擴充的途徑之一就是派生新的運動任務單元,創建滿足特定加工能力的子類。為了在常規插補的基礎上擴充NURBS插補,從運動任務單元來派生CNurbsSegment運動任務單元,其封裝實現了NURBS曲線插補功能。CNurbsSegment運動任務單元仍然采用執行步任務單元嵌套管理方式,最終系統具有了NURBS曲線加工能力。圖7就是利用NURBS曲線插補功能所加工的電鉆殼體模具。CNurbsSegment運動任務單元部分代碼如下
正是由于采用了嵌套式任務單元的設計,系統功能擴充過程中只需對任務生成器和任務協調器進行代碼的添加,而不用修改構成系統的其它部分,模塊的可重用性大大增強。
5 結語
本文提出了一種采用FSM數據形式封裝控制信息,并以嵌套結構形式使其在數控系統各模塊中智能化地傳遞的方法。實驗證明,該方法不僅保證了模塊間信息的有序傳遞和模塊問的相互協作,而且系統功能擴展能力易于實現,模塊的可重用性大大增強。
(審核編輯: 智匯張瑜)
分享