您的位置:网站首页 > CAD新闻

THCAPP中项目型插件系统的设计与实现

时间:2011-02-26 19:31:00 来源:

1、项目型插件系统的研究背景

计算机辅助工艺设计软件(CAPP)在国内发展已有二十多年的历史,但由于工艺过程复杂而且充满个性化,它一直没有得到很好的发展。京渝天河计算机软件技术有限责任公司推出的智能化、集成化工艺设计平台系统――THCAPP,以其完善的系统需求定义和先进的系统设计,受到了用户的广泛好评。现在使用THCAPP软件的用户已经遍布全国。

随着软件工程在产品的研发中广泛应用,THCAPP软件也步入了快速发展阶段:用户数量不断增加,功能不断丰富、完善。但是,快速发展的THCAPP软件不可避免的出现了以下这个问题:创立于十年前的THCAPP软件的原型已经被市场广泛认可,后续版本的开发工作只是在这个原型的基础上进行功能的扩展。为了在保证与THCAPP以前版本软件兼容的前提下,弥补软件原型在灵活性和扩展性方面的不足,我们有必要在THCAPP软件中引入“框架+插件”这样一种结构的构建模式。

在采用THCAPP软件的企业用户中,由于各个企业的规模不同,开发产品的差异,造成了用户需求的千差万别,不同企业之间的需求甚至会出现矛盾的情况。为了满足用户的各种需求,使产品具有顽强的生命力,只有引入“框架+插件” 结构,使软件产品在整体上是融合的,在各个功能上具有相对独立性,而这些独立的功能能够进行单独的开发,形成具有完善功能的独立模块,并且能够很好的融入到整个软件产品中的方法是解决软件原型风险最好的办法。

2、插件系统分析

现在,我们经常使用的一些国外公司或个人开发的优秀软件产品都是采用的

“框架+插件”这种体系结构,其中最著名的软件包括:AutoCAD、 PhotoShop和ACDSee。分析一下这些软件的开发模型:整个软件产品为一个良好的框架,具有完成软件产品应用的基本功能以及插件管理功能,负责为插件的运行提供一个整体的可靠的运行环境;而高级的功能则通过各个独立的插件来完成。插件是在自己要求的运行环境中,具有独立,完整功能的模块。产品的框架部分可以认为是一个插件的运行平台,插件部分除了实现具体功能外还要按照平台的要求实现标准接口,保证插件在平台内正确运行;平台则通过通用的方法调用不同插件来实现功能的扩展。这样,只要框架的结构是良好和合理的,能够适应未来的变化,那么市场的变化带来的各种新的需求就可以采用开发实现相应功能的新插件来实现。软件的生命力就有了保证。

国外软件采用的“框架+插件”结构代表着软件行业的主流技术,不同公司的不同产品,甚至同一个公司的不同产品之间,都会用不同的插件实现不同的功能。THCAPP插件系统的设计思路就是借鉴这种“框架+插件” 结构,在THCAPP程序的不同对象中调用不同的插件,实现特定范围的功能。

过多的插件会增加用户使用THCAPP软件的难度;而且,一种功能插件会同时对多个对象产生不同的影响。所以得出以下结论:在THCAPP软件中,应该将所有的插件由单独的系统进行统一的管理,实现插件的功能查看,产品隶属,插件注册和插件注销等功能,简化用户的操作。

鉴于以上的情况,需要这样一种解决方案:通过提供插件模板对插件接口进行规范;通过简单的开发基础培训使用户具有进行简单的编写代码的能力;通过针对THCAPP软件中的某种单一的功能,封装出THCAPP功能组件,同样通过培训让用户掌握相关功能组件的使用方法,让那个用户自己编写符合自己要求的插件,由插件系统统一管理。这样,即在THCAPP软件中实现了“框架+插件”的结构,保证了软件的可扩展性,又通过培训用户自主开发插件的模式,规避了维护插件的风险,节省了双方的资金,提高了软件的竞争力,使公司和用户实现“双赢”成为了可能。

3、项目型插件系统的目标

THCAPP中进行“框架+插件”的结构改造,引入项目型插件系统的目的包含以下几个方面:

l 完成THCAPP插件系统的开发工作,实现插件的浏览、注册/注销、二次注册、调用、以及与系统交互等功能。实现“框架+插件”的系统结构。

