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();

 

效果演示:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM