zoukankan      html  css  js  c++  java
  • NX CAM 自动编程,自动创建型腔铣并设置加工区域和参数,生成刀路程序代码示例

    对于电极自动编程开发,通常在第一步需要进行型腔铣粗加工,如果需要再考虑效率的问题,一般只对基准面以上的部分采用型腔铣,而单独的基准台只需要进行2D轮廓加工,可以节约一些时间。这样就需要对型腔铣单独设置加工区域面,并且要通过算法自动找到基准台以上的所有面。

    自动识别电极基准面以上的所有面大致算法:

    1,首先要自动找到电极的基准面,这一步对于做电极自动编程非常重要,找到基准面就可以确定电极的方向、大小等,后续的很多识别算法,都会参考这个基准面。那么如何自动找到电极的基准面呢?(要求是处于正交状态的任意方向,都能自动找到),方法在另外的帖子会详细说明,或者可以加胡君qq85585969获取算法的原型代码。

    2,找到基准面后,就已经确定了电极的方向,然后以基准面的法向方向作为Z向建立工作坐标系,再遍历电极所有的面,计算每个面的边界盒得到Z向的极限值,再对比基准面的高度,就能得到基准面以上的所有面。

     1     //获取geom根组,根据geom名字查询组的TAG
     2     tag_t rootGeomGroup=NULL_TAG;
     3     UF_SETUP_ask_geom_root(setupTag,&rootGeomGroup);
     4     tag_t geomGroupName = NULL_TAG;
     5     UF_NCGROUP_ask_object_of_name(rootGeomGroup, "WORKPIECE", &geomGroupName);
     6  
     7     //获取刀具根组,根据刀具名字查询组的TAG
     8     tag_t rootMctGroup=NULL_TAG;
     9     UF_SETUP_ask_mct_root(setupTag,&rootMctGroup);
    10     tag_t mctGroupName = NULL_TAG;
    11     UF_NCGROUP_ask_object_of_name(rootMctGroup, "D10", &mctGroupName);
    12  
    13     //获取program根组,根据program名字查询组的TAG
    14     tag_t rootProgramGroup=NULL_TAG;
    15     UF_SETUP_ask_program_root(setupTag,&rootProgramGroup);
    16     tag_t programGroupName = NULL_TAG;
    17     UF_NCGROUP_ask_object_of_name(rootProgramGroup, "HUNC01", &programGroupName);
    18  
    19     //设定所属几何体、刀具、程序组
    20     UF_NCGROUP_accept_member( geomGroupName, operTag);
    21     UF_NCGROUP_accept_member( mctGroupName, operTag);
    22     UF_NCGROUP_accept_member( programGroupName, operTag);
    23  
    24     /*以下设置加工区域、切削模式、每刀切削深度、侧面底面余量、切削方向、内外公差、非切削运动、起始点等*/
    25      
    26     //设置加工区域   
    27     int dfCount = 0;
    28     tag_t *datumTopAllFace;
    29 
    30     /* 下面为自定义的一个函数,通过算法自动获得一个电极基准面以上的所有面,
    31        并将获得的面存储到一个Tag数组中,用于下一步设置加工区域。
    32         */
    33     GetEleDatumTopFaces(datumFace, &dfCount, &datumTopAllFace);
    34     UF_CAMGEOM_append_items(operTag, UF_CAM_cut_area, dfCount, datumTopAllFace, NULL);
    35     delete(datumTopAllFace);
    36  
    37      
    38     //设置切削模式为跟随周边(follow)
    39     UF_PARAM_set_int_value (operTag, UF_PARAM_CUT_METHOD,  UF_PARAM_dpm_cut_pattern_follow);
    40  
    41     //设置每刀切削深度
    42     UF_PARAM_set_double_value (operTag, UF_PARAM_CUTLEV_GLOBAL_CUT_DEPTH, 0.56);
    43  
    44     //不勾选侧面与底面余量一致
    45     UF_PARAM_set_int_value (operTag, UF_PARAM_STOCK_PART_USE,  UF_PARAM_stock_part_use_as_is);
    46  
    47     //设置侧面余量
    48     UF_PARAM_set_double_value (operTag, UF_PARAM_STOCK_PART,  0.35);
    49  
    50     //设置底部余量
    51     UF_PARAM_set_double_value (operTag, UF_PARAM_STOCK_FLOOR,  0.15);
    52  
    53     //设置切削刀路方向:向内-向外
    54     UF_PARAM_set_int_value (operTag, UF_PARAM_CUT_FOLLOW_PROGRESSION,  UF_PARAM_cut_follow_progression_inward);
    55      
    56     //设置公差(内外公差)
    57     double InOutVlaue[2] = { 0.31, 0.32 };
    58     UF_PARAM_set_2d_value (operTag, UF_PARAM_TOL_IN_OUT,  InOutVlaue);
    59  
    60 
    61 //设置进给率速度, ask查询的目的,是填充feedrateVla的值.
    62 UF_PARAM_feedrate_t feedrateVla;
    63 UF_PARAM_ask_subobj_ptr_value (operTag, UF_PARAM_FEED_CUT,  &feedrateVla);
    64 feedrateVla.value = 235.3;
    65 UF_PARAM_set_subobj_ptr_value (operTag, UF_PARAM_FEED_CUT,  &feedrateVla);
    66  
    67  
    68 //生成程序
    69 logical generated;
    70 UF_PARAM_generate(operTag, &generated);
    71  
    72  
    73 //刷新导航器
    74 UF_UI_ONT_refresh();

    效果演示:

  • 相关阅读:
    Linux环境下安装RabbitMQ
    JSONP和HttpClient的区别
    Oracle中如何写存储过程
    Oracle数据库操作---基础使用(二)
    Oracle数据库操作---入门(一)
    Java使用递归的方法进行冒泡排序
    Linux常用操作指令
    windows 下rust安装工具链 下载加速
    ubuntu 非lvm 模式 扩充根目录
    CRC16 脚本 python
  • 原文地址:https://www.cnblogs.com/ugapi/p/12774219.html
Copyright © 2011-2022 走看看