基于組件技術(shù)的計(jì)算機(jī)數(shù)控系統(tǒng)開(kāi)發(fā)
點(diǎn)擊:1331
A+ A-
所屬頻道:新聞中心
隨著現(xiàn)代制造業(yè)的進(jìn)步和計(jì)算機(jī)集成系統(tǒng)的不斷成熟,數(shù)控系統(tǒng)融合計(jì)算機(jī)技術(shù)正朝著開(kāi)放化、網(wǎng)絡(luò)化、智能化的方向發(fā)展。具有層次化結(jié)構(gòu)的開(kāi)放式數(shù)控系統(tǒng)以其可擴(kuò)展、可移植、可互換和可配置等特點(diǎn),成為當(dāng)今數(shù)控技術(shù)發(fā)展的趨勢(shì)。
組件技術(shù)具有可重用性和良好的語(yǔ)言無(wú)關(guān)性,可以實(shí)現(xiàn)跨進(jìn)程、跨平臺(tái)甚至網(wǎng)絡(luò)范圍內(nèi)的互操作,較好地解決軟件復(fù)用技術(shù)所面臨的問(wèn)題。由組件來(lái)組建開(kāi)放數(shù)控軟件,可在較高層次上滿足開(kāi)放式數(shù)控系統(tǒng)的要求。因此,本文提出了一個(gè)基于組件技術(shù)的開(kāi)放式數(shù)控系統(tǒng)體系結(jié)構(gòu),并對(duì)系統(tǒng)的設(shè)計(jì)、實(shí)現(xiàn)、封裝、部署等過(guò)程進(jìn)行了詳細(xì)介紹。
1 系統(tǒng)組件的劃分
本文建立的數(shù)控系統(tǒng)從邏輯上劃分為人機(jī)交互服務(wù)器(HMI Server)組件、認(rèn)證服務(wù)(Authentica-tion Service)組件、運(yùn)動(dòng)控制核心(Motion ControlKernel,以下簡(jiǎn)稱MCK)組件、PLC組件、運(yùn)動(dòng)學(xué)(Kinematics)組件和人機(jī)交互客戶端(HMI Client)5個(gè)基本組成部分。
a) HMI Client是數(shù)控系統(tǒng)的客戶端,為用戶提供一個(gè)與數(shù)控系統(tǒng)進(jìn)行交互的圖形或命令行形式的界面,并且可以同時(shí)存在多個(gè)實(shí)例,它不與運(yùn)動(dòng)控制組件進(jìn)行直接交互,而是以HMI Server作為中介。
b) HMI Server組件存在的目的是為HMIClient訪問(wèn)運(yùn)動(dòng)控制組件提供一個(gè)簡(jiǎn)單的外觀層,降低HMI Client與運(yùn)動(dòng)控制組件之間的耦合度,因此,其主要功能是轉(zhuǎn)發(fā)請(qǐng)求,并對(duì)任何加工數(shù)據(jù)進(jìn)行處理,它是Facade設(shè)計(jì)模式的一個(gè)具體應(yīng)用,滿足了軟件架構(gòu)低耦合的要求。
c) MCK組件是整個(gè)系統(tǒng)的功能核心,負(fù)責(zé)完成系統(tǒng)大部分的任務(wù)。根據(jù)高內(nèi)聚原則,將該組件進(jìn)一步細(xì)分成8個(gè)子組件,每個(gè)子組件獨(dú)立地實(shí)現(xiàn)一個(gè)特定的功能,這些子組件包括誤差補(bǔ)償(ErrorCompensation)組件、插補(bǔ)(Interpolation)組件、超前讀(Look Ahead)組件、NC代碼解釋器(NC CodeInterpreter)組件、路徑規(guī)劃(Path Planning)組件、位置控制(Position Control)組件、刀具補(bǔ)償(ToolCompensation)組件和速度規(guī)劃(Velocity Control)組件。
d) Kinematics組件負(fù)責(zé)正向計(jì)算和逆向運(yùn)動(dòng)計(jì)算、采用幾何方法糾錯(cuò)和刀具偏移量、對(duì)工件的動(dòng)態(tài)檢測(cè)、在聯(lián)合坐標(biāo)系和笛卡兒坐標(biāo)系中進(jìn)行運(yùn)動(dòng)學(xué)極限檢測(cè)等。
e) PLC負(fù)責(zé)實(shí)現(xiàn)機(jī)床監(jiān)控、換刀機(jī)構(gòu)控制、夾具控制、潤(rùn)滑和冷卻系統(tǒng)控制、傳感器檢測(cè)等數(shù)控系統(tǒng)的輔助控制功能。
2 系統(tǒng)的部署架構(gòu)
基于CCM的分布式系統(tǒng),可以通過(guò)網(wǎng)絡(luò)將若干處理器資源組織起來(lái),并通過(guò)將系統(tǒng)任務(wù)合理地分布于各處理節(jié)點(diǎn)上來(lái)實(shí)現(xiàn)系統(tǒng)功能。相對(duì)于運(yùn)行于單機(jī)的系統(tǒng)而言,運(yùn)行在分布式環(huán)境下的系統(tǒng)的運(yùn)行能力可以隨網(wǎng)絡(luò)結(jié)構(gòu)的擴(kuò)展而進(jìn)一步增強(qiáng),并且可以避免單個(gè)節(jié)點(diǎn)過(guò)載的情況。
對(duì)于建立在分布式環(huán)境下的系統(tǒng),系統(tǒng)組件之間的消息傳遞路徑大體分為2種:位于同一節(jié)點(diǎn)內(nèi)的組件之間的消息傳遞路徑通常為PC總線;位于不同節(jié)點(diǎn)的組件之間的消息傳遞路徑通常為網(wǎng)絡(luò)總線。前者的響應(yīng)延遲較低,因此,可以將有交互并且對(duì)交互響應(yīng)時(shí)間要求較為嚴(yán)格的組件放置于同一節(jié)點(diǎn),對(duì)交互響應(yīng)時(shí)間并無(wú)明確要求的組件則可分布于不同的節(jié)點(diǎn)。
由于實(shí)現(xiàn)運(yùn)動(dòng)控制是系統(tǒng)的主要任務(wù),并且運(yùn)動(dòng)控制過(guò)程對(duì)實(shí)時(shí)性有一定的要求,因此出于對(duì)效率的考慮,將與運(yùn)動(dòng)控制相關(guān)的組件即MCK、PLC和Kinematics安排在同一節(jié)點(diǎn),稱為運(yùn)動(dòng)控制節(jié)點(diǎn)。運(yùn)動(dòng)控制節(jié)點(diǎn)上安裝了實(shí)時(shí)操作系統(tǒng),這就使得數(shù)控系統(tǒng)可以根據(jù)各項(xiàng)任務(wù)對(duì)實(shí)時(shí)性要求的不同,為每個(gè)任務(wù)分配不同的優(yōu)先級(jí),從而保證了對(duì)關(guān)鍵任務(wù)的及時(shí)處理。系統(tǒng)的部署架構(gòu)如圖1。
圖1 系統(tǒng)的部署架構(gòu)
3 組件的IDL/CIDL定義
以HMI Server為例,對(duì)定義過(guò)程進(jìn)行描述。
HMI Server的IDL定義如下: component HMIServer supports SystemService { provides RegisterService RegSrv; provides NCCodeManager NCCodeMgr; uses AuthenticationService AuthSrv; publishes StartMotionControl StartMC; publishes StopMotionControl StopMC; publishes PauseMotionControl PauseMC; publishes NCCodeReady NCCodeRD; publishes SystemInitiation SysInit; }; home HMIServerHome manages HMIServer{}。
其中,系統(tǒng)服務(wù)面向系統(tǒng)外部的HMI Client注冊(cè)服務(wù)面向所有運(yùn)動(dòng)控制組件;NC代碼管理器則面向MCK中的NC代碼解釋器組件;Home則是用于創(chuàng)建組件實(shí)例的工廠(Factory)。
允許系統(tǒng)使用者開(kāi)發(fā)適合自身需要的HMIClient也是本系統(tǒng)的一個(gè)目標(biāo),所以應(yīng)該讓系統(tǒng)使用者自主選擇HMI Client的開(kāi)發(fā)技術(shù),而不應(yīng)該使HMI Client僅基于CCM,因此HMI Client只要遵循系統(tǒng)接口規(guī)范,可以使用任何技術(shù)實(shí)現(xiàn)。由于Provides/uses方式僅能用于組件之間連接的建立,因此HMI Server以支持(supports)的方式對(duì)外提供系統(tǒng)服務(wù),而注冊(cè)服務(wù)和NC代碼管理器則以提供(provides)的方式與相應(yīng)的使用者建立連接。
由于系統(tǒng)服務(wù)中的登錄和注銷功能只是對(duì)HMI Client提供了一個(gè)訪問(wèn)認(rèn)證服務(wù)的接口,因此HMI Server需要與認(rèn)證服務(wù)組件建立連接,以使用其提供的認(rèn)證功能。對(duì)于HMI Server組件,由于其狀態(tài)不需要在生存期以外進(jìn)行保存,所以沒(méi)有必要將組件定義為Entity或Process類型,并且一個(gè)組件的生存期需要超過(guò)一次客戶請(qǐng)求,所以Service類型也不合適。因此,要使組件在整個(gè)系統(tǒng)運(yùn)行期間保持激活狀態(tài),Session類型是最合適的選擇。
HMI Server的CIDL定義如下: composition session HMIServer_impl { home executor HMIServerHome_Exec { implements CNC::HMISERVER_MODULE::H MIServerHome; manages HMIServer_Exec; }; }。
4 IDL/CIDL到C++的映射
完成IDL和CIDL的定義后,首先,使用TAO/CIAO開(kāi)發(fā)包中的Perl腳本來(lái)生成工程描述文件;然后,建立空白的實(shí)現(xiàn)文件,這樣可以使整個(gè)工程通過(guò)編譯,而具體的實(shí)現(xiàn)代碼則可在隨后逐步完善。編譯完成后,將會(huì)在各組件的工程目錄中生成映射到C++的客戶端stub、服務(wù)器端skeleton、服務(wù)器端servant等文件。在生成了組件的C++框架文件后,就可以以此為基礎(chǔ)進(jìn)行組件的具體實(shí)現(xiàn)過(guò)程。
5 組件的實(shí)現(xiàn)
以HMI Server為例,對(duì)組件的實(shí)現(xiàn)進(jìn)行說(shuō)明。
a) 定義每個(gè)組件executor的實(shí)現(xiàn)類,它們都位于單獨(dú)的名稱空間下,例如,HMIServer_exec_i是HMI Server組件executor的實(shí)現(xiàn)類,它定義了executor接口,規(guī)定了executor所必需實(shí)現(xiàn)的方法,包括HMI Server組件使用supports關(guān)鍵字明確支持的接口中的方法。
由于HMIServer_Exec是一個(gè)Session類型的組件,因此HMIServer_exec_i需要對(duì)SessionComponent中的一些容器回調(diào)函數(shù)進(jìn)行重置(override)。例如,set_session_context,其具體實(shí)現(xiàn)如下:
void HMIServer_exec_i::set_session_context(Com ponents::SessionContext_ptr ctx) { ,, this->m_context=HMIServer_Exec_Con text::_narrow(ctx); }。
b) 組件所提供的facet也需要單獨(dú)實(shí)現(xiàn),通常在facet的實(shí)現(xiàn)中保存了對(duì)相應(yīng)executor的引用,以實(shí)現(xiàn)其向exector的導(dǎo)航,在相應(yīng)的executor中則必須為receptacle提供獲取關(guān)聯(lián)的facet的/get_<facet_name>0方法。
HMI Client這類非組件的客戶端是通過(guò)調(diào)用/provide_<facet_name>0來(lái)得到組件相應(yīng)的fac-et,而/get_<facet_name>0實(shí)際上是/provide_<facet_name>0在組件executor端的映射。
c) 使用supports關(guān)鍵字聲明的接口是通過(guò)繼承的方式在組件executor中實(shí)現(xiàn)的,例如,HMIServer組件通過(guò)繼承的方式支持SystemService接口。
HMI Server組件在IDL中聲明了對(duì)認(rèn)證服務(wù)組件的Authentication Service接口的使用。在具體實(shí)現(xiàn)中,HMI Server組件executor通過(guò)其上下文(Context)得到指向Authentication Service接口實(shí)現(xiàn)類的指針,從而調(diào)用其中相應(yīng)的方法,HMI Server組件的上下文在組件部署期間被創(chuàng)建,并由組件的容器在組件激活前通過(guò)容器的回調(diào)函數(shù)set_ses-sion_context進(jìn)行設(shè)置。
對(duì)事件的發(fā)布也是通過(guò)組件上下文,例如,HMI Server作為系統(tǒng)初始化事件的事件源,其具體發(fā)布方法為:
::CNC::SystemInitiation_var evt1=new ::OBV_CNC::SystemInitiation ; m_context->push_SysInit(evt1)。
該事件的響應(yīng)方法,則由各接收者獨(dú)立實(shí)現(xiàn)。
d) 定義組件home executor的實(shí)現(xiàn)類以及組件executor在DLL中的入口點(diǎn)(Entry Point),入口點(diǎn)的主要作用是創(chuàng)建組件home實(shí)例。HMIServer組件入口點(diǎn)的具體實(shí)現(xiàn)如下:
extern "C" ::Components::HomeExecutorBase_ptr createHMIServerHome_Impl() { return new CIDL_HMIServer_Impl::HMIServerHo me_exec_i(); }。
6 組件的封裝組裝及部署
在得到了各組件的DLL實(shí)現(xiàn)后,需要對(duì)其進(jìn)行封裝與組裝,以便使系統(tǒng)能夠在分布式環(huán)境下進(jìn)行部署,系統(tǒng)使用者可以根據(jù)需要,制定不同的部署方案。
組裝的具體工作就是為系統(tǒng)中相關(guān)的facet和receptacle,event source和event sink建立連接描述文件,這是一個(gè)遞歸的過(guò)程,最終形成完整的系統(tǒng)。本系統(tǒng)由HMI Server,MCK,PLC,運(yùn)動(dòng)學(xué)、認(rèn)證服務(wù)組件組裝而成,其中MCK由8個(gè)子組件組裝而成。
封裝過(guò)程的目標(biāo)是制作一個(gè)包括組件實(shí)現(xiàn)和組件描述的可部署的組件包,組件包是用于部署的最小單元。對(duì)于單獨(dú)的組件,需要將該組件的XML描述文件和組件的DLL文件封裝為zip格式的組件包;對(duì)于組裝而來(lái)的組件,由于它沒(méi)有獨(dú)立的組件實(shí)現(xiàn),因此,只需要為其組件描述和組件包建立關(guān)系。
在部署階段,首先,需要建立目標(biāo)環(huán)境(TargetEnvironment)的模型,該模型描述了作為組件載體的物理資源及其拓?fù)浣Y(jié)構(gòu);然后,參照預(yù)先設(shè)計(jì)的部署架構(gòu)建立相應(yīng)的部署計(jì)劃。
整個(gè)過(guò)程通過(guò)使用CosMIC工具完成,這樣能有效地避免手工編輯XML文件時(shí)容易出現(xiàn)的錯(cuò)誤,從而提高開(kāi)發(fā)效率。
7 組件的運(yùn)行
在CORBA體系結(jié)構(gòu)中,分布環(huán)境中的節(jié)點(diǎn)監(jiān)控進(jìn)程被稱作節(jié)點(diǎn)管理器(Node Manager),分布在某一節(jié)點(diǎn)上的一個(gè)組件的運(yùn)行,被稱作節(jié)點(diǎn)應(yīng)用程序(Node Application)。解析部署計(jì)劃,判斷計(jì)劃是否可行,并且將計(jì)劃轉(zhuǎn)換為合適的數(shù)據(jù)結(jié)構(gòu),以作為執(zhí)行管理器輸入的進(jìn)程被稱作部署計(jì)劃執(zhí)行器(Plan Launcher);根據(jù)部署計(jì)劃的解析結(jié)果,負(fù)責(zé)將系統(tǒng)各組件分布到相應(yīng)的節(jié)點(diǎn)上的進(jìn)程被稱作執(zhí)行管理器(Execution Manager)。
部署計(jì)劃執(zhí)行器在完成解析后,會(huì)將結(jié)果發(fā)送到執(zhí)行管理器,然后執(zhí)行管理器按照計(jì)劃將系統(tǒng)各組件分布到域中各節(jié)點(diǎn)。計(jì)劃成功執(zhí)行后,各系統(tǒng)組件被激活待命,可以通過(guò)生成的IOR文件直接獲取其引用,也可以使用CORBA名稱服務(wù)進(jìn)行定位。另外,可以編寫腳本以方便整個(gè)啟動(dòng)過(guò)程的進(jìn)行,系統(tǒng)啟動(dòng)后,用戶就可以通過(guò)HMI Client對(duì)系統(tǒng)進(jìn)行操作和監(jiān)控。HMI Client的圖形界面如圖2。
圖2 HMI Client的圖形界面
8 結(jié)語(yǔ)
提出了一個(gè)基于CCM技術(shù)的開(kāi)放式數(shù)控系統(tǒng),并介紹了數(shù)控組件的設(shè)計(jì)、實(shí)現(xiàn)、封裝、組裝、部署及運(yùn)行的全過(guò)程。該系統(tǒng)可以更好地滿足系統(tǒng)模塊化、可重構(gòu)、可擴(kuò)展、可移植等開(kāi)放性要求,對(duì)于推動(dòng)組件技術(shù)在開(kāi)放式數(shù)控系統(tǒng)領(lǐng)域中的應(yīng)用具有重要意義。
(審核編輯: 智匯張瑜)
分享