l 完成项目型插件系统的插件模板源代码以及示例插件程序的源代码的编写工作。插件模板必须具有简单、方便、易于维护的特征,争取做到:让没有编程经验的用户通过简单的培训就能编写满足自己需求的插件。

l 完成集成型插件系统组件DLL的开发工作,提交动态链接库文件:接口文件、以及运行库文件。开发与特定PDM软件集成的示例插件,证实集成型插件系统的可行性。

l 完成功能组件的开发工作,涵盖THCAPP软件中一些常用的功能(如:工艺文件的创建、筛选、删除等)。从底层支持插件系统功能的全面性。

通过对THCAPP软件的使用用户——国内大、中、小型制造企业的工艺工作进行的缜密调研,结果,几乎所有的用户都对这种简单的软件升级方式表示了期待。但是,不同的用户,由于他们编程技术水平与需求功能的复杂程度有很大的差异,必须制定一套相对简单、实用的插件开发规则,以方便用户进行自定义插件的开发工作,便于插件系统的推广。

在实施了THCAPP的企业用户群中,每个企业每年都会提出一些有关功能实用性、以及操作简便性方面的要求。这些要求一般都是用户根据自己的特殊状况提出的,不同用户提出的要求甚至是对立的,我们很难从中总结出通用性的需求,供新版本的CAPP软件进行开发工作。

项目型插件系统的主要功能就是扩展THCAPP的功能,通过用户自己开发出的符合自己企业特色、实现自己功能要求的插件,弥补THCAPP软件在可操作性方面的不足。

4、插件系统关键技术

4.1 系统总体设计方案

为保证与以前版本的THCAPP软件的兼容性,插件系统应该是独立于THCAPP主程序,但通过被THCAPP主程序调用,才能实现其功能的动态链接库组件。如图1所示:

newmaker.com
图1 插件系统总体设计方案

插件系统包含插件管理模块和多个功能插件。

l 插件管理模块的功能是实现各功能插件的列表显示、功能查看和二次注册的调用,不负责实现任何插件的实际功能;

l 功能插件由THCAPP主程序的用户为实现特定的功能,在我们提供的插件模板的基础上自主开发的COM组件,除了实现各自的需求功能外,所有通过插件模板生成的插件还需要具有以下的功能:向插件管理模块反馈插件信息、进行系统注册与反注册、通过消息机制与CAPP主程序进行通信。

项目型插件系统的结构,如图2所示:

newmaker.com
图2 项目型插件系统结构

u接口层:

接口层是整个插件系统的入口,通过插件模板的设计,系统只需要获取少量的传入数据信息,通过执行插件,就会通过一定的规则,向主程序传递规范的传出数据,实现插件的功能。

接口层实现插件管理功能,包括插件的引入、删除、插件的列表选择、以及运行选定的插件。

u插件层

插件层就是用户通过插件模板开发出的所有插件,插件模板实现了系统注册模块中插件的注册与反注册的工作;规范了用户参数的类型;并且通过调用API函数,定义了一些常用的THCAPP的消息常数(比如刷新消息等),供用户插件使用。

用户在开发自己的插件时,需要将插件相关信息设置到插件模板中的插件信息反馈模块的特定常量中,以便接口调用。

u数据层

数据层的作用是由插件刷新THCAPP主程序运行的Oracle数据库中的数据,真正实现插件的功能。包括参数规范模块、CAPP功能组件和数据操作模块。

通过CAPP功能组件调用数据操作模块,操作底层Oracle数据库中的数据,避免了用户直接操作数据带来的风险,节约了培训成本与用户的工作。

4.2 关键技术及解决途径

l插件的识别问题

插件采用动态链接库(DLL)文件的形式,在一台机器的成百上千的DLL文件,如何识别指定的DLL文件是否为插件系统的插件,能够被插件系统调用,就成为插件系统设计能否成功的前提条件。

插件系统中设计的解决思路是:在插件系统中,除了对插件进行系统注册外,还得通过管理模块对插件进行特定的二次注册,这样就可以解决插件的识别问题。

对于项目型插件系统,在注册表的指定位置设置子键,将插件信息(主要是VB程序创建组件对象时需要的组件名称和库名称)记录到这个子键下,插件管理组件显示插件列表时,从这个位置读取所有插件的信息显示。运行插件时,也是从读取插件信息创建插件对象。

对于集成型插件系统,在THCAPP主程序的配置文件中,记录所有插件的GUID值,由于插件都是从系统的基接口中派生的,所以,通过GUID值和基接口类型,就可以运行插件了。

