長年悩まされていた事がちょっと解決しそうだな と言うお話です。
こんな形状を加工しようと思った場合なのですが、
紫色は勾配の付いた面で、ピンク色が水平な面です。
傾斜している部分があるので、ボールエンドミルで加工するのですが
大きな水平面がある為、水平面は出来るだけスクエアエンドミルで加工したい。
こんな場合、世間の皆様はどの様な加工領域を作っているのでしょうか?
(知りたい・・・)
生憎、企業秘密的な理由?でWeb上では見つけ出すことが出来ないのが
現状です。まぁ、この程度の形状であれば細かい事を気にしないで
大まかな加工領域をスケッチ等で作ってしまえば良いのですが・・・。
単純な方法でΦ10のエンドミルで水平面を、R2のボールエンドミルで水平面以外を
加工するとして考えてみます。
大きな水平面2つの境界線を作ります。
3個の境界線が出来上がるのですが、2つのエンドミルで多少ラップした
状態(1mm)で仕上げるとして考え、
赤:不要なので削除
黄:内側に1mmオフセット
緑:外側に3mm(R2+1mm)オフセット
してみます。
こんな感じの黄色で囲まれた部分をボールエンドミルで仕上げて、残りを
スクエアエンドミルで仕上げるツールパスを作るわけです。(座標系が邪魔・・・)
細かい事を考えずにこんな感じで作りました。まだまだゴールじゃないんです。
確認の為、ストックモデルを利用して加工モレが無いか? 確認してみます。
(PowerMillの場合、加工モレのチェックはViewMill(シミュレーション)の機能で出来ない気がします)
見落としてしまいそうな程小さいのですが、赤印部分に加工モレが・・・
ズームし上から見てみると、こんな感じです。
黄色はΦ10エンドミル工具で、白い線はR2ボールエンドミルのツールパスです。
面の境界から単純なオフセットで加工する領域を作成すると鋭角な凹形状部に
加工モレが出来てしまうんです。(意図的にそんな形状にしたんです)
以前は、これを防ぐ為にCATIA上でチマチマGSDの機能で加工領域となる線を
作っていたのですが、やはり時間がかかりすぎなんです。
(ここが最初に記載した悩み部分)
サポートに相談したところ回答を頂いたものの、少し手順が複雑で間違えそうな
気配たっぷりで断念したのですが、PowerMillの機能的な面でヒントは頂きました。
まず、Φ10エンドミルでのツールパスを作成します。
赤印部分の小さな凹部分ですが、わかる方にはわかるのですが、
仕上がらない為に削除します。(意図的にそんな形状にしたんです)
続いてこのツールパスに対して、以下のマクロ実行します。
//pm2018 macro //Path2Rest_Boundary.mac Ver0.0.1 //ツールパスから削り残しバウンダリを作成 //--------------------------------------------------------------------------------------------------- //<?xml version="1.0" ?> //<menupage> // <button label="パスからバウンダリ作成" command='MACRO toolpath\Path2Rest_Boundary.mac "%s"' /> //</menupage> //--------------------------------------------------------------------------------------------------- //Path2Rest_Boundary Function Main(string tp) { //ユーザー選択 string tool = '' call SelectTool($tp , $tool) //パスアクティブ - blockの為 call Msgoff() activate toolpath $tp //ストックモデル string stk = '' call InitStockModel($tp , $stk) //バウンダリ call InitBoundary($stk , $tool) //終わり deactivate toolpath call Msgon() message info 'Done' } //工具選択 Function SelectTool(string tp , output string out) { string msg = "工具を選んでください" string tool = tool.name $tool = input entity tool $msg bool yn = 0 $msg = 'ツールパス [ ' + $tp + ' ] に対して 工具 [ ' + $tool + ' ] の' + crlf $msg = $msg + '削り残しバウンダリを作成しますか?' $yn = QUERY $msg if $yn != 1 { macro abort } $out = $tool } //ストックモデル Function InitStockModel(string tp , output string out) { string tmp = new_entity_name('stockmodel') string stk = '' call GetNewName('stockmodel' , 'from_' + $tp , $stk) CREATE STOCKMODEL ; FORM STOCKMODEL RENAME StockModel $tmp $stk entity stkmdl = entity('stockmodel' , $stk) $stkmdl.TOLERANCE = 0.01 $stkmdl.STEPOVER = 0.5 $stkmdl.ThresholdThickness = 0.2 FORM ACCEPT STOCKMODEL EDIT STOCKMODEL $stk DRAW REST UNDRAW StockModel $stk EDIT STOCKMODEL ; INSERT_INPUT TOOLPATH $tp LAST $out = $stk } //バウンダリ Function InitBoundary(string stk ,string tool) { string tmp = new_entity_name('boundary') //StockRest string stkrest = '' call GetNewName('boundary' , $stk + '_Rest', $stkrest) CREATE BOUNDARY ; STOCKMODEL_REST FORM BOUNDARY RENAME Boundary $tmp $stkrest EDIT BOUNDARY $stkrest STOCKMODEL $stk EDIT BOUNDARY $stkrest STOCKMODEL_THICKER "0.2" EDIT BOUNDARY $stkrest EXTEND "0.5" EDIT BOUNDARY $stkrest TOLERANCE ".02" EDIT BOUNDARY $stkrest LIMIT OFF call SetBoundary($stkrest ,$tool) //Silhouette string slete = '' call GetNewName('boundary' , $stk + '_Fin' , $slete) CREATE BOUNDARY ; SILHOUETTE FORM BOUNDARY RENAME Boundary $tmp $slete EDIT BOUNDARY $slete SILVERTICAL UP EDIT BOUNDARY $slete TOLERANCE "0.01" EDIT BOUNDARY $slete VERTTOLERANCE "0.01" EDIT BOUNDARY $slete LIMIT ON EDIT BOUNDARY $slete LIMIT INSIDE EDIT BOUNDARY $slete LIMIT_BOUNDARY $stkrest call SetBoundary($slete ,$tool) EDIT BOUNDARY $slete CALCULATE } //バウンダリ共通パラメータ設定 Function SetBoundary(string bou ,string tool) { EDIT BOUNDARY $bou THICKNESS AXIAL_RADIAL OFF EDIT BOUNDARY $bou THICKNESS "0.0" EDIT BOUNDARY $bou TOOL NAME $tool EDIT BOUNDARY $bou PRIVATE NO EDIT BOUNDARY $bou AUTOREPLAY NO EDIT BOUNDARY $bou IGNORE_HOLDER EDIT BOUNDARY $bou BLOCK_LIMIT PERIPHERY EDIT BOUNDARY $bou ACCEPT BOUNDARY ACCEPT return } //新たな名前の取得 Function GetNewName(string folder , string name , output string out) { if entity_exists(entity($folder ,$name)) < 1 { $out = $name } else { $out = new_entity_name($folder ,$name) } return } function Msgoff() { graphics lock dialogs message off dialogs error off } function Msgon() { graphics unlock dialogs message on dialogs error on }
実行時はこんな感じです。
実際の業務では、ゴチャゴチャした形状なのでこんなに短時間では処理が
終わらないのですが、それでも放置しておけば処理が終わるので
今までのチマチマ手法より遥かに楽で、今のところ加工モレも出ていません。
Space-eだと、チマチマ手法しか無いんですよね。