| 大家好,我是闪光蜗牛。 
 
 受到前面安周版主的帖子启发—— 
 海德汉原生态毛坯输出___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格式的文本程序单中。关于这些的做法,后面蜗牛会继续分享。 
 
 做一件对行业有贡献的事情。 
 
 最后感谢安周版主上期的无私分享,才有了本文的诞生。 
 同时向版主这样敢为人先,勇于突破桎梏的人们致敬。 
 
 
 
 
 |