2018. 2. 7 2018年式ニンジャ1000 納車待ち 走行距離 0km
ML4  VBスクリプトやGコードを使う便利な操作方法


前書き
2018年式ニンジャ1000を昨年11月20日頃に、予約をし、今月の下旬には、納車の予定である。 従って、バイクの無い生活三昧(笑


構  成
1、VBスクリプト等とFISION360を使ったフライス盤の操作方法
 便利なプログラムの前に、私流のフライス盤の操作方法につき合ってください。忘備録になります。

2、You Tubeで見つけた、便利なVBスクリプト とGコード
3、Block center finder Gcode
4、VBスクリプトを動作させるボタンの作り方

5、作業を終えて

6、追記 2020/03/14サブプログラムによるヘリカル補間


1、VBスクリプト等とFISION360を使ったフライス盤の操作方法

No1 Mach3 Edge finder buttons(機械原点から、任意のワーク座標原点を作成する方法)

 Alt5画面の左下Please Select Edge Finder Location内の X軸のSelectボタンクリック(赤矢印)すると
Alt5右上のX軸Zeroが0(緑矢印)になり、移動した数値が、 Alt5画面中央のCurrent Work OffsetのX軸(橙の枠)に 入る。この動作をY軸もやる。
 次にAlt5画面のFixture1をクリックしG54をマッハにインプットする。
数値が確かにインプットされたかはAlt5右下にあるSave Work Offsetsボタン(水色矢印)をクリックすると 数値を確認できる。 あとは、マッハのStartボタンをクリックすると、変更後の G54により、切削する。

海外の動画サイト



No2 Mach3 The Center Finding Modification
 円の中心から円柱の内側エッジの機械座標をMACH3に読み込む手順

・Fusion360で作図した際、機械座標原点をワークの中心に設定
・Home
・All 0
・X50Y50ボタンクリックし、円の中心にセンサーを移動
・All
・Alt-5画面左下の円の中心ボタンをクリックして、センター出し
・Alt-5画面右上のXとYをクリックし座標を入力する。
・Zonlyクリック(これは、Screen4で作ったボタンにZ軸座標のみをHomeへ移動させる VBスクリプトを動作させるものです。)し、刃物の高さを入力
Z Only のVB
DoButton( 24 )
DoButton( 25 )
DoOEMButton(135)
・Home
・切削ファイルをMach3に読み込む
・Start


No3 Block center finder Gcode b>
 円柱や角物の外側から中心を見つける手順

・Home ,All 0,こうすると、全てがオール0となる。
・X50Y50 ボタンクリック
例えば、プログラムで検知しようとする移動距離をX軸で50mm、Y軸で50mm移動、
・フライス盤の刃物とワークの大よその中心とを合わせる。
・プログラム(No3 Block center finder Gcode)Start   これで、ワークの中心にフライス盤の軸が移動し、中心を求める動作が行われる。

Fusion360で事前にワーク座標中心をワークの中心に設定しておく。
刃物の高さをZ軸のタッチセンサーボタン出だす。
Alt-5画面右上のXとYをクリックしワーク原点を決める。
・Homeにもどる
切削プログラムをスタート


2、You Tubeで見つけた、便利なVBスクリプト
バイクの無い生活となり、CNCフライスにとって便利なVBスクリプトが無いかな?と、You Tubeを検索したら、
上手くヒットしたのが、以下のサイトです。 ↓
No1 Mach3 Edge finder buttons
No2 Mach3 The Center Finding Modification
No3 Block center finder Gcode
各VBスクリプト等は、以下のとおり。自分なりに修正したものもある。
修正した理由は、スクリプトエラーを起こしたからだ。

No1 Mach3 Edge finder buttons

動作は、角物のエッジをセンサーにより機械座標を出すプログラムです。
MACH3のOffSets(Alt-5)の画面の、左下側にある4つの「Select」 ボタンをクリックしVBスクリプトをペーストすれば使えるようになります。

G31 とは
主軸にタッチセンサを装着して、被加工物に接触させ、その位置情報より、穴径寸法の計測は基準穴の芯出しを行う機能を有するNC工作機械も知られている。
この計測機能や芯出し機能には、スキップ機能(G31)というGコード指令が使用されている。このスキップ機 能(G31)とは、このGコードに続く軸移動指令の途中で、
スキップ信号(タッチセンサよりのタッチ信号等) が入力されると、この軸移動指令の残りを中断して、次ブロックの指令を実行する。そして、NC装置は、スキッ プ信号入力時の位置情報を利用して、寸法計測や芯出しを行うのである。



Rem VBScript To probe bottom edge
If GetOemLed (825) <> 0 Then
Code "(Probe plate is grounded, check connection and try again)"
Else
FeedCurrent = GetOemDRO(818)'現在の設定を取得する
XCurrent = GetDro(0)
YCurrent = GetDro(1)
Code "G4 P1" ;G4 とはそのままの状態で指定時間待機させるGコードです。G4P1で1秒待つらしい
Code "F100" ;F100とは、1分間に100mmの速度で座標上を移動します
Code "G31 Y" &YNew
While IsMoving()
Wend
YPos1= GetVar(2001);プローブのタッチ位置を取得
Code "G0 Y" &YCurrent
Code "F" & FeedCurrent
Call SetDro(1,Abs(getoemdro(1000))/(-2))
End If
Rem End of To probe bottom edge script.

Rem VBScript To probe LH edge
If GetOemLed (825) NE 0 Then 'Check to see if the probe is already grounded or faulty
Code "(Probe plate is grounded, check connection and try again)"
Else
FeedCurrent = GetOemDRO(818) '現在の設定を取得する
XCurrent = GetDro(0) ←Standard DROsで、「0」は、X軸
YCurrent = GetDro(1)
Code "G4 P1" 'Pause 1 second to give time to position probe plate
Code "F100" 'slow feed rate to 100 mmpm Rem Probe Right
XNew = XCurrent + 75 'probe 75 mm to right
Code "G31 X" &XNew
While IsMoving()
Wend
Code "F" &FeedCurrent 'restore starting feed rate
Call SetDro (0,Abs(getoemdro(1000))/(-2))
End If
Rem End of To probe LH edge VBscript

Rem VBScript To probe RH edge
If GetOemLed (825) NE 0 Then 'Check to see if the probe is already grounded or faulty
Code "(Probe plate is grounded, check connection and try again)"
Else
FeedCurrent = GetOemDRO(818) 'Get the current settings
XCurrent = GetDro(0)
YCurrent = GetDro(1)
Code "G4 P1" 'Pause 1 second to give time to position probe plate
Code "F100" 'slow feed rate to 100 mmpm Rem Probe Right
XNew = XCurrent - 75 'probe 75 mm to left
Code "G31 X" &XNew
While IsMoving()
Wend
Code "F" &FeedCurrent 'restore starting feed rate
Call SetDro (0,Abs(getoemdro(1000))/(+2))
End If
Rem End of To probe RH edge VBscript

Rem VBScript To probe top edge
If GetOemLed (825) <> 0 Then 'Check to see if the probe is already grounded or faulty
Code "(Probe plate is grounded, check connection and try again)"
Else
FeedCurrent = GetOemDRO(818) 'Get the current settings
XCurrent = GetDro(0)
Current = GetDro(1)
Code "G4 P1" 'Pause 1 second to give time to position probe plate
Code "F100" 'slow feed rate to 100 mmpm Rem Probe up
YNew = YCurrent - 75
Code "G31 Y" &YNew
While IsMoving()
Wend
YPos1 = GetVar(2001)
Code "G0 Y" &YCurrent
Code "F" &FeedCurrent 'restore starting feed rate
Call SetDro (1,Abs(getoemdro(1000))/(+2))
End If


No2 Mach3 The Center Finding Modification
動作は、円柱形の内側のエッジをセンサーにより機械座標を出すプログラムです。
MACH3のOffSets(Alt-5)の画面の、左下側にある十字クロスの ボタンをクリックしVBスクリプトをペーストすれば使えるようになります。

Call SetDRO(0,0)←X軸を「0」にセット。
Call SetDRO(1,0)←Y軸を「0」にセット。
Call SetDRO(0,0)
Call SetDRO(1,0)
If GetOemLed (825) <> 0 Then 'Check if the probe is already grounded or faulty
Code "(Probe plate is grounded, check connection and try again)"
Else
FeedCurrent = GetOemDRO(818) 'Get the current settings
XCurrent = GetDro(0)
YCurrent = GetDro(1)
Code "G4 P1" 'Pause 1 second to give time to position probe plate
Code "F4" 'slow feed rate to 4 ipm (make F25 if using mm)
Rem Probe Left
XNew = Xcurrent - 3 'probe 3 inches to left
Code "G31 X" &XNew
While IsMoving() 'wait for the move to finish
Wend
XPos1 = GetVar(2000) 'get the probe touch location
Code "G0 X" &XCurrent 'rapid move back to start point
Rem Probe Right
XNew = XCurrent + 3 'probe 3 inches to right
Code "G31 X" &XNew
While IsMoving()
Wend
XPos2 = GetVar(2000)
XCenter = (XPos1 + XPos2) / 2 'center is midway between XPos1とXPos2の間にある
XPos1 and XPos2
Code "G0 X" &XCenter 'rapid move to the x center location
Rem Probe up
YNew = YCurrent + 3
Code "G31 Y" &YNew
While IsMoving()
Wend
YPos1 = GetVar(2001)
Code "G0 Y" &YCurrent
Rem Probe down
YNew = YCurrent - 3
Code "G31 Y" &YNew
While IsMoving()
Wend
YPos2 = GetVar(2001)  ← ↓の※を参照
YCenter = (YPos1 + YPos2) / 2
Code "G0 Y" &YCenter 'rapid move To the center location
While IsMoving ()
Wend
Code "F" &FeedCurrent 'restore starting feed rate
End If


※How to get Data from a Probe

プローブサイクルからデータを取得する方法
プローブサイクルが完了すると(G31)、プローブがマテリアルに接触する点がマッハに保存されます。
DROは正しいプローブ位置ではありません! DROが正しい位置にない理由は、軸が即座に停止できないためです。
プローブを押すと、プローブがヒットしたポイントを超えて停止するまで減速する必要があります。
正しいプローブ位置は "Var"として保存されます。 Varsは次のとおりです。 Var(2000)= X
Var(2001)= Y
Var(2002)= Z


No3 Block center finder Gcode
以下のプログラムは、VBマクロとGコードを使ったプログラム。
動作は、角物や丸物の中心を見つけて、インクレメント座標を出してくれます。

切削までの手順
方法は2つ
A、G28を使わない方法(ワーク原点からスタートさせる)
B,G28を使う方法(機械原点からスタート)

A、G28を使わない方法
・Home(機械座標原点)に行き、All 0にセット
・機械原点から、約X-50,Y+50の位置に、ワークの中心をセット
・No3でセンターだし ・Alt5画面のワーク座標XとYに0をセット。
 Z軸機械原点だし
・Aout Tool 0クリック
・Alt5画面右下のSave W prk Offset クリック

・FUSION360のポスト処理するときは、C28使わないにします。


G28使わないにすると、G54  ワーク座標系で切削してくれます。

切削スタート







 G31 Z-30 f15とは、
この例のコマンドラインでは、現在の位置から15mm/分の送り速度でz = -30の絶対位置まで移動し、 プローブ入力がアクティブになると直ちに停止します

プローブ入力がアクティブになると、すべての軸の現在の位置がキャプチャされ、モーションは制御された方法で停止まで減速します。 Mach3変数2000-2005がキャプチャされた位置で埋められます。 G31 Z-4.0 F40(Zプローブ)
G1 Z#2002(トリップポイントに戻る)
M30


B,G28を使う方法

・Home(機械座標原点)に行き、All 0にセット
・機械原点から、例、X75 Y60をクリック、指定の位置に、ワークの中心をセット
・No3 Block center finder Gcodeでセンターだし ・Alt5画面のワーク座標XとYに0をセット。
 Z軸機械原点だし
・Aout Tool 0クリック
・Alt5画面右下のSave W ork Offset クリック
・HOMEに戻っても良いが、戻らずにその場でスタートしても良い
・切削スタート


日本語を除いて、コピペして使える!!!!!!!!

#1=0;#1ゼロに設定します。 #1~#4は決まり文句
#2=0;#2プローブがアクティブになるのを待つ
#3=0;#3は、定義された軸の現在の位置をサンプリングします(50-61の倍数として)
#4=0;#4はプローブが非アクティブであるかどうかに応じてステータスを1または2に設定します
#5=-100 (X-rh)
#6=0 (X-lh)
#7=100 (Y-top)
#8=0 (Y-bot)
#9=0 (good x-ctr)
#10=0 (good Y-ctr)
#17=0 (Z-ref)
#18=4 (edge clearances)

#11=[[#5-#6]/2] (nominal X-value of block center)
#12=[[#7-#8]/2] (nominal Y-value of block center)
#13=-3.5 (ブロック天端から下方にZ値3.5mm)
#14=3 (probe tip radius)

#15=[#5-#6] (nominal width X-dir)
#16=[#7-#8] (nominal height Y-dir)

;ブロックセンターに移動
G0 X#11 Y#12 (ブロックセンターに移動)
G31 Z-30 f15 (probe Z-ref)
G0 Z[#2002+3] (move above block)
#17=#2002

;probe +X side of block
g0 X[#11+#15/2+#14+#18] (move past +X-edge)
g0 Z[#13+#17] (descend below surface)
G31 X[#11 - #15] (probe +X side of block)
#5=[#2000-#14] (RH edge)
g0 Z[#17+3]

;ブロックセンターに移動
G0 X#11 Y#12 (ブロックセンターに移動)

;probe -X side of block
g0 X[#11-#15/2-#14-#18] (move past -X-edge)
g0 Z[#13+#17] (descend below surface)
G31 X[#11 + #15] (probe -X side of hole)
#6=[#2000+#14] (LH edge)
#9=[[#5 + #6] / 2.0] (good X-block center)
g0 z[#17+2]
#1=[#5-#6] (+RH edge + -LH edge - +tool dia = Xwidth)

;################################################

;move to nominal block center
G0 X#9 Y#12 (back to center of block)

;probe +Y side of block
g0 Y[#12+#16/2+#14+#18] (move past +Y-edge)
g0 Z[#13+#17] (descend below surface)
G31 Y[#12 - #16]
#7=[#2001-#14] (Top edge)
g0 Z[#17+2]

;move to nominal block center
G0 X#9 Y#12 (back to center of block)

;probe +Y side of block
g0 Y[#12-#16/2-#14-#18] (move past -Y-edge)
g0 Z[#13+#17] (descend below surface)
G31 Y[#12 + #16] (probe -Y side of block)
#8=[#2001+#14] (Bot edge)
#10=[[#7 + #8] / 2.0] (good Y-value block center)
g0 Z[#17+2]
#2=[#7-#8] (Top edge - Bot edge - tool dia = Yheight)

g0 x#9 y#10 (go to XYctr)
M30(エンドオブプログラム)



3、VBスクリプトを動作させるボタンの作り方


Screen4で1024ファイルを開き、 スラッシュの入ったボタンをクリックし、背景の一部を消します.
赤丸ボタンをクリック、コピーをクリック、貼り付けたい箇所をクリック、すると、 ボタンが出来ます。



作ったボタンをダブルクリックすると画面が現れるので、VBにチェック、ボタンに任意の名称、OKをクリック
ラベルの名称変更
Screen4で開き、スラッシュの入ったボタンをクリックし、背景を消し、変更したいラベルをダブルクリックすると
Button Controlの画面が現れるので、Button/Label Textの枠内の文字を訂正する。そして、保存し終わり。




4、作業を終えて



上記のVBスクリプト等により、エッジや心出しをする以前は、 手作業でセンサーを使い0を出して、
位置決めをしていましたが、どうしても不慣れな為、今一の精度でしたが、前記の方法にしてからは、
精度の高さが上がりました(^^♪
大変便利になると思います。


サブプログラムによるヘリカル補間

主軸右回転で下方へカット

(herical M8tap)
(Initial Value)
#1=0;
#2=1.25;(Screw Pitch)
#3=[#2/2];
#4=0;(xPos)
#5=0;(yPos)
#6=[4.13-2.9];(Screw_r+H/8_cutter_r)
#7=[#4+#6];(arc_Pos)
#8=[#4-#6];(-arc_Pos)
#9=-12;(Drill_Bottom)
#10=120;(tap_S)
#11=[#10*#2];(Tap_F)
#12=1250;(Drill_S)
#13=6.8;(Drill_r)
#14=[[[#9*-1]-[#13*0.4]]/#2];(Tap_Turn)
#15=30;(Drill_F)

(Initial setting);
G17 G80 G49;
G28 G91 Z0;
G90;

N1;(drill D5)
M7;(Mist_On)
S#12 M3
G54
(Dril Cycle)
G98 G83 X#4 Y#5 Z#9 R2 Q2 F#15;(Q:Dril_Pich)
G80

G28 G91 Z0;
G90;
M5;
M9;
M00;(Pouse)

N2;(Herical)
(Initial setting)
M7;(Mist_On)
M3 S#10;
G54 G0 X#4 Y#5 Z2;(Pos)
M98 P3 L#14;(Sub3 Program Call)
M5;
G0 X#4 Y#5
Z5;

(Return To Origin);
M9
G28 G91 Z0.
G28 X0. Y0.
S20;
M30;(End)

(Sub3 TAP Pitch=1)
O3;
#1=[#1-#3];
G17 G02 G90 X#7 Y#5 Z#1 R#6 F#11;(arc)
#1=[#1-#3];
G17 G02 G90 X#8 Y#5 Z#1 R[-1*#6] F#11;(-arc)
M99;


カッター軸がねじの下穴の壁に当たらないように確認!!


最下点から上側にカット
(herical M8tap)
(Initial Value)
#1=8;(Drill_r)
#2=1.25;(Screw Pitch) #3=[#2/2];
#4=0;(xPos)
#5=0;(yPos)
#6=[4.13-2.9];(Screw_r+H/8_cutter_r)
#7=[#4+#6];(arc_Pos)
#8=[#4-#6];(-arc_Pos)
#9=-12;(Drill_Bottom)
#10=120;(tap_S)
#11=[#10*#2];(Tap_F)
#12=[[#9*-1]/#2];(Tap_Turn)
#13=1250;(Drill_S)
#14=30;(Drill_F)
#15=[#9+[0.4*#1]];(Tap_bottm)
M5;
(Initial setting);
G17 G80 G49;
G28 G91 Z0;
G90;
N1;(drill D5)
M7;(Mist_On)
S#13 M3
G54
(Dril Cycle)
G98 G83 X#4 Y#5. Z#9 R2 Q2 F#14;(Q:Dril_Pich) G80
G28 G91 Z0;
G90;
M5;
M9;
M00;(Pouse)
N2;(Herical_tap)
(Initial setting)
M3 S#10;
G54 G0 X#4 Y#5;(x_Pos_Y_Pos)
G0 Z#15;
M98 P3 L#12;(Sub3 Program Call)
G0 X#4 Y#5;
S20;
G0 Z5;
(Return To Origin);
G28 G91 Z0.
G28 X0. Y0.
M30;(End)
(Sub3 TAP)
O3;
#15=[#15+#3];
G17 G03 G90 X#8 Y#5 R#6 Z#15 F#11;(-arc)
#15=[#15+#3];
G17 G03 G90 X#7 Y#5 R#6 Z#15 F#11;(arc)
M99;




【このページのTOPに戻る】 inserted by FC2 system