QQ登录

只需一步,快速开始

快捷登录

登录 或者 注册 请先

UG爱好者

查看: 19228|回复: 74

[分享] 圆弧输出的一种新解--整圆IJK,非整圆输出正R,避免负R的输出

  [复制链接]

版主

闪光的蜗牛

Rank: 10Rank: 10Rank: 10

18

主题

511

帖子

1万

积分

论坛元老

发表于 2020-6-8 22:18:34 | 显示全部楼层 |阅读模式

大家好,我是闪光蜗牛,今天来分享一个真实案例。


前两天跟朋友聊到了圆弧输出,朋友那边的一种机床在走大于180°的圆弧时,如果此时以-R输出,则会发生过切可能。而如果以象限点的方式输出圆弧,则正常切削。
1.png


蜗牛也初次听说这样的情况,思考了一下,可以直接用象限的方式输出所有的圆弧,便可解决过切问题。
不过这样一来,整圆就无法输出IJK了吗?作为UG爱好者的一员,显然不能对这样的情况无动于衷。

蜗牛通过分析,觉得可以从两个方向入手实现目的。

方向一:添加预读指令,判断mom_nxt_arc_angle的值是否符合输出条件,然后对变量mom_kin_arc_output_mode进行定义,其值可为FULL_CIRCLE或QUADRANT。

方向二:通过已知条件计算圆弧以象限方式运动的过程。
本贴旨在对上述方向二进行思路及做法详解。

首先呢,在圆弧运动事件里添加一些块,适配R的输出环境。

2.png

Tips:不要忘记把IJK定义为非模态哦,R也要定义为强制输出。

接下来,我们在输出IJK的块上右键,添加一个条件,输入以下的代码。

3.png
#ijk
global mom_arc_angle
global mom_arc_radius
if {[EQ_is_equal_tol $mom_arc_angle 360 0.0001]} {
    return 1
} else {
    return 0
}

注意这里为什么要用到“EQ_is_equal_tol”这个过程呢,相信有读者会不太明白。这个过程可以帮助我们更便捷的管理误差,也是一个直观、安全的后处理的优质体现。0.0001便是此时允许的最大误差。蜗牛在这里精确了四位小数,这个可以根据实际情况自行调整。如果读者有兴趣可以引入弦高作为参数,同样能有效的对误差进行控制。


然后同样的,对输出R的块也要添加一个条件,输入以下代码。

4.png

5.png
#R
global mom_arc_angle mom_pos DEG2RAD RAD2DEG mom_prev_pos mom_pos_arc_center
global mom_arc_radius mom_arc_direction

if {![EQ_is_equal_tol $mom_arc_angle 360 0.0001]} {
    if [expr $mom_arc_angle > 90.0001] {
        set current_angle [expr atan2($mom_prev_pos(1)-$mom_pos_arc_center(1),$mom_prev_pos(0)-$mom_pos_arc_center(0))*$RAD2DEG]

        if {$current_angle < 0} {set current_angle [expr $current_angle+360]}
        set quadrant [expr int($current_angle/90)+1]

        if {$mom_arc_direction == "CLW"} {
            set factor -1
            switch $quadrant {
                1 {set first_step 0}
                2 {set first_step 90}
                3 {set first_step 180}
                4 {set first_step 270}
            }
        } else {
            set factor 1
            switch $quadrant {
                1 {set first_step 90}
                2 {set first_step 180}
                3 {set first_step 270}
                4 {set first_step 0}
            }
        }

        VMOV 2 mom_pos last_pos
        set mom_pos(0) [expr $mom_arc_radius*cos($first_step*$DEG2RAD)+$mom_pos_arc_center(0)]
        set mom_pos(1) [expr $mom_arc_radius*sin($first_step*$DEG2RAD)+$mom_pos_arc_center(1)]
        if {![EQ_is_equal_tol $current_angle $first_step 0.001]} {
            MOM_force once R
            MOM_do_template circular_move_1
        }
        VMOV 2 last_pos mom_pos

        set turn [expr ($mom_arc_angle-abs($current_angle-$first_step)) / 90]
        set turn_int [expr int($turn)]

        for {set i 1} {$i <= $turn_int} {incr i} {
            set pos($i,0) [expr $mom_arc_radius*cos(($first_step+$i*90*$factor)*$DEG2RAD)+$mom_pos_arc_center(0)]
            set pos($i,1) [expr $mom_arc_radius*sin(($first_step+$i*90*$factor)*$DEG2RAD)+$mom_pos_arc_center(1)]
            VMOV 2 mom_pos last_pos
            set mom_pos(0) $pos($i,0); set mom_pos(1) $pos($i,1)
            MOM_force once R
            MOM_do_template circular_move_1
            VMOV 2 last_pos mom_pos
        }
        if {$turn > $turn_int} {
            return 1
        }
        return 0
    }
    return 1
}
return 0

