通过梁单元来模拟螺栓杆,然后将各端面节点与梁单元节点通过MPC耦合起来即可。图 1-a为结构中常见的螺栓连接模型,图 1-b为利用多点约束和梁单元法建立的螺栓连接模型。由图 1可以看出螺栓杆由两个梁单元模拟,通过多点约束将连接件上的节点耦合到梁单元的节点上,共由三个MPC组成。
下面就是利用PCL编程实现快速建模,建模过程如下:
1、螺栓连接模型的参数化。螺栓连接中需要确定螺栓连接的位置、连接件的厚度、螺栓直径等参数。由图 1可知,通过得到关键点1与关键点2的全局坐标,即可确定螺栓连接的位置及朝向。而后建立Z轴沿着从关键点1到关键点2的局部柱坐标系,R轴与θ 轴只需与Z轴垂直即可,无特别要求。定义关键点1距离结合面距离为h1,关键点1距离关键点2距离为h2,则连接件的厚度分别为h1与h2- h1。螺栓直径则可在单元属性中直接修改梁单元截面即可。对于螺栓连接的预紧力,可简单通过MPC的耦合半径范围来模拟,定义MPC_1的最小半径为r1min,最大半径为r1max,MPC_2的最小半径为r2min,最大半径为r2max; MPC_3的最小半径为r3min,最大半径为r3max,可通过修改最大最小半径来设定MPC的耦合半径范围,进而改变螺栓连接的局部刚度,达到模拟预紧力的效果。综上所述,需要参数化的有三部分组成,关键点1与关键点2坐标、连接件厚度以及MPC耦合半径。
选用记事本格式保存各参数信息,通过编写读入函数将各螺栓连接的参数信息保存到一个数组中,部分文本读入函数为
FUNCTION coord_read ( file_name)
global real bolt_parameter (virtual)
global integer count_num
…
IF ( TEXT_OPEN( file_name, "or", 0, 0, fid) == 0 ) THEN
count_num = 0
WHILE(TEXT_READ ( fid, "%14G%", 0, zuobiao, "") == 0 )
count_num += 1
bolt_parameter (i, 1:14) = zuobiao
END WHILE
TEXT_CLOSE(fid, "")
end if
END FUNCTION
通过上述程序,可将记事本中的参数信息读入名为bolt_parameter的数组中,螺栓个数信息保存在count_num中。
2、建模过程的PCL实现
通过关键点1与关键点2建立局部柱坐标,使得局部坐标Z轴方向为关键点1到关键点2的矢量方向,然后在局部柱坐标下建立两个梁单元,梁单元长度通过h1与h2控制。而后需要建立梁单元节点与连接面节点的多点耦合约束,通过内置函数list_create_node_att_value即可实现选取特定坐标中指定范围内的节点,利用内置函数fem_create_mpc_nodal2即可自动建立多点约束。最终编写的部分建模程序如下
function coord_creat ()
global real bolt_parameter (virtual)
…
asm_const_coord_3point( "#", "Coord 0", 2, point1, point2, point3, coord_id )
…
fem_create_elems_1( "Bar ", "Bar2", "1", "Standard", 3, bar_node1, bar_node2, "", "", "", "", "", "", fem_create_elemen_elems_created )
…
db_count_mpcs(num)
num=num+1
list_create_node_att_value( coord_values1, [TRUE, FALSE, TRUE], ["range", "equal", "range"], [0.0049999999, 0.0049999999, 0.5], coord_id, "lista", uil_list_create_current_list )
…
fem_create_mpc_nodal2( num, "RBE2", 0., 2, [TRUE, FALSE], ["0", "0"], [ @
"`lista`","`bar_node1`"], ["UX,UY,UZ,RX,RY,RZ", ""] )
uil_list_a.clear( )
end function
利用上述函数可实现单个螺栓连接的自动建模。若有多个螺栓连接,则使用For循环语句循环调用即可。
利用上述程序可以实现螺栓连接得快速建模,举个例子吧。
经过LMS模态锤击实验,结果误差在百分之五之内,此方法建模准确性还是可靠的。
希望对大家有所帮助,有疑问回复即可O(∩_∩)O~!