专利名称:数控机床控制软件界面消息传递的实现方法
技术领域:
本发明属于数控机床软件应用领域,特别涉及一种数控机床控制软件界 面消息传递的实现方法。
背景技术:
制造业是国民经济的基础产业,制造业的水平高低是衡量一个国家工业 发达程度的重要标志。数控机床质量水平的高低,关系着国家制造业水平的 高低。作为数控机床的核心部分,控制软件的好坏直接影响了数控机床的性 能和销量。
然而不同厂家,不同型号的数控机床对软件的功能、界面都有不同要求, 如果分别开发则成本太高。所以我们需要将软件相对固定的模块与多变的模 块相分离,尤其是内核功能调用与界面。
然而分离之后界面同内核如何建立联系就成为亟待解决的问题。我们需 要一种机制来使多变的界面同固定的内核相互联系。
发明内容
本发明所要解决的技术问题是提供一种数控机床控制软件界面消息传递
的实现方法,基于MFC建立一套消息机制,响应各种不同的消息的类,从而 实现界面消息启动内核功能。
为了解决上述问题,本发明的技术方案是这样的-
消息经过基于微软基础类库MFC的消息处理机制消息进入函数窗口处 理函数AfkWndProc;再进入窗口回调函数AfkCallWndProc;再进入发送消息 的回调函数CWnd::WindowProc;再进入消息映射函数CWnd::OnWndMsg; 再进入CWnd::OnCommand从基类调用起源类,在其中调用消息映射 CCmdTarget类中的消息传递OnCmdMsg函数。处理的消息经过消息路由机制。
所述的消息路由机制是将响应处理函数分别分装在多个单独的类中,当 类生成一个对象,该对象被装入链表,通过该链表得到需要接收的消息的对 象。
所述的类派生于CncTarget,维护CncTarget类对象的链表。 所述的类派生于CinputFormCtrl,维护CinputFormCtrl类对象的链表。 CncTarget类以及CinputFormCtrl类拥有函数OnCmdMsg。 界面框架代码中的消息处理函数OnCmdMsg中依次调用等待响应的对象
链表中对象的函数OnCmdMsg。
本发明的有益效果是提供基于MFC建立一套消息机制,响应各种不同的
消息的类,从而实现界面消息启动内核功能,实现将不同型号的数控机床的
多变的界面同固定的内核相互联系。
图1是本发明的消息传递的流程示意图。
具体实施例方式
为了使本发明的技术手段、创作特征、达成目的与功效易于明白了解, 下面结合具体图示,进一步阐述本发明。
如图1所示,本发明的一种数控机床控制软件界面消息传递的实现方法 的实施例,消息经过基于MFC的消息处理机制消息进入函数AfkWndProc; 再进入 AfkCallWndProc ; 再进入 CWnd::WindowProc ; 再进入 CWnd::OnWndMsg;再进入CWnd::OnCommand,在其中调用CCmdTarget类 中的OnCmdMsg函数。査看CCmdTarget类,发现从CCmdTarget派生的类都 可以处理命令消息并且OnCmdMsg是个虚函数,也就是说派生类可以通过重 写该函数来实现命令消息在各个类中串行直到响应。
处理的消息经过消息路由机制。消息路由机制是将响应处理函数分别分 装在多个单独的类中,当类生成一个对象,该对象被装入链表,通过该链表 得到需要接收的消息的对象。所述的类派生于CncTarget或者CinputFormCtrl,维护CncTarget类或者CinputFormCtrl类对象的链表。
CncTarget类和CinputFormCtrl类有两个共同的特点, 一是它们都直接或 通过继承间接拥有虚函数OnCmdMsg; 二是它们都维护一个该类对象的链表, 每当派生类生成一个对象,所调用的基类构造函数就将该对象装入链表,这 样就可以通过该链表得到需要接收消息的对象。
最后在界面框架代码中的消息处理函数OnCmdMsg中就可以依次调用等 待响应的对象链表中对象的消息处理函数OnCmdMsg,从而实现消息路由机 制。
通过将响应处理分散在多个Target类中(每个Target分配100个消息号), 我们可以在不更改其它代码的情况下添加Target,来增加新响应新功能,大大 增加了软件扩展的灵活度。
下面将具体说明如何设计CNcTarge、 CinputFormCtrl类Target消息响应
类及展示消息传递过程。
CNcTarget类结构CNcTarget类继承自CCmdTarget,所以它有一个虚函 数OnCmdMsg; CNcTarget类中定义了一个static变量m—listNcTarget,它的类 型是CList<CNcTarget*, CNcTarget*〉,该静态变量用来保存所有CNcTarget派 生类的对象。
CI叩utFormCtrl类结构CI叩utFormCtrl类继承自CThemeForm类,而 CThemeForm包含一个虚函数OnCmdMsg; CinputFormCtrl类中定义了一个 static 变量 m—listlnputFormCtrl , 类型是 CList<CInputFormCtrl*, CInputFormCtrl*>,该静态变量用来保存所有CinputFormCtrl派生类的对象。
Target类Target类是指继承自CNcTarget的类,用来处理消息。
为将消息出来分散在多个类中以便于灵活扩展,以类CNcIoTarget为例来 对Target类加以说明。
首先要为处理IO响应的消息分配消息号,范围为[41400, 41500]
snum
IDCMD—NCIOTARGET—BASE = 41400, IDC函一TOOL一DETRUSION,IDCMD—SPIND—DISENTANGLE—TOOL,
其次在类中要包含相应的消息处理函数
afk一msg void OnDetrusionTool();
afk—msg void OnUpdateDetrusionTool(CCmdUI* pCmdUI」; afk一msg void OnSpindDisentangleTool();
afk—msg void OnUpdateSpindDisentangleTool(CCmdUP pCmdUI_);
最后再加上对应数据结构,辅助函数等内容,这样类NcIoTarget的对象 就可以处理自己所管辖的消息。
至此,我们已经拥有了处理消息的模块,接下来就需要将截获的消息传 送到相应模块。我们在窗口类CNcFrameWnd的OnCmdMsg函数中来完成这 个功能。如下列代码所示
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对象链表获得被创建的消息处理对象,依次向其发送消息。使得Target最先获取处理命令消息的权利,如果我 们自己的消息处理类没有处理该消息,则在最后发送给标准MFC对象处理。 以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行 业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明 书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下本 发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围 内。本发明要求的保护范围由所附的权利要求书及其等同物界定。
权利要求
1、一种数控机床控制软件界面消息传递的实现方法,其特征在于消息经过基于微软基础类库MFC的消息处理机制消息进入函数窗口处理函数AfxWndProc;再进入窗口回调函数AfxCallWndProc;再进入发送消息的回调函数CWnd::WindowProc;再进入消息映射函数CWnd::OnWndMsg;再进入CWnd::OnCommand从基类调用起源类,在其中调用消息映射CCmdTarget类中的消息传递OnCmdMsg函数。处理的消息经过消息路由机制。
2、 根据权利要求1所述的一种数控机床控制软件界面消息传递的实现方 法,其特征在于所述的消息路由机制是将响应处理函数分别分装在多个单 独的类中,当类生成一个对象,该对象被装入链表,通过该链表得到需要接 收的消息的对象。
3、 根据权利要求2所述的一种数控机床控制软件界面消息传递的实现方 法,其特征在于所述的类派生于CncTarget,维护CncTarget类对象的链表。
4、 根据权利要求2所述的一种数控机床控制软件界面消息传递的实现方 法,其特征在于所述的类派生于CinputFormCtrl,维护CinputFormCtrl类对象的链表。
5、 根据权利要求3或者4所述的一种数控机床控制软件界面消息传递的 实现方法,其特征在于CncTarget类以及CinputFormCtrl类拥有函数 OnCmdMsg 。
6、 根据权利要求5所述的一种数控机床控制软件界面消息传递的实现方 法,其特征在于界面框架代码中的消息处理函数OnCmdMsg中依次调用等 待响应的对象链表中对象的函数OnCmdMsg。
全文摘要
本发明提供一种数控机床控制软件界面传递消息的实现方法,消息经过基于微软基础类库MFC的消息处理机制消息进入函数窗口处理函数AfxWndProc;再进入窗口回调函数AfxCallWndProc;再进入发送消息的回调函数CWnd::WindowProc;再进入消息映射函数CWnd::OnWndMsg;再进入CWnd::OnCommand从基类调用起源类,在其中调用消息映射CCmdTarget类中的消息传递OnCmdMsg函数;处理的消息经过消息路由机制。本发明的方法,基于MFC建立一套消息机制,响应各种不同的消息的类,从而实现数控机床控制软件界面消息启动内核功能,实现将不同型号的数控机床的多变的界面同固定的内核相互联系。
文档编号G05B19/18GK101615019SQ200910055729
公开日2009年12月30日 申请日期2009年7月31日 优先权日2009年7月31日
发明者宋秀龙, 郑之开 申请人:上海奈凯电子科技有限公司;上海维宏电子科技有限公司