杨 旭, 周德俭,2
(1. 西安电子科技大学, 陕西 西安 710071; 2. 桂林电子科技大学, 广西 桂林 541004)
UG是一款带有二次开发功能的高端CAD/CAE/CAM软件,具有建模、分析、仿真等多个强大功能,在航空航天、数控加工和汽车等多个领域有着广泛的应用。随着设计和制造信息化、柔性化、智能化的发展,UG自带的功能已无法完全满足用户个性化的要求,因此,根据需求对UG进行二次开发,拓展更多自定义的功能,有着较强的现实意义[1]。电缆布线及检测已逐步由人工布线和检测过渡到自动化、智能化布线和检测,针对特定的功能需求,前人已研究出了一些可靠的检测系统,但在智能化、信息化等方向还有广阔的研究前景。本文以UG10.0为开发平台的“电缆自动布线及自动检测程序”设计为例,分析了在自动布线和检测领域进行UG二次开发的基本流程,重点探讨了其菜单和对话框的设计过程。
UG二次开发是通过UG 平台上的UG OPEN 来完成的。UG OPEN为二次开发提供了各种工具集、函数集和接口等,包括4个常用的工具:OPEN GRIP、OPENAPI、UI styler和MENUSCRIP。OPEN GRIP是UG内部自带的编程语言,易于理解,在参数化建模等特定方面具有较多的应用,但其局限性是不如C语言等外部语言那样具有全面的功能和灵活性,在老版本的UG二次开发中应用较多;OPEN API具有强大的对外接口功能,它为用户提供了比OPEN GRIP更多的函数,用户在使用时可通过C或C++等来实现这些函数的调用,并与VC++集成,通过VC++环境来实现文件的编译和连接,因此,OPEN API比OPEN GRIP更加高效,功能也更强大;UI styler是UG提供的创建对话框的工具,用户可根据需要自行设计各种风格的对话框并实现与图形界面的交互,其代码生成可以根据需要选择VB、C++、Java、Python、VB.NET for SNAP等多种语言;MENUSCRIP是二次开发UG菜单的工具,可以添加用户自定义的菜单,并通过在菜单里调用对话框文件,与用户自己创建的对话框集成[2-3]。
UG的二次开发往往是通过综合应用以上4个常用开发工具中的多个工具,并融入互联网技术、通信技术、数据库技术等来实现的,可应用于UG运行环境的定制、能以UG为平台实现特定功能的专业软件的开发和提供与外部环境集成的接口等多个方面。
目前,随着机械工业数字化、信息化的飞速发展,UG二次开发在机械设计、制造、检测等多个方面得到了广泛的应用。现阶段在构建零件库系统和系统数字化检测2方面应用较多,特别是伴随着基于模型定义(Model Based Definition,MBD)技术的发展,设计和制造过程中数字化已日益成熟,在很多环节,直接在3D软件中基于3D模型和系统的标注以及可视化技术正逐渐替代传统的2D图纸,在航空航天领域尤其突出[4-6]。因此,一方面,UG二次开发的应用并不仅限于传统的零件参数化设计,还包括零件库系统的开发,例如:文献[7]面向机电行业,基于.NET二次开发出了网络零件库系统,综合应用了通信技术和互联网技术,可在网络环境下实现零件库系统的查询、在线编辑和自动刷新等功能;另一方面,通过二次开发,在3D软件里直接进行模型和系统的自动化、智能化检测,也正在逐步代替原先的人工检测,这就要求软件能实现检测对象的信息自动提取和自动检测功能,例如:文献[8]基于.NET二次开发出了检测信息自动提取功能,实现了检测所需的所有几何信息和非几何信息的准确和无遗漏提取,并能规范地输出这些信息,为后续的自动检测环节提供了数据支撑;文献[9]面向航空行业,基于VC++二次开发出了MBD自动检测系统,通过将OPEN API与MFC库相结合的方式,使UG OPEN API的强大图形操作功能和MFC丰富的函数库相结合,最终开发出了高效、可靠的自动检测系统。
由于用到的电缆根据结构的不同可分为A、B、C三类,每一类包括若干型号,同一类各种不同型号的电缆结构相似,只是具体参数不同,因此该“电缆自动布线及自动检测程序”有如下几个模块:
1)进行电缆模型参数化设计,设计出各种自动布线所需的电缆模型,为下一步提供模型基础。故开发“电缆模型参数化设计”子程序,包括“A类电缆参数化设计”、“B类电缆参数化设计”和“C类电缆参数化设计”。
2)使用前一步建立的模型,选用合适的电缆以及对应的欲连接的部件,进行自动布线。故开发“电缆自动布线”子程序,包括“A类电缆自动布线”、“B类电缆自动布线”和“C类电缆自动布线”。
3)对上面自动布线的结果进行检查,以确保力学性能和电学性能等性能要求。也就是检查前面布置完成的电缆空间布置是否合理,包括是否存在空间干涉、最小弯曲半径过小等问题,如果有,会提醒用户,在图形区高亮显示检测出的问题,并附上说明。故开发“布线结果自动检测”子程序,包括“全面检测”、“仅检测长度特征”和“仅检测弯曲半径特征”等。“全面检测”集成了所有的检测规则,使用这个功能可一次性进行所有规则的检测,集成度高;“仅检测长度特征”和“仅检测弯曲半径特征”的针对性强,一次只针对某一类特征进行检查,可重点针对某些规则进行检测。
4)针对电缆参数化设计中用到的模型库、自动布线设计中用到的知识库以及布线结果自动检测用到的知识库,开发“布线数据库”子程序,包括“模型库”、“知识库”和“规则库”3部分,可进行数据库的查询和编辑。
5)开发“帮助”子程序,以帮助用户查看此“电缆自动布线及自动检测程序”的使用方法和注意事项。
2.2.1 菜单开发
开发出一个三级菜单,第一级为电缆自动布线及自动检测程序;第二级包含电缆模型参数化设计、电缆自动布线、布线结果自动检测、布线数据库和帮助;第三级包括所有二级菜单对应的子菜单。菜单开发步骤如下:
第一步,设置系统变量。首先创建二次开发文件夹,在G盘里新建一个文件夹,命名为UG_yxkf,并在此文件夹目录下新建startup、application文件夹。Startup用于存放菜单程序,application用来存放对话框程序。然后,打开“我的电脑”,依次进入“系统属性”、“高级系统设置”、“环境变量”、新建用户变量,其变量名为UGII_USER_DIR,变量值为G:UG_yxkf。二次开发文件夹不一定要在G盘,别的盘也可以,但新建环境变量时变量值一定要与二次开发文件夹的路径一致[10]。
第二步,使用UG/OPEN MENUSCRIPT进行菜单设计。在前面创建的startup文件夹里面新建一个.men文件,即形成一个菜单脚本文件,命名为yangxu_ecka.men,其代码可分为6个部分,各部分具体代码为:
VERSION 120
EDIT UG_GATEWAY_MAIN_MENUBAR
BEFORE UG_HELP
CASCADE_BUTTON yxkf_1
LABEL 电缆自动布线及自动检测程序
END_OF_BEFORE
此部分相当于“申明部分”,指明版本号为VERSION 120,并指明此次开发的程序在刚启动的时候就可以在菜单里找到,以及开发的程序在菜单里面的位置(即在“帮助”程序的前面),并定义一级菜单“电缆自动布线及自动检测程序”,其中CASCADE_BUTTON 用来指明这个菜单是有下拉菜单的那种类型,yxkf_1是标识符, END_OF_BEFORE结束一级菜单的制作。
MENU yxkf_1
CASCADE_BUTTON yxkf_1_1
LABEL 电缆模型参数化设计
CASCADE_BUTTON yxkf_1_2
LABEL 电缆自动布线
CASCADE_BUTTON yxkf_1_3
LABEL 布线结果自动检测
CASCADE_BUTTON yxkf_1_4
LABEL 布线数据库
BUTTON yxkf_1_5
LABEL 帮助
ACTIONS yxkf_0
END_OF_MENU
此部分用来定义5个二级菜单,即“电缆模型参数化设计”、“电缆自动布线”、“布线结果自动检测”、“布线数据库”和“帮助”,以END_OF_MENU结束所有二级菜单的制作。
MENU yxkf_1_1
BUTTON yxkf_1_1_1
LABEL A类电缆参数化设计
ACTIONS yxkf_1_1_1
BUTTON yxkf_1_1_2
LABEL B类电缆参数化设计
ACTIONS yxkf_1_1_2
BUTTON yxkf_1_1_3
LABEL C类电缆参数化设计
ACTIONS yxkf_1_1_3
END_OF_MENU
此部分用来定义“电缆模型参数化设计”二级菜单的三级菜单,即“A类电缆参数化设计”、“B类电缆参数化设计”和“C类电缆参数化设计”,BUTTON表示此菜单下不再有下一级菜单,ACTIONS用来指向对应的对话框文件,以END_OF_MENU结束这些三级菜单的制作。
MENU yxkf_1_2
BUTTON yxkf_1_2_1
LABEL A类电缆自动布线
ACTIONS yxkf_1_2_1
BUTTON yxkf_1_2_2
LABEL B类电缆自动布线
ACTIONS yxkf_1_2_2
BUTTON yxkf_1_2_3
LABEL C类电缆自动布线
ACTIONS yxkf_1_2_3
END_OF_MENU
此部分用来定义“电缆自动布线”二级菜单的三级菜单,即“A类电缆自动布线”、“B类电缆自动布线”和“C类电缆自动布线”,以END_OF_MENU结束这些三级菜单的制作。
MENU yxkf_1_3
BUTTON yxkf_1_3_1
LABEL 全面检测
ACTIONS yxkf_1_3_1
LABEL 仅检测长度特征
ACTIONS yxkf_1_3_2
BUTTON yxkf_1_3_3
LABEL 仅检测弯曲半径特征
ACTIONS yxkf_1_3_3
END_OF_MENU
此部分用来定义“布线结果自动检测”二级菜单的三级菜单,即“全面检测”、“仅检测长度特征”和“仅检测弯曲半径特征”,以END_OF_MENU结束这些三级菜单的制作。
MENU yxkf_1_4
BUTTON yxkf_1_4_1
LABEL 模型库
ACTIONS yxkf_1_4_1
BUTTON yxkf_1_4_2
LABEL 知识库
ACTIONS yxkf_1_4_2
BUTTON yxkf_1_4_3
LABEL 规则库
ACTIONS yxkf_1_4_3
END_OF_MENU
此部分用来定义“布线数据库”二级菜单的三级菜单,即“模型库”、“知识库”和“规则库”,以END_OF_MENU结束这些三级菜单的制作。另外,“帮助”二级菜单下没有三级菜单,不需要再另外编制代码。
再次打开UG 10.0,进入菜单,则可在“帮助”菜单上面出现“电缆自动布线及自动检测程序”菜单,如图1所示。至此,菜单的开发完成,后续还可以根据需要,为一些功能设置快捷键,例如“全面检测”功能,则可以实现一键检测,无需逐级打开菜单进行选择。
图1 二次开发菜单界面
2.2.2 对话框开发
打开UG 10.0,新建一个模型,然后在应用模块中进入“块UI样式编辑器”。新版本(UG6.0以后的版本)都用到了块的概念,每个块可相当于具有一定独立功能的小模块,这更体现了模块化的思想。以电缆参数化设计的对话框为例,在左侧“基本”块集合器里选择“对象颜色拾取器”,用以指定内层颜色和外层颜色,在“数字”块集合器里选择“双精度”,用以指定内径和外径大小,在“选择”块集合器里选择“指定点”,用以确定电缆的起始点和目标点,添加完所有块后,通过“上移块”和“下移块”命令优化布局,使每个块对应合适的位置。设计完成后的对话框界面如图2所示。
图2 二次开发对话框界面
对话框创建完成后,保存在application文件夹中,将生成.dlx文件、.hpp文件和.cpp文件。
2.2.3 建立程序的框架
第一步,启动VC++,由于首次用C语言来进行UG二次开发时,缺少与UG的接口,要添加库文件UgOpen_v19.awx和UgOpen_v19.hlp到VC++安装目录中的对应文件夹中。
第二步,重新启动VC++,在projects下选择用 于UG二次开发的project选项Unigraphics NX AppWizard V1,将project name命名为UG_yxkf,存放在UG二次开发文件夹中,则其对应的Location 为G:UG_yxkfUG_yxkf。将前面创建对话框生成的.hpp文件和.cpp文件复制一份到 G:UG_yxkfUG_yxkf文件夹里。
第三步,进入VC++左侧Workspace的FileView界面,分别移除原先的Source Files目录下的.cpp文件和Header Files目录下的.h文件,用前面创建对话框生成的.cpp文件和.hpp文件进行相应覆盖。
第四步,打开.cpp文件,编写回调函数程序代码,完成后在VC中依次进入“工具”、“选项”命令,将UG10.0安装文件夹里的UGOPEN文件夹(UG自带的API函数库默认存放在这个文件夹里)所在路径指定为"“路径”,从而实现API函数的调用。最后进行编译和连接,生成.dll文件,并将其复制到G:UG_yxkfstartup中即可。
完成以上操作后,重启UG,此部分开发完成。后续还需继续编制相关代码,建立数据库和开发用户交互界面,并通过不断调试,才能最终实现和逐步完善电缆自动布线及自动检测功能。
UG二次开发技术现已在参数化建模、零件库开发、自动检测、数字化工厂建设等多个领域得到了成功应用。本文开发的自动布线及自动检测功能使用了新版的UG软件,包含了从初始建模到最终检测评估的全过程,功能更加完善。随着信息和通信技术的发展,UG二次开发技术正逐步和智能技术、通信技术、互联网技术、大数据技术等信息技术相结合,日后在智能识别和检测、智能制造等方面将有较好的发展前景。