專利名稱:數(shù)控機(jī)床控制軟件界面消息傳遞的實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明屬于數(shù)控機(jī)床軟件應(yīng)用領(lǐng)域,特別涉及一種數(shù)控機(jī)床控制軟件界 面消息傳遞的實(shí)現(xiàn)方法。
背景技術(shù):
制造業(yè)是國民經(jīng)濟(jì)的基礎(chǔ)產(chǎn)業(yè),制造業(yè)的水平高低是衡量一個國家工業(yè) 發(fā)達(dá)程度的重要標(biāo)志。數(shù)控機(jī)床質(zhì)量水平的高低,關(guān)系著國家制造業(yè)水平的 高低。作為數(shù)控機(jī)床的核心部分,控制軟件的好壞直接影響了數(shù)控機(jī)床的性 能和銷量。
然而不同廠家,不同型號的數(shù)控機(jī)床對軟件的功能、界面都有不同要求, 如果分別開發(fā)則成本太高。所以我們需要將軟件相對固定的模塊與多變的模 塊相分離,尤其是內(nèi)核功能調(diào)用與界面。
然而分離之后界面同內(nèi)核如何建立聯(lián)系就成為亟待解決的問題。我們需 要一種機(jī)制來使多變的界面同固定的內(nèi)核相互聯(lián)系。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種數(shù)控機(jī)床控制軟件界面消息傳遞
的實(shí)現(xiàn)方法,基于MFC建立一套消息機(jī)制,響應(yīng)各種不同的消息的類,從而 實(shí)現(xiàn)界面消息啟動內(nèi)核功能。
為了解決上述問題,本發(fā)明的技術(shù)方案是這樣的-
消息經(jīng)過基于微軟基礎(chǔ)類庫MFC的消息處理機(jī)制消息進(jìn)入函數(shù)窗口處 理函數(shù)AfkWndProc;再進(jìn)入窗口回調(diào)函數(shù)AfkCallWndProc;再進(jìn)入發(fā)送消息 的回調(diào)函數(shù)CWnd::WindowProc;再進(jìn)入消息映射函數(shù)CWnd::OnWndMsg; 再進(jìn)入CWnd::OnCommand從基類調(diào)用起源類,在其中調(diào)用消息映射 CCmdTarget類中的消息傳遞OnCmdMsg函數(shù)。處理的消息經(jīng)過消息路由機(jī)制。
所述的消息路由機(jī)制是將響應(yīng)處理函數(shù)分別分裝在多個單獨(dú)的類中,當(dāng) 類生成一個對象,該對象被裝入鏈表,通過該鏈表得到需要接收的消息的對 象。
所述的類派生于CncTarget,維護(hù)CncTarget類對象的鏈表。 所述的類派生于CinputFormCtrl,維護(hù)CinputFormCtrl類對象的鏈表。 CncTarget類以及CinputFormCtrl類擁有函數(shù)OnCmdMsg。 界面框架代碼中的消息處理函數(shù)OnCmdMsg中依次調(diào)用等待響應(yīng)的對象
鏈表中對象的函數(shù)OnCmdMsg。
本發(fā)明的有益效果是提供基于MFC建立一套消息機(jī)制,響應(yīng)各種不同的
消息的類,從而實(shí)現(xiàn)界面消息啟動內(nèi)核功能,實(shí)現(xiàn)將不同型號的數(shù)控機(jī)床的
多變的界面同固定的內(nèi)核相互聯(lián)系。
圖1是本發(fā)明的消息傳遞的流程示意圖。
具體實(shí)施例方式
為了使本發(fā)明的技術(shù)手段、創(chuàng)作特征、達(dá)成目的與功效易于明白了解, 下面結(jié)合具體圖示,進(jìn)一步闡述本發(fā)明。
如圖1所示,本發(fā)明的一種數(shù)控機(jī)床控制軟件界面消息傳遞的實(shí)現(xiàn)方法 的實(shí)施例,消息經(jīng)過基于MFC的消息處理機(jī)制消息進(jìn)入函數(shù)AfkWndProc; 再進(jìn)入 AfkCallWndProc ; 再進(jìn)入 CWnd::WindowProc ; 再進(jìn)入 CWnd::OnWndMsg;再進(jìn)入CWnd::OnCommand,在其中調(diào)用CCmdTarget類 中的OnCmdMsg函數(shù)。査看CCmdTarget類,發(fā)現(xiàn)從CCmdTarget派生的類都 可以處理命令消息并且OnCmdMsg是個虛函數(shù),也就是說派生類可以通過重 寫該函數(shù)來實(shí)現(xiàn)命令消息在各個類中串行直到響應(yīng)。
處理的消息經(jīng)過消息路由機(jī)制。消息路由機(jī)制是將響應(yīng)處理函數(shù)分別分 裝在多個單獨(dú)的類中,當(dāng)類生成一個對象,該對象被裝入鏈表,通過該鏈表 得到需要接收的消息的對象。所述的類派生于CncTarget或者CinputFormCtrl,維護(hù)CncTarget類或者CinputFormCtrl類對象的鏈表。
CncTarget類和CinputFormCtrl類有兩個共同的特點(diǎn), 一是它們都直接或 通過繼承間接擁有虛函數(shù)OnCmdMsg; 二是它們都維護(hù)一個該類對象的鏈表, 每當(dāng)派生類生成一個對象,所調(diào)用的基類構(gòu)造函數(shù)就將該對象裝入鏈表,這 樣就可以通過該鏈表得到需要接收消息的對象。
最后在界面框架代碼中的消息處理函數(shù)OnCmdMsg中就可以依次調(diào)用等 待響應(yīng)的對象鏈表中對象的消息處理函數(shù)OnCmdMsg,從而實(shí)現(xiàn)消息路由機(jī) 制。
通過將響應(yīng)處理分散在多個Target類中(每個Target分配100個消息號), 我們可以在不更改其它代碼的情況下添加Target,來增加新響應(yīng)新功能,大大 增加了軟件擴(kuò)展的靈活度。
下面將具體說明如何設(shè)計(jì)CNcTarge、 CinputFormCtrl類Target消息響應(yīng)
類及展示消息傳遞過程。
CNcTarget類結(jié)構(gòu)CNcTarget類繼承自CCmdTarget,所以它有一個虛函 數(shù)OnCmdMsg; CNcTarget類中定義了一個static變量m—listNcTarget,它的類 型是CList<CNcTarget*, CNcTarget*〉,該靜態(tài)變量用來保存所有CNcTarget派 生類的對象。
CI叩utFormCtrl類結(jié)構(gòu)CI叩utFormCtrl類繼承自CThemeForm類,而 CThemeForm包含一個虛函數(shù)OnCmdMsg; CinputFormCtrl類中定義了一個 static 變量 m—listlnputFormCtrl , 類型是 CList<CInputFormCtrl*, CInputFormCtrl*>,該靜態(tài)變量用來保存所有CinputFormCtrl派生類的對象。
Target類Target類是指繼承自CNcTarget的類,用來處理消息。
為將消息出來分散在多個類中以便于靈活擴(kuò)展,以類CNcIoTarget為例來 對Target類加以說明。
首先要為處理IO響應(yīng)的消息分配消息號,范圍為[41400, 41500]
snum
IDCMD—NCIOTARGET—BASE = 41400, IDC函一TOOL一DETRUSION,IDCMD—SPIND—DISENTANGLE—TOOL,
其次在類中要包含相應(yīng)的消息處理函數(shù)
afk一msg void OnDetrusionTool();
afk—msg void OnUpdateDetrusionTool(CCmdUI* pCmdUI」; afk一msg void OnSpindDisentangleTool();
afk—msg void OnUpdateSpindDisentangleTool(CCmdUP pCmdUI_);
最后再加上對應(yīng)數(shù)據(jù)結(jié)構(gòu),輔助函數(shù)等內(nèi)容,這樣類NcIoTarget的對象 就可以處理自己所管轄的消息。
至此,我們已經(jīng)擁有了處理消息的模塊,接下來就需要將截獲的消息傳 送到相應(yīng)模塊。我們在窗口類CNcFrameWnd的OnCmdMsg函數(shù)中來完成這 個功能。如下列代碼所示
BOOL CNcFrameWnd::OnCmdMsg(UINT nID, int nCode, void* pExtra,...)
〃...省略 POSITION _pos; int —count, —
CNcTarget::CNcTargetList承_pListTarget = CNcTarget::GetNcTargetList();
_pos = _pListTarget->GetHeadPosition();
—count = _pListTarget->GetCount();
for (_i = 0; —i < —count; —i++)
{
if (_pListTarget->GetNext(_pos)->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo)) return TRUE;
}
〃...省略
return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerlnfo); 從代碼中可以看出,我們通過Target對象鏈表獲得被創(chuàng)建的消息處理對象,依次向其發(fā)送消息。使得Target最先獲取處理命令消息的權(quán)利,如果我 們自己的消息處理類沒有處理該消息,則在最后發(fā)送給標(biāo)準(zhǔn)MFC對象處理。 以上顯示和描述了本發(fā)明的基本原理、主要特征和本發(fā)明的優(yōu)點(diǎn)。本行 業(yè)的技術(shù)人員應(yīng)該了解,本發(fā)明不受上述實(shí)施例的限制,上述實(shí)施例和說明 書中描述的只是說明本發(fā)明的原理,在不脫離本發(fā)明精神和范圍的前提下本 發(fā)明還會有各種變化和改進(jìn),這些變化和改進(jìn)都落入要求保護(hù)的本發(fā)明范圍 內(nèi)。本發(fā)明要求的保護(hù)范圍由所附的權(quán)利要求書及其等同物界定。
權(quán)利要求
1、一種數(shù)控機(jī)床控制軟件界面消息傳遞的實(shí)現(xiàn)方法,其特征在于消息經(jīng)過基于微軟基礎(chǔ)類庫MFC的消息處理機(jī)制消息進(jìn)入函數(shù)窗口處理函數(shù)AfxWndProc;再進(jìn)入窗口回調(diào)函數(shù)AfxCallWndProc;再進(jìn)入發(fā)送消息的回調(diào)函數(shù)CWnd::WindowProc;再進(jìn)入消息映射函數(shù)CWnd::OnWndMsg;再進(jìn)入CWnd::OnCommand從基類調(diào)用起源類,在其中調(diào)用消息映射CCmdTarget類中的消息傳遞OnCmdMsg函數(shù)。處理的消息經(jīng)過消息路由機(jī)制。
2、 根據(jù)權(quán)利要求1所述的一種數(shù)控機(jī)床控制軟件界面消息傳遞的實(shí)現(xiàn)方 法,其特征在于所述的消息路由機(jī)制是將響應(yīng)處理函數(shù)分別分裝在多個單 獨(dú)的類中,當(dāng)類生成一個對象,該對象被裝入鏈表,通過該鏈表得到需要接 收的消息的對象。
3、 根據(jù)權(quán)利要求2所述的一種數(shù)控機(jī)床控制軟件界面消息傳遞的實(shí)現(xiàn)方 法,其特征在于所述的類派生于CncTarget,維護(hù)CncTarget類對象的鏈表。
4、 根據(jù)權(quán)利要求2所述的一種數(shù)控機(jī)床控制軟件界面消息傳遞的實(shí)現(xiàn)方 法,其特征在于所述的類派生于CinputFormCtrl,維護(hù)CinputFormCtrl類對象的鏈表。
5、 根據(jù)權(quán)利要求3或者4所述的一種數(shù)控機(jī)床控制軟件界面消息傳遞的 實(shí)現(xiàn)方法,其特征在于CncTarget類以及CinputFormCtrl類擁有函數(shù) OnCmdMsg 。
6、 根據(jù)權(quán)利要求5所述的一種數(shù)控機(jī)床控制軟件界面消息傳遞的實(shí)現(xiàn)方 法,其特征在于界面框架代碼中的消息處理函數(shù)OnCmdMsg中依次調(diào)用等 待響應(yīng)的對象鏈表中對象的函數(shù)OnCmdMsg。
全文摘要
本發(fā)明提供一種數(shù)控機(jī)床控制軟件界面?zhèn)鬟f消息的實(shí)現(xiàn)方法,消息經(jīng)過基于微軟基礎(chǔ)類庫MFC的消息處理機(jī)制消息進(jìn)入函數(shù)窗口處理函數(shù)AfxWndProc;再進(jìn)入窗口回調(diào)函數(shù)AfxCallWndProc;再進(jìn)入發(fā)送消息的回調(diào)函數(shù)CWnd::WindowProc;再進(jìn)入消息映射函數(shù)CWnd::OnWndMsg;再進(jìn)入CWnd::OnCommand從基類調(diào)用起源類,在其中調(diào)用消息映射CCmdTarget類中的消息傳遞OnCmdMsg函數(shù);處理的消息經(jīng)過消息路由機(jī)制。本發(fā)明的方法,基于MFC建立一套消息機(jī)制,響應(yīng)各種不同的消息的類,從而實(shí)現(xiàn)數(shù)控機(jī)床控制軟件界面消息啟動內(nèi)核功能,實(shí)現(xiàn)將不同型號的數(shù)控機(jī)床的多變的界面同固定的內(nèi)核相互聯(lián)系。
文檔編號G05B19/18GK101615019SQ200910055729
公開日2009年12月30日 申請日期2009年7月31日 優(yōu)先權(quán)日2009年7月31日
發(fā)明者宋秀龍, 鄭之開 申請人:上海奈凱電子科技有限公司;上海維宏電子科技有限公司