相信读者在这里已经明白所有的思路了:

通过圆心角mom_arc_angle判断输出环境——计算圆弧运动前于笛卡尔坐标系下的位置——判断下一个象限点并输出圆弧——得出过程点位并输出——输出最后的点位,完成圆弧运动。

这样看来是不是很简单呢。

6.png


NX后处理给我们提供了广阔的空间,可以任我们的思想翱翔。

最后附上后处理及测试图档。
test-R.prt (262.5 KB, 下载次数: 285)

评分

参与人数 4G币 +39 收起 理由
yjdcwxa + 9 受教了
树欲静而风不止* + 10 看的我一脸懵逼,支持一下
ZhuaiGG + 10 原创加分!
安周 + 10 上传资料加分!

查看全部评分

有奖推广贴子: 

闪光的蜗牛
回复

使用道具 举报

版主

闪光的蜗牛

Rank: 10Rank: 10Rank: 10

18

主题

511

帖子

1万

积分

论坛元老

 楼主| 发表于 2020-6-22 13:41:11 | 显示全部楼层
本帖最后由 destiny0515 于 2020-6-22 13:42 编辑
wuhongzhang8888 发表于 2020-6-19 19:11
第一次用下载的后处理出来OK,自己新建个后处理不对了,今天再重新解压下载的后处理还是不对

你发现的问题是确实存在的
经过我刚才的检查
已经修正了错误
应该按下图修改
010.png

011.png

感谢朋友们的反馈,可以让我把一件事情做的更好。


闪光的蜗牛
回复 支持 1 反对 0

使用道具 举报

少尉

Rank: 5Rank: 5

11

主题

190

帖子

2941

积分
发表于 2022-4-8 15:44:06 | 显示全部楼层
螺旋铣圆,最后多一行单独的R
11.jpg
回复 支持 1 反对 0

使用道具 举报

六级士官

Rank: 4

3

主题

47

帖子

1498

积分
发表于 2020-6-9 08:26:44 | 显示全部楼层
奈何在下没文化  一句卧槽行天下
回复 支持 1 反对 0

使用道具 举报

版主

Rank: 10Rank: 10Rank: 10

11

主题

161

帖子

2930

积分

优秀版主论坛元老

发表于 2020-6-8 22:23:41 | 显示全部楼层
本帖最后由 安周 于 2020-6-8 22:24 编辑

很好的思路,不仅帅而且还牛 。。
回复 支持 反对

使用道具 举报

上等兵

Rank: 1

0

主题

14

帖子

165

积分
发表于 2020-6-9 08:47:00 | 显示全部楼层
厉害啊,学习了,如今会完整的分享的人已经不多了,顶贴支持
回复 支持 反对

使用道具 举报

上将

Rank: 10Rank: 10Rank: 10

58

主题

3698

帖子

3万

积分

论坛元老

发表于 2020-6-9 08:49:05 | 显示全部楼层
卧槽,牛,但是不理解代码的意思,大致是如果变量满足啥就执行啥,否则就啥这个意思吗? 好像跟软件编程的IF语句差不多?
回复 支持 反对

使用道具 举报

爱好者终身VIP

Rank: 11Rank: 11Rank: 11Rank: 11

7

主题

1263

帖子

1万

积分

灌水王VIP会员可爱天使论坛元老

发表于 2020-6-9 08:54:07 | 显示全部楼层
蜗牛哥厉害!论坛有你更精彩
回复 支持 反对

使用道具 举报

少将

Rank: 8Rank: 8

29

主题

1353

帖子

2万

积分
发表于 2020-6-9 10:02:10 | 显示全部楼层
思路很好!感谢分享精神!!!
回复 支持 反对

使用道具 举报

三级士官

Rank: 3Rank: 3

3

主题

57

帖子

578

积分
发表于 2020-6-9 11:14:54 | 显示全部楼层
学会了,谢谢大神
回复 支持 反对

使用道具 举报

中校

Rank: 7Rank: 7Rank: 7

28

主题

664

帖子

1万

积分
发表于 2020-6-9 13:55:20 | 显示全部楼层
牛牛的帖子必须顶一下,还要顶的舒服
QQ:365337895
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

 
 
QQ:1359218528
工作时间:
9:00-17:00
 
微信公众号
手机APP
机械社区
微信小程序

手机版|UG爱好者论坛 ( 京ICP备10217105号-2 )    论坛管理员QQ:1359218528

本站信息均由会员发表,不代表本网站立场,如侵犯了您的权利请联系管理员,邮箱:1359218528@qq.com  

Powered by UG爱好者 X3.2  © 2001-2014 Comsenz Inc. GMT+8, 2024-4-18 12:18

返回顶部