您的位置:网站首页 > CAM

在Pro/ENGINEER 4.0中利用VC2005定制加工刀具库

时间:2011-02-28 10:31:32 来源:

  对于Pro/ENGINEER的二次开发随着相关的软件版本的更新,涉及到了开发工具种类和相关设置以及其不同版本与Pro/ENGINEER的相互兼容问题。就开发工具VC而言,对于Pro/ENGINEER 2000i、2001、Wildfire 2.0只能用VC++6.0,而Pro/ENGINEER 3.0只能用VC.NET 2003,最新版本的Pro/ENGINEER 4.0只能用VC 2005。

  就开发工具种类而言,明显的变化是在Pro/ENGINEER 4.0提供了VB的支持,包括VB 2005.net以及类似于word、excel的VBA,并且函数比较全,而且完全基于类的方法。对于Pro/TOOLKIT,它是PTC提供用于对Pro/ENGINEER进行二次开发的有效工具。Pro/TOOLKIT提供了大量的C语言函数,帮助我们利用C语言编程来增加Pro/ENGINEER的功能。

  本文应用VC 2005结合Pro/ENGINEER 4.0的功能模块Pro/TOOLKIT进行二次开发,通过给Pro/ENGINEER中添加菜单来访问外部刀具库,对数控加工过程中刀具参数实现文件化操作,解决Pro/ENGINEER在NC序列设置刀具的设定中需要逐个输入刀具参数的问题。

  一、总体方案

  Pro/TOOLKIT并不提供对MFC的支持,利用MFC强大功能实现对话框的开发。其与刀具数据库的连接必须运用通信方式实现,应用程序可使用DLL动态链接库文件实现。

  采用VC 2005编写动态连接库访问数据库,最后编写与Pro/TOOLKIT的接口,然后在Pro/ENGINEER系统中加载Pro/TOOLKIT应用程序。

  利用VC 2005提供的MFC开发人机交互界面,它能向用户提供图形与文字共存的可视化环境,使操作自然、简便和快速,并且设计、调试及修改都比较方便,技术也比较成熟。

  这里采用了Access数据库作为刀具库的数据源,以ODBC作为接口,数据库的调用、编写简单,在VC 2005中可直接调用。

  二、程序的编制

  1.建立刀具库并设置数据源

  在Pro/NC加工中,主要加工类型为铣削和车削,还能进行线切割。以铣削为例,对工件进行曲面铣削中采用的端铣刀刀具设定对话框为例,如图1所示。

  

  由此,我们可以根据对话框界面所需输入参数的要求确定数据库中一个表格的字段个数,如图2所示。

  

  根据常用的端铣刀数据建立数据库表,数据库名称为铣削刀具库.mdb。然后对数据源进行设定:在Windows系统中的控制面板→管理工具→数据源选项(ODBC)→用户DSN,设置添加数据源驱动程序,Driver do Microsoft Access,数据源名称为milling,最后指定到铣削刀具库的端铣刀数据表。

  2.MFC程序1sjk.dll的编写

  (1)添加刀具库类CDaoju,建立MFC数据库接口在VC 2005开发环境中通过菜单项目→添加→MFC ODBC,使用者来新建一个基于CRecordset的类(CDaoju)映射于已经建好的数据库表,即选择前面已注册好的ODBC数据源车刀,再选择表(para),完成后程序自动加入代码,从而获得了可以应用的表格字段。

  (2)刀具库显示对话框的设计

  1)创建对话框资源:在VC 2005开发环境中通过菜单项目→添加→资源→Dialog→新建生成新的对话框。

  2)在对话框上添加一个列表控件,右击列表控件设定其属性中外观,查看(View)生成报告(Report)。

  3)双击对话框创建基于该对话框的类(cshow),自动生成CDialog派生类定义的头文件和相应的实现文件。

  4)双击列表控件,给列表控件添加成员变量m_mcutter。

  5)右击基于对话框的类,点击添加→函数,给出相应的对话框初始函数OnInitDialog()。

  BOOL CDBDlg::OnInitDialog()

  {

  …

  Chuangjiankongbiao(); //建立表

  …

  str = m _mcut.

  GetDefaultConnect(); //得到字符串

  “ODBC;DSN=Milling”

  str+=m_mcut.

  GetDefaultSQL(); //得到总的字符为

  ODBC;DSN=Milling[端铣刀]

  SetWindowText(str); //设置

  窗体的名称

  create=true;

  Huodeshuju();

  return TRUE;

  }

  6)在类视图中选中CDBDlg,右击添加函数Chuangjiankongbiao()和函数Huodeshuju()。

  void CDBDlg::Chuangjiankongbiao()

  {

  m_mcutter.InsertColumn(0,”

  刀具类型”,LVCFMT_CENTER,

  138,0); //插入一列

  …

  m_mcutter.InsertColumn(8,”

  长度”,LVCFMT_CENTER,66,

  0);

  }

  void CDBDlg::Huodeshuju()

  {

  …

  {

  pd.iItem=k;

  pd.iSubItem=0;

  pd.pszText=m_mcut.m_TOOL_

  TYPE.LockBuffer();

  m_mcutter.InsertItem(&pd);

  …

  pd.iSubItem=8;

  printf(pd.pszText,"%10.3f",

  m_mcut.m_Length);

  m_mcutter.SetItem(&pd);

  m_mcut.MoveNext();

  }

  }

  7)在对话框中,使列表控件在处于选中右击,给该控件添加右键单击消息NM_RCLICK,

  应给出相应的消息函数,功能是弹出输出数据的命令菜单,如图3所示。

  

  下面是消息函数主要代码。

  void CDBDlg::OnNMRcli

  ckList1(NMHDR*pNMHDR,

  LRESULT*pResult)

  {

  currentselect=m_mcutter.

  GetHotItem(); //获得当前击活项的索引值

  if(currentselect==-1) return;

  CMenu me;

  CPoint po;

  GetCursorPos(&po); //获得鼠标的屏幕坐标

  me.LoadMenu(IDR_MENU1); //载入菜单

  CMenu*pr=me.GetSubMenu(0); //获取指向弹出菜单的指针,位置值开始为0;

  pr->TrackPopupMenu(TPM_

  LEFTALIGN|TPM_RIGHTBUTTON,

  po.x,po.y,this,NULL);

  *pResult=0;

  }

  8)插入一个菜单资源,单击编辑区菜单区域,输入“数据输出”。在其下添加1个子菜单,标明为:数据输出,如图4所示。

  

  右击下面的子菜单,在弹出的菜单中选添加事件处理程序,在弹出的对话框中消息类型选择COMMAND,对应给出相应的消息函数。用此实现右击弹出的菜单中的数据输出命令,如图5所示。

  

  下面是消息函数主要代码。

  void CDBDlg::OnIdOutput()

  {

  …

  filepath.m_ofn.lpstrFilter="*.

  tpm*.tpm";

  filepath.m_ofn.

  lpstrDefExt="tpm";

  …

  str.LoadString(3);

  fprintf(file,"%stt%s%c",str,

  m_mcut.m_TOOL_TYPE,end);

  …

  str.LoadString(1);

  fprintf(file,"%stt%s%c",str,

  m_mcut.m_Length,end);

  …

  }

  9)插入一个字串表资源,设置ID值及标题,和输出的Pro/ENGINEER刀具参数文件相一致,

  10)在Daojukubaogao.h头文件中添加包含头文件"Daojuku.h",并添加变量。

  CDaojuku m_mcut;

  bool create;

  int currentselect;

  11)在Daojukubaogao.cpp文件中,对create和currentselect进行初始化,添加程序语句。

  create=false; //判断表是否创建

  currentselect=0; //得到列表中当前项的索引值

  12)在Daojukubaogao.cpp文件中添加导出函数,以提供给1candan.dll来进行调用。

  __declspec(dllexport) void

  datacreate()

  {

  AFX_MANAGE_STATE(AfxGet

  StaticModuleState());

  CDBDlg my;

  my.DoModal();

  }

  3.Pro/TOOLKIT程序1candan.dll的编写

  该步骤的主要任务是实现菜单的添加,动作函数的编写及与MFC程序接口的通信。

  (1)菜单文件的编写

  用记事本编写菜单信息文件daoju.txt,定义菜单项和菜单项提示等信息,并将其保存在开发程序目录下的Text文件夹里。下面是该程序文件的主要内容。

  %0s

  #

  #

  Mill Library

  Mill Library

  铣削刀具库

  #

  Create Mill files

  Create Mill files

  端铣刀刀具库

  #

  (2)1candan.cpp程序的编制

  依照信息文件设置菜单按钮动作,创建菜单和菜单按钮等,根据需要向菜单栏里添加所需的菜单。主要的程序语句如下。

  ProMenubarMenuAdd("Mill

  Library","Mill library","Utilities",

  PRO_B_TRUE,mf); //在Utilities的后面添加菜单按钮Mill library

  if(ProCmdActionAdd("Create Mill

  files",(uiCmdCmdActFn)createfile,

  uiProeSpinImmediate,

  TestAccessDefault,PRO_B_

  TRUE,PRO_B_TRUE,&mymenu_

  id)==PRO_TK_NO_ERROR);//添加菜单命令按钮Create Mill files调用createfile函数ProMenubarmenuPushbuttonAdd("Mill Library","Create Mill files","Create Mill files","Create Mill files",NULL,PRO_B_TRUE,mymenu_id,mf);//菜单按钮Mill

  library下面添加弹出菜单Create Mill

  files

  ...

  按钮动作后调用刀具库管理对话框用的函数的编写:

  int createfile()

  {

  AFX_MANAGE_STATE(AfxGet

  StaticModuleState());

  datacreate();

  return 1;

  }

  (3)程序的编译

  程序源代码编写完成后要进行编译,编译环境中和1sjk.dll基本相同。不同之处:一是Pro/Tookit库文件所在的路径另外加上sjk.lib所在的目录,二是在配置属性下的链接器项所属的输入中附加依赖项设置为wsock32.lib、mpr.lib、psapi.lib、protk_dll.lib、1sjk.lib和LIBCMT.lib。

  (4)通信接口的关键设置

  成功运行protoolkit程序时,必须将1sjk.dll拷贝到Pro/ENGINEER的起动

  目录中。

  (5)应用程序的注册和运行

  要使编译完成的程序能够集成到Pro/ENGINEER系统中并运行,需要创建protk.dat注册文件,用该文件进行应用程序的注册。

  下面是注册文件主要内容。

  NAME铣刀库

  EXEC_FILE..Debug1caidan.dll

  TEXT_DIR..text

  …

  注册可把注册文件放在Pro/ENGINEER的起动目录下,运行

  Pro/ENGINEER自动加载。在Pro/ENGINEER系统菜单出现数控刀具库菜单,执行下面的端铣刀刀具库命令,出现刀具数据的表格对话框,如图7所示。

  

  三、结论

  (1)对于Pro/ENGINEER二次开发工具Pro/TOOLKIT,用户可以结合自己的产品和实际情况定制Pro/ENGINEER系统。按上述编制整个系统的各个文件后,每次起动Pro/ENGINEER后,外接刀具库程序可自动加载到Pro/ENGINEER系统上。

  (2)Pro/TOOLKIT提供用户界面接口的开发,运用DLL可实现在Pro/ENGINEER中调用MFC对话框实现数据库的访问功能。程序对Pro/ENGINEER刀具管理功能进行了扩展,从而完善了刀具资源的管理。