C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA(最近はPMillマクロとFusion360APIが多い)

加工前チェック用ツールパスの作成

マシニングセンターで加工する前に材料の位置やサイズ、ワーク座標系等
どうやって確認するのが一般的なんでしょうか?(・・・知りたい)

これらのミスでオシャカを作った場合(だけではないと思いますが)対策書を
書かされる企業も多くあるかと思いますが、大半の対策は「よく確認する」に
なってしまうのも本音なところw

僕のところでは暗黙的なルールとして、材料の天面をクルッと走らせるだけの
簡単なツールパスを走らせて確認しています。こんな感じの緑の線です。
f:id:kandennti:20180221192411p:plain
機械が一生懸命仕事をしているのを拝んでる暇が無いので、この確認だけで
あとは放置です。基本的に。

実はこんな簡単なツールパスなのですが、PowerMillでは空中に浮いている
無意味なものを作るのが結構難しい?面倒?なのです。

そこでマクロを利用し手っ取り早く作れるようにしました。

//pm2018 macro
//チェックパス作成

function Main(string toolname) {
	bool yn = 0
	string msg = '' 
	string pro_ptf_path = 'check_path.ptf' 

	//Planesモデルチェック
	if entity_exists(entity('Model','Planes')) > 0 {
		$msg = 'Placesモデルを削除しマクロを実行しますか?'
		$yn = QUERY $msg
		if $yn < 1 {
			return
		} else {
			Call Del_Planes()
		}
	}

	//**ユーザー選択**
	//モデル
	$msg = '参照モデルを選択してください'
	string list models = input entity multiple model $msg
	if is_empty(models) {
		return
	}
	
	//平面高さ
	$msg = '平面高さを入力して下さい'
	real Top = -1
	call InputReal($Msg, Block.Limits.ZMax, $Top )
	if $Top  < 0 {
		return
	}	
	
	//確認
	$msg = '工具 [ ' + $toolname +' ]  高さ [ ' + $Top+' ] で作成しますか?' 
	$yn = QUERY $msg
	if $yn  < 1 {
		return
	}	
	
	//**処理**
	call DialogOff()
	
	//ダミー面作成選択
	call Deactivete_All()
	call Select_Models(models)
	call Setting_Block($Top)
	call Init_Plane($Top)
	EDIT MODEL "Planes" SELECT ALL
	
	//工具
	ACTIVATE TOOL $toolname
	real offset_lng = tool.Diameter / 2 * -1
	
	//チェックパス作成
	call Inport_strategy($pro_ptf_path, $offset_lng) 

	//ダミー面削除
	Call Del_Planes()
	
	call DialogOn()
	
	message info 'Done'
}

//ストラテジー呼び出し・計算
function Inport_strategy(string path, real offsetlng) {
	string newToolpath = new_entity_name('Toolpath')
	
	IMPORT TEMPLATE ENTITY TOOLPATH TMPLTSELECTORGUI $path
	EDIT PAR 'RadialOffset' $offsetlng
	EDIT TOOLPATH SAFEAREA CALCULATE_DIMENSIONS
	EDIT TOOLPATH $newToolpath CALCULATE
	FORM ACCEPT SFPatternProf
	
	string rename = new_entity_name('Toolpath','check')
	RENAME Toolpath $newToolpath $rename
	
	// DRAW Toolpath $rename//表示はお好みで
}

//Planes モデルとレベルの削除
function Del_Planes() {
	DELETE MODEL "Planes"
	DELETE LEVEL "Planes"
}

//ダミー面作成
function Init_Plane(real top) {
	CREATE PLANE ; $top
}

//ブロック修正
function Setting_Block(real top) {
	FORM BLOCK
	EDIT BLOCK ALL UNLOCK
	EDIT BLOCKTYPE BOX
	EDIT BLOCK COORDINATE WORKPLANE
	EDIT BLOCK RESETLIMIT "0"
	EDIT BLOCK TOLERANCE "0.1"
	EDIT BLOCK LIMITTYPE MODEL
	EDIT BLOCK RESET
	EDIT BLOCK ZMAX $top
	BLOCK ACCEPT
	
	EDIT MODEL ALL DESELECT ALL
}

//指定モデル面の選択
function Select_Models(string list models) {
	EDIT MODEL ALL DESELECT ALL
	foreach mdl in $models {
		EDIT MODEL $mdl SELECT ALL
	}
}

//非アクティブ_非表示 - 作業平面は行わない,レベルの非表示は行わない
function Deactivete_All() {
	DEACTIVATE NCPROGRAM
	DEACTIVATE TOOLPATH
	DEACTIVATE TOOL
	DEACTIVATE BOUNDARY
	DEACTIVATE PATTERN
	DEACTIVATE FEATURESET
	DEACTIVATE FEATUREGROUP
	DEACTIVATE LEVEL
	DEACTIVATE STOCKMODEL
	DEACTIVATE GROUP
	
	UNDRAW NCPROGRAM ALL
	UNDRAW TOOLPATH ALL
	UNDRAW TOOL ALL
	UNDRAW BOUNDARY ALL
	UNDRAW PATTERN ALL
	UNDRAW FEATURESET ALL
	UNDRAW FEATUREGROUP ALL
	UNDRAW STOCKMODEL ALL
	UNDRAW GROUP ALL
}

//数値入力 不正時は-1を返す
function InputReal(string Msg, real Defreal, output real  Outreal) {
	$Outreal = -1
	real res = $Defreal
	$res = input $Msg
	bool err = 0
	$err = error $res
	if $err {
		message error '数値を入力して下さい!'
		return
	} 
	if $res <=0 {
		message error '0以上の数値を入力して下さい!'
		return
	} 	
	$Outreal = $res
}

//ダイアログ類オン
function DialogOn() {
	GRAPHICS UNLOCK
	DIALOGS MESSAGE ON
	DIALOGS ERROR ON
	ECHO ON DCPDEBUG TRACE COMMAND ACCEPT
}

//ダイアログ類オフ
function DialogOff() {
	GRAPHICS LOCK
	DIALOGS MESSAGE OFF
	DIALOGS ERROR OFF
	ECHO OFF DCPDEBUG UNTRACE COMMAND ACCEPT
}

ツールパスを作成する工具のコンテキストメニューからの呼び出し用のマクロです。
又、本マクロ以外に「輪郭加工仕上げ」機能を有る程度設定している
ストラテジーファイル(PTFファイル)が同一フォルダ内に必要です。
(ので、他人には全く無意味なマクロになっています)

実際に利用した感じはこちらです。

制限です。
・一時的にPowerMill内で平面を作成し、ツールパスを作成しています。
 最後に全ての一時的な面を削除している為、同機能を使用し作成された面は
 全て削除されてしまいます。

・本ツールパスは「輪郭加工仕上げ」機能を使用し作成されます。
 この機能は参照する面を選択して使用する機能ですが、一時的に作成した面を
 削除して終了する為、ツールパス自体の再計算が出来ません。
 (「送り/速度」「ツールパスコネクター」での再設定は可能です)
 その為、修正が必要な場合はマクロを再実行する必要が有ります。