UG爱好者
标题: 颠覆传统理念__NX1926新功能应用__读取毛坯数据并获取加工坐标系方位,含数学原理详解 [打印本页]
作者: destiny0515 时间: 2020-6-24 20:03
标题: 颠覆传统理念__NX1926新功能应用__读取毛坯数据并获取加工坐标系方位,含数学原理详解
大家好,我是闪光蜗牛。
受到前面安周版主的帖子启发——
海德汉原生态毛坯输出___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格式的文本程序单中。关于这些的做法,后面蜗牛会继续分享。
做一件对行业有贡献的事情。
最后感谢安周版主上期的无私分享,才有了本文的诞生。
同时向版主这样敢为人先,勇于突破桎梏的人们致敬。
作者: 安周 时间: 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
所有的源代码都在上面
作者: м唥/kn劍" 时间: 2021-7-19 21:26
感谢大师分享经验,需要你这种分享精神会更精彩!!
作者: w_y8266* 时间: 2021-7-19 22:56
本帖最后由 w_y8266* 于 2021-7-19 22:58 编辑
我抄了下来,但是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
能教教怎么用吗?
作者: 280890303 时间: 2023-9-17 17:54
太厉害了,学习一下
作者: 789777 时间: 2023-12-22 11:20
厉害大佬
作者: augwga 时间: 2024-3-10 12:18
我的问题跟你一样,请问有解决了吗?
作者: augwga 时间: 2024-3-10 12:19
本帖最后由 augwga 于 2024-3-10 13:19 编辑
我发现是[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 |