基于Solidworks二次开发的枪弹弹头参数化设计
2018-06-04李久弘关丽荣
李久弘,关丽荣
(沈阳理工大学 机械工程学院, 辽宁 沈阳 110159)
为了适应战争需要,部队在装备序列、战术和使用方面会对武器和弹药提出各种新的要求,使武器和弹药性能不断改进或更新.枪弹的设计任务就是根据上述几方面的要求而提出的.我国目前的枪弹研制采用的仍是传统的人工设计方法,根据以往的设计经验来改进和优化枪弹设计.传统设计方法的工作量繁重且周期长,不利于我国枪弹的更新换代.因此,如何快速的生成枪弹三维模型是一个急需解决的问题.
参数化设计方法是计算机辅助设计的一项重要技术,也是一门比较成熟的技术,现已广泛应用于多种制造领域.从降低设计的重复性、提高其可修改性上考虑,参数化建模技术作为一种先进的设计方法,可以很好地解决枪弹结构建模中遇到的难题.本文通过调研某轻武器研究所,查阅大量文献,对枪弹设计知识加以整理,使其满足参数化建模需要,以某枪弹作为研究对象,以Python开发工具和Solidworks二次开发技术来实现枪弹的参数化设计问题.
1 Solidworks二次开发技术及参数化设计方法
为了方便用户进行二次开发,Solidworks提供了几百个应用程序接口(Application Program Interface,API)函数.这些函数是Solidworks基于OLE(Object Linking and Embedding)或COM(Computer-Output-Microfilm)开发技术的接口.用户使用VB、NBANC、Python等高级语言调用这些对象属性的设置和方法,就可以在设计者自己开发的程序中实现Solidworks的各种操作,建立满足用户需要的定制Solidworks软件系统[1-2].
Solidworks具有强大的参数化特征造型功能.通过它能方便、快捷地创建几乎任何复杂形状的实体,可以满足绝大部分的工程设计需要.Solidworks采用统一的内部数据库,全数据相关.在其任何一个功能模块中对零件的修改都会自动反映到其他模块中.而且,它具有开放的体系结构,拥有丰富的第三方支持软件,能够提供开放的数据结构和方便的二次开发环境,为工程应用提供良好的平台.
基于Solidworks的二次开发方法[3]有两种:一种是编程法;另一种是尺寸驱动法.
编程法将设计过程的所有关系式包括在应用程序中,程序按照建模过程顺序地执行.这种方法每更新一次模型都需要从头至尾执行一次应用程序.
尺寸驱动法在保持模型结构不变的前提下,将模型中尺寸视为变量,在应用程序中给变量赋值就可同步更新模型中相应的尺寸值,进而获得一系列尺寸不同而结构相同的模型,形成零部件系列库.这种方法不需要重复建模过程,只是在基础模型上修改若干尺寸就可以达到参数化建模的目的.
以上两种方法都可以借助宏录制简化编程过程,但是二者的简化程度不同.尺寸驱动法并不需要整个建模过程的代码,它只是在建模完成后录制修改模型尺寸的宏代码,使得涉及API的函数大大减少.编程法较复杂,尺寸驱动法才是最理想的选择.
2 枪弹弹头结构参数的设计
枪弹设计需要设计者进行不断修改与测试,整个设计和实践的过程十分繁杂.根据设计者多年的设计研发经验,枪弹弹头的结构参数大致包括如下8个部分:顶部半径(R1)、圆柱部长度(H2)、圆柱部直径(D)、弧形部长度(H1)、弧形部半径(R2)、尾锥部长度(H3)、尾锥角(α)、弹总长(H).枪弹弹头的结构参数如图1所示.
图1 枪弹弹头的结构参数
(1) 弧形部长度.它是弹头飞行阻力的主要影响因素.H1值越大,飞行阻力越小,弹形系数也越小.但当H1增大到一定程度后阻力的减小量甚微,同时因为弹头重量已定,所以弹总长是有一定限制的,亦即H1值不可能太大,否则圆柱部将被缩短,而圆柱部的缩短不仅影响弹头在膛内的正确运动(即有良好的运动姿态),也将影响其飞行稳定性和射击密集度.
(2) 圆柱部直径.设计时圆柱部直径要与枪管线膛尺寸密切配合.为了密封枪管,弹头圆柱部横断面积应大于(至少应等于)线膛内横断面积.
(3) 圆柱部长度.为了使弹头在线膛内正确运动和转动,圆柱部应有一定的长度.若圆柱部过短则会影响弹头在膛内正确运动,使弹头出枪口时章动角增大,甚至产生横弹而降低射击的密集度.
(4) 尾锥角.为了减小弹底的涡流阻力,通常将弹头尾部制成截锥体,其尾锥角约为6°~9°.若尾锥角过大,则空气附面层容易与弹尾分离,而产生涡流.
3 枪弹弹头的参数化建模
参数化建模[4]的总体设计思路(图2)是指在Solidworks的零件设计中建立新的设计表,并设计出构件要素所需要的对话框;通过点击按钮,调用程序,实现Solidworks用户界面的功能响应;通过选择构件要素,依靠后台程序生成所需要的设计模型.
图2 总体设计思路
3.1 系列零件设计表的嵌入
单击工具栏上的【插入】、【新系列零件设计表】,一个嵌入的工作表会出现在窗口中,而且可用Excel工具栏替换Solidworks工具栏.
在PropertyManager中进行如下操作:在【来源】下选择空白,以插入空白系列零件设计表;在【编辑控制】下选择阻止,会更新系列零件设计表,但不允许更改模型;在【选项】下清除数据和新配置(这样,对模型所做的任何更改将不更新系列零件设计表),此时,Excel工具栏会替换Solidworks工具栏.
3.2 系列零件设计表的编辑
在打开系列零件设计表[5]后,需要对其进行编辑.
(1) 在设计图形区域双击某个尺寸而插入新的系列零件设计表之前,需确定所有必要尺寸都已显示出来.单个尺寸插入新的系列零件设表后,将该尺寸【特征】和尺寸【草图参数】插入单元格中.
(2) 在模型特征的单个面上双击左键,将【状态】中【特征参数】插入单元格中.
(3) 在列A中输入需要生成的配置名称,但该名称不能包含正斜线(/)或(@)字符.
(4) 在试算表单元格中输入参数,即可完成系列零件设计表的编辑.如需显示由系列零件设计表添加的配置[6],就在单击窗口底部的【ConfigurationManager】标签后,双击该配置的名称,或者用右键单击该名称并选择显示配置.弹头的参数化配置如图3所示.
图3 弹头的参数化配置
3.3 弹头模型程序的建立
程序设计的主要任务是参数化建模,即通过程序编写来实现所需要的模型特征.程序编写的主要步骤分为:①获取工作文档;②拾取建模基准;③获取草图建模环境;④绘制草图;⑤创建约束;⑥模型输出及更新.弹头的模型创建流程如图4所示.
图4 弹头的模型创建流程
3.3.1 定制Solidworks界面
用户自定义菜单所插入的位置可以用数字来表示.菜单插入的规则是:把Solidworks菜单从左往右排序并由0开始计数.自定义菜单的位置在【插入】与【工具】之间.菜单插入的具体实现需要在函数中添加如下代码:
//自定义菜单的插入位置
#define QD MenuPosition
//添加顶部弹出式菜单【3Dcaotu】
menu = win64ui.CreatePopupMenu()
submenu.AppendMenu(MF_3D,'Caotu')
//添加【3Dcaotu】下一级菜单
submenu.TrackPopupMenu(param[5],flag,self)
flag = TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON.
3.3.2 定制Solidworks工具栏
用户可先绘制自定义工具栏按钮的图标,然后在函数中添加以下代码:
class MenuForm(wx.Frame):
def OnQuit(self,event):
self.Close()
def OnOpen(self,event):
self.statusbar.SetStatusText('Open a File!').
函数中添加的代码被加载成功后,弹头三维实体模型(图5)就可以生成了.
图5 弹头的三维实体模型
4 结束语
本文对枪弹弹头设计流程进行讨论,采用参数化建模技术的基本原理和方法,以Solidworks为平台,利用Python编程语言对三维软件Solidworks进行二次开发,设计出简单实用的枪弹弹头参数化程序,基本实现了初期的设计目标,节省了人力和物力,为后期的枪弹弹头设计奠定了基础.