UG爱好者

标题: 颠覆传统理念__NX1926新功能应用__读取毛坯数据并获取加工坐标系方位,含数学原理详解 [打印本页]

作者: destiny0515    时间: 2020-6-24 20:03
标题: 颠覆传统理念__NX1926新功能应用__读取毛坯数据并获取加工坐标系方位,含数学原理详解
大家好,我是闪光蜗牛。


受到前面安周版主的帖子启发——

海德汉原生态毛坯输出___NX1926新功能

http://www.ugsnx.com/thread-287704-1-1.html


从而可知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格式的文本程序单中。关于这些的做法,后面蜗牛会继续分享。


做一件对行业有贡献的事情。


最后感谢安周版主上期的无私分享,才有了本文的诞生。

同时向版主这样敢为人先,勇于突破桎梏的人们致敬。






作者: 安周    时间: 2020-6-24 20:35
本帖最后由 安周 于 2020-6-24 20:39 编辑

感谢大师分享经验,需要你这种分享精神会更精彩!!
作者: ZhuaiGG    时间: 2020-6-24 20:40
感谢大师分享。。。。。。。。。。
作者: ppen    时间: 2020-6-24 20:46
感谢大师分享经验
作者: jianfeng13148    时间: 2020-6-24 21:04
大师怎么用的,一下复制下后处理去报警
作者: er4re4    时间: 2020-6-24 21:07
顶楼主,,,
作者: 604051756    时间: 2020-6-24 21:20
楼主和版主一样强悍:kaixin:
作者: fswbvip*    时间: 2020-6-24 21:32
感谢大师分享经验,需要你这种分享精神会更精彩!
作者: xinfangda    时间: 2020-6-24 21:44
感谢大师分享经验,需要你这种分享精神会更精彩!!
作者: 林枫/tp    时间: 2020-6-24 21:49
感谢大师分享!支持蜗牛哥!
作者: a2535960    时间: 2020-6-24 22:22
謝謝大大的教導 感謝感謝
作者: slk    时间: 2020-6-25 00:20
感谢大师分享经验
作者: 如云得龙    时间: 2020-6-26 18:21
完全不知道楼主在说什么
作者: gfyygf    时间: 2020-6-26 20:32
偏值不对,报错
作者: gfyygf    时间: 2020-6-26 20:34
偏值不对
作者: 邵阳_新邵_一刀    时间: 2020-6-28 10:39

感谢大师分享。
作者: qqxian    时间: 2020-6-28 10:47
楼主威武
作者: YUYONGPING    时间: 2020-6-28 16:35
这个厉害了,看见程序就知道坐标设在工件那个位置
作者: 风云决*    时间: 2020-6-29 01:36
感谢分享经验
作者: sfmj16    时间: 2020-6-29 08:16
见笑,看不懂。门外汉
作者: li604318852    时间: 2020-6-29 10:02
感谢大师分享经验,需要你这种分享精神会更精彩!!
作者: smilface    时间: 2020-6-29 10:42

感谢大师分享经验,需要你这种分享精神会更精彩!!
作者: 黎海明    时间: 2020-6-30 11:01
楼主是大神!膜拜!
作者: abs7743    时间: 2020-6-30 19:43
等我学会24个英文字母,才有机会看得懂你的文章!
作者: coolcj    时间: 2020-7-5 10:28
学习学习,谢谢楼主分享!
作者: topckey    时间: 2021-6-10 08:44
1953系列如何关闭这个/?? 用回旧的毛胚?
作者: 不忘初心Zz    时间: 2021-6-10 09:23
大师出手,必是精品,给力!
作者: nage1002    时间: 2021-6-10 09:30
虽然我不懂,但是我给赞
作者: xuhuxukai    时间: 2021-6-10 09:48
支持高手发帖!
作者: 我要干十个    时间: 2021-6-10 09:50
看了半天,搞得好像自己能看懂一样!!!哈哈
作者: ug1029    时间: 2021-6-10 10:40
谢谢分享!谢谢分享!
作者: wwhawen    时间: 2021-6-21 09:44
虽然看不懂 但是得点赞 膜拜 大神
作者: xlw41578    时间: 2021-6-21 10:50
感谢大师分享经验
作者: w_y8266*    时间: 2021-7-19 16:43
厉害厉害。能把源码发出来吗?我想要这个功能,没做成功
作者: destiny0515    时间: 2021-7-19 20:48
w_y8266* 发表于 2021-7-19 16:43
厉害厉害。能把源码发出来吗?我想要这个功能,没做成功

