大家好,我是闪光蜗牛。
受到前面安周版主的帖子启发——
海德汉原生态毛坯输出___NX1926新功能
从而可知NX1926的后置处理已经可以获取毛坯几何体的相关参数,比如长,宽,高以及毛坯在空间内的姿态等。
蜗牛在想我们获取了上述信息之后,再结合已有的工件坐标系(MCS-Machining coordinate system)的相关参数,便可以计算出MCS相对于毛坯的位置关系,从而能更直接的从加工程序中体现工件坐标系的位置。实现这样的目的后,可以降低对于外挂等辅助工具的依赖,方便查看加工坐标,提高调机效率,降低失误风险,缩短加工周期。
那具体应该怎么做呢?跟随蜗牛的思路一点一点看吧——
1. 准备工作
确认使用的NX版本为1926,并且在”实用工具”——“特征开关”中开启 [启用毛坯体或组件的创建]
新建几何体,选择部件,选择毛坯,创建刀轨。
2. 数学过程
2.1计算MCS相对于毛坯中心在绝对坐标系(ACS-Absolute coordinatesystem)中的位置关系
for {set i 0} {$i < 3} {incr i} {
set blank_mcs($i) [expr $mom_msys_origin($i)-$mom_blank_block_center($i)]
}
由此可得到blank_mcs(0),blank_mcs(1) ,blank_mcs(2)即MCS相对毛坯在ACS中的XYZ的向量。
2.2将以上结果投影至MCS,得出工件坐标系原点在MCS中相对于毛坯中心的位置关系
通过矩阵与转置矩阵的乘积即可得出结果:
proc MTX3_vec_multiply {u m w} {
upvar $u ul; upvar $m ml; upvar $w wl
set wl(0) [expr ($ul(0) * $ml(0) + $ul(1) *$ml(1) + $ul(2) *$ml(2))]
set wl(1) [expr ($ul(0) * $ml(3) + $ul(1) *$ml(4) + $ul(2) *$ml(5))]
set wl(2) [expr ($ul(0) * $ml(6) + $ul(1) *$ml(7) + $ul(2) *$ml(8))]
}
使用以上过程可以简化运算部分的代码。没有了解过的读者可以保存这个过程,在进行坐标转换时十分便捷。
MTX3_vec_multiply blank_mcs mom_msys_matrix blank_mcs_center
得到的blank_mcs_center(0),blank_mcs_center(1),blank_mcs_center(2)即工件坐标系原点相对于毛坯中心在MCS中的XYZ向量。
2.3毛坯长宽高除以2,使其2等分
set blank_xx [expr $mom_blank_block_length /2]
set blank_yy [expr $mom_blank_block_width /2]
set blank_zz [expr $mom_blank_block_height /2]
2.4求出毛坯不同方向的偏置值
set blank_x_left [expr -1*$blank_xx]
set blank_y_front [expr -1*$blank_yy]
set fol_height [expr -1*$mom_blank_block_height]
2.5Z轴以顶面为参考,减去毛坯高的一半
set blank_mcs_center(2) [expr $blank_mcs_center(2) - $blank_zz]
2.6对于上述引用的变量的注释:
mom_blank_block_length 毛坯的长
mom_blank_block_width 毛坯的宽
mom_blank_block_height 毛坯的高
mom_blank_block_center 毛坯中心相对于ACS的位置
mom_msys_origin MCS原点相对于ACS的位置
mom_msys_matrix MCS姿态的9值矩阵
3. 输出工件坐标系相对于毛坯的位置
#X位置
if { [EQ_is_zero $blank_mcs_center(0)] } {
MOM_output_text "(X分中)"
} elseif {[EQ_is_equal $blank_mcs_center(0) $blank_x_left]} {
MOM_output_text "(X左端为零)"
} elseif {[EQ_is_equal $blank_mcs_center(0) $blank_xx]} {
MOM_output_text "(X右端为零)"
} else {
MOM_output_text "(X分中偏移[format%0.2f $blank_mcs_center(0)])"
}
#Y位置
if { [EQ_is_zero $blank_mcs_center(1)] } {
MOM_output_text "(Y分中)"
} elseif {[EQ_is_equal $blank_mcs_center(1) $blank_y_front]} {
MOM_output_text "(Y下端为零)"
} elseif {[EQ_is_equal $blank_mcs_center(1) $blank_yy]} {
MOM_output_text "(Y上端为零)"
} else {
MOM_output_text "(Y分中偏移[format%0.2f $blank_mcs_center(1)])"
}
#Z位置
if { [EQ_is_zero $blank_mcs_center(2)] } {
MOM_output_text "(Z顶面为零)"
} elseif {[EQ_is_equal $blank_mcs_center(2) $fol_height]} {
MOM_output_text "(Z底面为零)"
} else {
MOM_output_text "(Z顶面偏移[format%0.2f $blank_mcs_center(2)])"
}
4. 结果展示
程序中的中文是为了有更好的展示效果,如果受机床编码限制,也可用英文表示方位。
以上结果同样可以输出至excel表格程序单,txt或csv格式的文本程序单中。关于这些的做法,后面蜗牛会继续分享。
做一件对行业有贡献的事情。
最后感谢安周版主上期的无私分享,才有了本文的诞生。
同时向版主这样敢为人先,勇于突破桎梏的人们致敬。
|