l插件的运行问题

读取插件信息后,如何正确的运行插件也是一个需要解决的关键技术。

对于项目型插件系统,通过插件模板,规范插件的接口。创建插件对象后,调用特定的接口,就可以运行插件了。

对于集成型插件系统,由于是与THCAPP主程序进行无缝集成,在对象层接口对应的MFC类文件中,定义相关的接口对象,通过激发事件或传递消息运行插件。

l插件的通信问题

插件与插件系统、插件与THCAPP主程序、甚至插件与插件之间都需要进行数据交互或消息传递。

在插件系统中,定义一些通用的消息。在接收消息时,遍历这些消息,分别实现这些消息的响应函数就可以了。

插件的通信能力是插件系统必不可少的功能。通过消息传递模块或消息接口定义通用消息,为以后版本中,通用消息的扩展提供了可能。

5、示例程序

THCAPP项目型插件系统包括插件维护模块和插件两大部分。插件维护模块的功能是:添加、维护、删除、运行插件,标准DLL组件,可以被CAPP或其他应用程序调用;而插件就是实现某些特定的功能。

调用THCAPP二次开发插件系统,首先会运行“插件维护模块”,显示“插件管理”管理对话框,如图4所示:

newmaker.com

默认的,“插件管理”窗口会列出天河公司提供的公用插件,用户根据插件模板自己开发的插件,通过第一次的注册后也会出现在这个列表中,供用户选择使用。

选择某个插件,单击“下一步”按钮就运行插件对应的DLL文件。实现这一步的前提就是用户使用天河公司提供的项目型插件模板进行自己插件的开发工作,并不修改模板的接口,破坏兼容性。

下面将以“批量修改工艺文件状态”这个插件作为实例,简单的讲讲项目型插件的创建方法。

l 详细的系统设计

虽然,一般看来系统设计工作与具体的软件开发没有多大的关联,但是详细、完善的系统设计可以让你的开发工作少走很多弯路。

“批量修改工艺文件状态”插件的实现目标,就是将指定节点下的所有工艺文件全部修改到一种状态。在这期间,需要运行插件的用户设置修改后工艺文件状态参数,并且设定是否需要包含子节点中的工艺文件。插件要求提供指定节点下工艺文件的现有状态,供用户浏览;还要包含不能进行“状态修改”操作的工艺文件的列表。

通过上述的系统分析,得出至少需要三步向导操作才能实现需求。下面就是进行代码的编写工作了。

l 在插件模板上开发新的插件

插件模板是由天河公司提供给用户使用的在项目型插件系统中开发自定义插件的工具。在THCAPP的安装路径下,有模板的压缩包文件。

复制插件模板,用VB打开模板工程,修改工程名和接口名,在图4所示的“插件管理”窗口中,进行插件注册操作,需要用到修改后的工程名和接口名,他们是插件组件的唯一标识,非常重要,不能随便修改。如5图所示,“批量修改工艺文件状态”插件的工程名变为“THEditFilesStateLib”、接口名变为“ITHEditFilesState”。

newmaker.com
插件工程

在窗体文件中,复制“picDlgBck”控件数组,在这个插件中复制三页,在每一页放置不同的控件。并编写与这些控件有关的代码。

第一页如图6所示,用以设置修改后工艺文件的状态,以及“是否包含子节点中的工艺文件”、“是否显示工艺文件信息”的状态参数。

newmaker.com
插件第一页

第二页如图7所示,添加“ListView”列表控件,用以显示指定节点下包含的工艺文件的信息(名称、创建者、当前状态)。如果在第一页设置了“包含子节点中的工艺文件”状态,则需要显示指定节点下的所有文件信息。

newmaker.com
插件第二页

第三页如图8所示,功能是提示第二页显示的工艺文件是否能进行修改工艺文件状态的操作,图8中表示所有工艺文件的状态都可以被修改成图6中指定的状态。不能进行修改的工艺文件会被显示在提示之下的“ListView”控件中。

newmaker.com
插件第三页

最后在“完成”按钮的单击事件中,编写实现需求的代码,一般地,这需要调用天河公司为二次开发插件提供的各种组件的接口功能函数。实现修改工艺文件状态的功能比较简单,只要遍历用户选择的工艺文件,依次调用“THCAPPPDMDEVLib”组件的“THCAPPNDO”接口的“ChangeFileState”函数就可以了。