王龙,宋永增,孙妍婷,王彩霞
(北京交通大学 机械与电子控制工程学院,北京 100044)
在铝合金车体结构有限元建模过程中,往往通过车体的三维设计图转换成有限元模型,以加快有限元建模的速度。具体方法是,先将车体的三维设计图通过数据交换文件,导入专门的有限元网格划分软件进行网格划分,然后将划分好的网格模型,通过数据交换文件导入有限元分析软件进行模型的完善,最终得到有限元模型。车体的有限元模型与其三维设计图之间存在一定差别,例如,铝合金车体广泛采用壳体结构,在三维设计图中,壳体具有厚度属性,而在有限元模型中,壳体用其中性面表示即可。因此,需要对车体的壳体结构进行抽取中性面处理,然后对抽取的中性面进行网格划分,这种处理往往采用交互式操作。对于大型的车体结构,抽取中性面的操作工作量非常大,容易出错。因此,研究壳体结构自动抽取中性面方法具有较大的工程应用价值。
IGES(Initial Graphics Exchange Specification)是初始化图形交换规范,用来定义在各种几何建模系统之间进行文件转换的中间文件,现已成为广泛应用的产品定义标准,已被我国转换成国家标准GB/T14213。
IGES文件包括固定长ASCII码、压缩的ASCII及二进制3种格式。固定长ASCII码格式的IGES文件每行为80个字符,整个文件分为开始段、全局参数段、目录条目段、参数数据段和结束段5部分。
开始段,代码为S,该段是为提供一个可读文件的序言,主要记录图形文件的最初来源及生成该IGES文件的相同名称。IGES文件至少有一个开始记录。
全局参数段,代码为G,主要包含前处理器的描述信息及为处理该文件的后处理器所需要的信息。参数以自由格式输入,用逗号分隔参数,用分号结束一个参数。主要参数有:文件名、前处理器版本、单位、文件生成日期、作者姓名及单位、IGES的版本、绘图标准代码等。
目录条目段,代码为D,该段主要为文件提供一个索引,并含有每个实体的属性信息,文件中的每个实体都有一个目录条目,大小一样,由8个字符组成一个域,共20个域,每个条目占用2行。
参数数据段,代码为P,该段主要以自由格式记录与每个实体相连的参数数据,第一个域总是实体类型号。
结束段,代码为T,该段只有一个记录,并且是文件的最后一行,它被分成10个域,每域8列,第1~4域及第10域为上述各段所使用的表示段类型的代码及最后的序号。
如果要对壳体进行抽取中性面处理,首先生成壳体的IGES文件,然后对壳体的IGES文件图形参数进行处理。本文运用MATLAB工具箱将壳体的IGES文件读取到MATLAB的工作空间,借助于MATLAB强大的数据处理功能,对壳体参数进行抽取中性面处理,再将处理后的中性面参数输出成新的IGES文件,即所要的壳体中性面IGES文件。
以B样条曲面抽取中性面为例,将其生成“example.igs”文件,运用MATLAB工具箱直接读取该文件,其格式如下:
[Parameter Data,Entity Type,num Entity Type]=iges2matlab('example.igs');
其中,Parameter Data为图形参数;EntityType为实体类型;numEntity Type为实体类型数目。读入后,Parameter Data为一元胞数组,其中含有每种实体类型的结构体参数数据,见表1。
在表1中,type为实体类型编号;name为实体名称B样条曲面;k1和k2分别为第1个和第2个总和的上限;m1和m2分别为第1组和第2组基本函数的阶;prop1表示是否封闭于第1个参变量方向;prop2表示是否封闭于第2个参变量方向;prop3表示是有理式还是多项式;prop4和prop5分别表示第1和第2个参变量方向上的周期性;u和v分别表示参数方向;nurbs参数为一结构体数据,其中包含了B样条曲面控制点坐标等重要参数。当对上述参数进行抽取中性面处理后,即可将抽取的中性面参数按IGES格式编写一个IGES输出函数igesout。
表1 B样条曲面参数表
将B样条曲面提取出来,即将type为128的元胞数组提取到一个新的数组内,然后进行抽取中性面处理。
壳体如图1。确定该壳体的所有边界面。根据壳体的结构特点,其边界面应由2个样条组成,其控制点坐标见表2。
图1 壳体结构示意图
表2 控制点坐标
运用MATLAB的norm函数求出控制点间的距离,即样条宽度。程序段如下:
其中bian_wz为包含所有2样条曲面的控制点坐标矩阵,kuan(i)为6个面的宽度矩阵,见表3。
对于平面而言,计算其厚度实际是壳体的长或宽。在计算所有宽度后,取宽度最小值来判断主要面。程序段如下:
mkuan=min(kuan);%提取最小宽度
[mm wz_mkuan]=find(kuan==mkuan);%找到最小宽度的位置
表3 各对应面的宽度
从表3,即可找到主要面为1和2。其他为边界面,壳体厚度为2mm。得到边界面的原位置wz_kuan=[3 4 5 6]。
将主要面提取出来,组成新的元胞数组peidui1_wz和peidui2_wz。由于误差的存在,往往造成厚度的计算没有表3中的数值那样规整。所以在计算偏移量时,需要重新计算2个主要面的距离,同样用norm计算得到。将结果的一半作为偏移距离TAO,即:
TAO=(peidui2_wz{1}.wz(1:3,1,1)-peidui1_wz{1}.wz(1:3,1,1))./2;
根据计算机图形学,把空间中一个点由位置(x, y, z)平移至位置(x', y', z')可用以下矩阵运算实现:
其中,参数、(Tx, Ty, Tz)、规定了坐标平移距离,它们构成了一个平移向量[Tx, Ty, Tz]。这里不妨令τ=[Tx, Ty, Tz],可由主要面2个对应点的坐标计算得到。例如控制点1和控制点3:
τ =([- 24.521]-[- 22.521])/2=[0100]
所以,可以通过平移主要面形成中性面:
其中:ZM为中性面的控制点坐标矩阵,ZY为主要面的控制点坐标矩阵。
不规则的壳体结构如图2,IGES文件名为EXP1。
图2 不规则壳体结构
(1)首先将其读入matlab
clear%清除内存空间
makeIGESmex;%编译c文件
[ParameterData]=iges2matlab('prt_100_100_2.igs');%读入IGES文件参数(2)进行抽取中性面处理
NrbSurf=midface(ParameterData);%调取抽取中性面函数
(3)将中性面输出成IGES文件
OutName = 'EXP1_midf.igs';%确定输出文件名
igesout(NrbSurf,OutName)%输出IGES文件
经过上述处理,即可得到抽取的中性面‘EXP1_midf.igs’,如图3。
动车组铝合金车体结构如图4。通过抽取中性面可得到的中性面结构如图5。然后,对中性面结构进行网格划分,得到有限元分析模型。
图3 不规则壳体结构的中性面
图4 铝合金车顶结构
本文以MATLAB为平台,在分析IGES文件结构基础上,提出了基于IGES的铝合金车体结构中性面抽取方法,编制出相应的应用程序。以常见的有理B样条曲面为例,对所提出的方法进行了验证,并取得了较为满意的结果。将该方法应用到铝合金车体的壳体结构,为车体结构的有限元建模提供一种快捷的方法,提高了车体结构的建模效率。
图5 铝合金车顶结构的中性面
[1]王瑁成.有限单元法[M]. 北京:清华大学出版社,2003.
[2]余心宏,吴向阳. 基于IGES的数据接口实现[J].计算机工程与应用,2002(10):133-134.