所有的源代码都在上面
作者: м唥/kn劍"    时间: 2021-7-19 21:26

感谢大师分享经验,需要你这种分享精神会更精彩!!
作者: w_y8266*    时间: 2021-7-19 22:56
本帖最后由 w_y8266* 于 2021-7-19 22:58 编辑
destiny0515 发表于 2021-7-19 20:48
所有的源代码都在上面

我抄了下来,但是UG后处理报警。for {set i 0} {$i < 3} {incr i} {
    set blank_mcs($i) [expr $mom_msys_origin($i)-$mom_blank_block_center($i)]
}
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
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值矩阵
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]
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]
set blank_mcs_center(2) [expr $blank_mcs_center(2) - $blank_zz]
#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)])"
}



作者: 黎海明    时间: 2021-7-20 10:12

感谢大师分享经验,需要你这种分享精神会更精彩!!

作者: 林宁宁    时间: 2021-7-20 10:39
完完全全彻彻底底看不懂..................
作者: TRGFGFGHGF    时间: 2021-7-20 21:37
按照大师给的代码做了一下,几个极端的点都能输出,但是其他点输出时blank_mcs_center值有问题,应该是“矩阵与转置矩阵的乘积”这个代码有问题,麻烦大概指点下代码的用法,我来看看是格式2有问题还是什么问题
作者: 吕存亮    时间: 2023-8-28 11:59
大神666
作者: 2668915176@qq.c    时间: 2023-8-28 14:38
感谢楼主无私分享
作者: 卧龙寺    时间: 2023-8-28 17:37
怎么加到后处理去能出个教程吗
作者: mfklngeyc    时间: 2023-9-16 10:36
十分感谢大师分享经验,可以成功输出。请教当程式没有用自动包容块时会报错要怎么跳过检测代码
作者: 卧龙寺    时间: 2023-9-17 17:19
mfklngeyc 发表于 2023-9-16 10:36
十分感谢大师分享经验,可以成功输出。请教当程式没有用自动包容块时会报错要怎么跳过检测代码

能教教怎么用吗?
作者: 280890303    时间: 2023-9-17 17:54
太厉害了,学习一下
作者: 789777    时间: 2023-12-22 11:20
厉害大佬
作者: augwga    时间: 2024-3-10 12:18
TRGFGFGHGF 发表于 2021-7-20 21:37
按照大师给的代码做了一下,几个极端的点都能输出,但是其他点输出时blank_mcs_center值有问题,应该是“矩 ...

我的问题跟你一样,请问有解决了吗?
作者: augwga    时间: 2024-3-10 12:19
本帖最后由 augwga 于 2024-3-10 13:19 编辑
augwga 发表于 2024-3-10 12:18
我的问题跟你一样,请问有解决了吗?

我发现是[format%0.2f $blank_mcs_center(0)]这里面少了个空格造成报错改成[format "%.2f" $blank_mcs_center(0)]就可以正常使用了。
作者: 张猛2023    时间: 2024-3-12 11:10
技术含量太高了一点都看不懂呢

作者: 复仇云    时间: 2024-4-19 14:16
谢谢分享
作者: 复仇云    时间: 2024-4-19 14:42

感谢大师分享
作者: guofengleyuan    时间: 2024-4-21 22:42
求做好的后处理发一个。
作者: 程炎飞    时间: 2024-8-31 11:24
学习?????????????????

作者: wuqing_fang    时间: 13 小时前
我用2312,后处理怎么读不到这些变量




欢迎光临 UG爱好者 (https://www.ugsnx.com/) Powered by Discuz! X3.2