Login          

カスタムマクロで段取り支援

カスタムマクロで段取り支援

オプション扱いの場合もありますが、CNC制御にはNCデータを操作したり、制御機のデータを読み書きしたりできる、マクロと呼ばれているプログラム機能があります。
マクロは、簡易的ですがプログラミング的な言語構造と変数を使用できるため、NCプログラムをパラメータ化して汎用的なプログラムを作成する事ができます。
ただし、制御機によってプログラム構文は違うため、違う制御機での互換性はありません。
今回はマクロの使用例として、ファナック系カスタムマクロのシステム変数から、座標系設定など段取りに利用できそうなマクロプログラムを作成してみます。

ファナック・カスタムマクロ

一例としてワーク原点や工具情報の設定など、段取り支援プログラムを作成してみようと思います。
カスタムマクロはプログラムの一種なので言語的規則がありますが、ここでは基本的な構造や文法など掘り下げて説明はしていません。
また今回の例では、変数以外の構文はそれほど使用しません。
変数への代入・読み込み程度で作成するので、プログラミング的な知識はそれほど必要ありません。
言語的トレーニングは、工作機メーカーさんのセミナーやネット上にも沢山情報があると思うので、興味ある方はそちらを参照してみてください。

変数

カスタムマクロに限らず、プログラム言語には「変数」という、ある期間データを記憶してく識別名があります。
この「変数」にデータを代入する事で、パラメータとして汎用的に使用する事ができるプログラムを作成する事ができます。
通常のプログラム言語では「変数」には、「数値」や「文字」などいろいろな「データ型」を代入する事ができますが、ファナックのカスタムマクロは「数値」しか代入できません。
このことからも、複雑なプログラムを行う言語ではなく、NCデータをパラメータ化して、汎用的なNCに進化させる言語だといえます。

カスタムマクロの変数

ファナックの変数は、「#」+「数字」の形しか使用できません。
さらに、数字の範囲により、「ローカル変数」「コモン変数」「システム変数」と分類されています。
さらに、マクロ呼び出しで数値を引数で渡す場合、非常にわかりづらい仕様になっています。
こういった制限のため、コメントをうまくつけないと、他人のマクロや自分作でも時間がたつと、理解できないプログラムになってしまいます。
CAMがまだ普及していなかった時代には、その使いづらさにも負けず、マクロを駆使して穴あけやポケット加工を汎用化して生産性をあげている削り屋さんがいましたね~
興味あるかたは、ネットなどで検索してください。
便利なマクロが落っこちているかも?しれませんよん!
ここでは、主に「ローカル変数:#1~#33」と「システム変数:#1000以上」のみでプログラムしてみようと思います。

変数への代入と使用方法

代入方法は、「# 数字」=「数値」となります。

#1 = 100.123
#2 = -50.987
と定義する事で、#1 と #2 に右辺のデータが記憶されます。
この変数を通常のNCプログラムに使用すると、通常の定数指示と同様に使用する事ができます
G01 X#1 Y#2 F2000 → G01 X100.123 Y-50.987 F2000 と同様

演算

「変数」は四則演算や三角関数など、ある程度の演算機能ももっています
うまくマクロで演算させる事で、マクロ内で面倒な計算をさせる事ができます。
例えば、主軸の回転数は、切削速度(Vc)と工具径(D)から次の計算式で求める事ができます。

この計算式を使い、工具径と切削速度を変数に代入する事で、主軸回転数を自動的に計算するマクロを作成してみます。

%
O1000
G90G00G17G40G80G49
(++++++++++++++++++++)
#1=1.   (Tool)
#2=10.3 (Dia)
#3=20.  (Vc)
(+++++++++++++++++++)
#10=[ #3 * 1000. / 3.14 / #2 ] (SP)
(+++++++++++++++++++)
G54
N0001
T#1
M06
G90G00X0Y0
G43Z100.H#1
Z50.0
S#10 M03
M08
G98G83R5.0Z-20.0Q10.0F120L0
X10.0 Y0
X20.0 Y0
X30.0 Y0
G80
M09
G91G28Z0
G91G49Z0
G90M05
M30
%

こんな感じですね。
上部の、#2,#3 の工具径と切削速度の変数を編集する事で、自動的に回転数を決定できます。
また、#1に工具番号を設定しますが、工具番号と工具長補正番号に一定のルール(この例題の場合では、T番号=H番号)がある場合には、H番号も変数化できます。
このように、変数を利用してパラメータ化する事で、汎用的なプログラムを作成する事ができます。
今回は、3つの変数しか使用していませんが、変数が「#」+「数値」の形なので変数が多くなると、変数が何を示しているのかわからなくなってきます。
そんな意味でも変数はなるべく利用者が分かりやすいように、上部にまとめて、コメントを入れておくことをお勧めします。
マクロプログラムに慣れてくると、ポケット加工やヘリカル穴あけなどよく使う形状はCAMなしでも利用できるようになります。
具体例は、ネット上でも公開されていますので、検索してみてください。

システム変数

システム変数」は、工具情報や現在位置ワーク座標系位置など制御機の内部データが記録されている、特殊な変数です。
この変数を操作する事で、段取り時に必要な、工具長補正値設定、ワーク座標系設定などをプログラム化する事ができます。
下記、手元の資料を抜粋しますが、制御機のバージョンやオプションの状況により変数番号が変わる場合があります。
もし、実際に使用する場合には、お使いの制御機の取説でご確認ください。

工具補正量

  • 変数番号の範囲は、補正番号
    (例)D01 : #2001  D02 : #2002
    ——————————————————————
  • 工具補正メモリA
    #2001 ~ #2200
    #10001 ~ #10999
    ——————————————————————
  • 工具補正メモリB:パラメータNo.6000#3=0
    #2001 ~ #2200 : 工具補正量(摩耗)
    #10001 ~ #10999
    ——————————————————————
    #2201 ~ #2400 : 工具補正量(Hコード・形状)
    #11001 ~ #11999
    ——————————————————————
  • 工具補正メモリB:パラメータNo.6000#3=1
    #2001 ~ #2200 : 工具補正量(形状)
    #10001 ~ #10999
    ——————————————————————
    #2201 ~ #2400 : 工具補正量(Hコード・摩耗)
    #11001 ~ #11999
    ——————————————————————
  • 工具補正メモリC:パラメータNo.6000#3=0
    #2001 ~ #2200 : 工具補正量(Hコード・摩耗)
    10001 ~ #10999
    ——————————————————————
    #2201 ~ #2400 : 工具補正量(Hコード・形状)
    #11001 ~ #11999
    ——————————————————————
    #12001 ~ #12999 : 工具補正量(Dコード・摩耗)
    #13001 ~ #13999 : 工具補正量(Dコード・形状)
    ——————————————————————
  • 工具補正メモリC:パラメータNo.6000#3=1
    #2001 ~ #2200 : 工具補正量(Hコード・形状)
    10001 ~ #10999
    ——————————————————————
    #2201 ~ #2400 : 工具補正量(Hコード・摩耗)
    #11001 ~ #11999
    ——————————————————————
    #2401 ~ #2600 : 工具補正量(Dコード・形状)
    #12001 ~ #12999
    ——————————————————————
    #2601 ~ #2800 : 工具補正量(Dコード・摩耗)
    #13001 ~ #13999

位置情報

  • 変数番号の範囲は、軸番号
    (例)X軸の現在位置:#5021 Y軸の現在位置:#5022 Z軸の現在位置:#5023
    ——————————————————————
  • 直前の終点位置(ワーク座標系)
    #5001 ~ #5020
    ——————————————————————
  • 現在位置(機械座標系)
    #5021 ~ #5040
    ——————————————————————
  • 現在位置(ワーク座標系)
    #5041 ~ #5060

ワーク座標系の機械座標系からのオフセット量

  • 変数番号の範囲は、軸番号
    (例)G54のX軸の機械座標系位置:#5221 Y軸の現在位置:#5222 Z軸の現在位置:#5223
    ——————————————————————
  • G54ワーク原点オフセット量
    #5221 ~ #5240
    ——————————————————————
  • G55ワーク原点オフセット量
    #5241 ~ #5260
    ——————————————————————
  • G56ワーク原点オフセット量
    #5261 ~ #5280
    —————————————————————–
  • G57ワーク原点オフセット量
    #5281 ~ #5300
    —————————————————————–
  • G58ワーク原点オフセット量
    #5301 ~ #5320
    —————————————————————–
  • G59ワーク原点オフセット量
    #5321 ~ #5340
    —————————————————————–
    —————————————————————–
  • G54.1P1 拡張ワーク原点オフセット量
    #7001 ~ #7020
    —————————————————————–
  • G54.1P2 拡張ワーク原点オフセット量
    #7021 ~ #7040
    —————————————————————–
  • G54.1P3 ~
    #7041 ~
    —————————————————————–
    —————————————————————–

ワーク上面をワーク座標系Z座標に登録するマクロを作成してみましょう!

加工段取りで、素材(ワーク)を機械テーブルへ載せた後は、その素材の位置関係を機械へ教えてあげる必要があります。
最近では、座標系はワーク座標系を使用する方法が一般的だと思いますので、ワーク座標系のシステム変数を操作してみようと思います。
これから作成するマクロは、主軸端面が素材上面へ接触する位置を、ワーク座標系の「Z0.000」として登録するマクロを作成してみます。

工具長既知のマスター工具を用意する

これから作成するマクロは、すでに工具長がわかっている工具(マスター工具)を利用します。
必ずしも専用マスター工具を用意する必要はなく、すでに工具長が制御機の工具長補正項目に登録されている工具でOKです。
工具長補正値は、主軸端面からマスター工具先端までの長さがプラス値で入っている仕様だとします。
専用マスター工具は必須ではありませんが、基準工具として、マスター工具を用意しておいたほうが便利な場面もあるで、ATCに余裕があれば準備しておくことをお勧めします。
もし、工具長既知の工具がない場合、手動による、工具長補正データの登録方法を以前に説明してありますので、下記を参考にしてみてください。

マスター工具先端とワーク上面(素材)を合わせる

まずは手動で主軸端面とワーク上面を合わせる場合を考えてみます。
マスター工具を主軸へ呼び出し、ワーク上面へ置いた長さ既知のゲージへ接触する直前位置まで工具をおろします。
強く接触させてしまうと、マスター工具が破損してしまうので、十分注意いて、ブロックゲージを動かしながら接触位置を確認してください。

この時点での、機械座標系を読み取ります。
主軸端面がワーク上面へ接触する位置は、現高さから
「ブロックゲージ高さ(50.000)」+「マスター工具長」だけ下がった位置となります。
「Zワーク座標」=「現機械座標値」-「ゲージ厚」-「マスター工具長」
になります。
この値を、使用するワーク座標系Z値へ登録すればOKですが、この作業をマクロにやらせてみようと思います。
X、Yの原点は、すでに使用ワーク座標系に登録済みとします。

%
O8001(SET TO WORK Z)
(--------------------)
#1=54. (WORK COORDINATE)
#2=50. (GAUGE)
#3=29. (MASTER T-NO)
#4=29. (MASTER H-NO)
(--------------------)
#11=#0
#12=#0
#13=#0
(--------------------)
G17G00G90
T[#3]M6
G#1X0Y0
#3006=1(Z MEASURE)
M00
#11=#[11000+#4] (LENGTH OF MASTER TOOL)
#12=#5023-#2 (CURRENT_MACHINE_Z - GAUGE)
#13=[#1*20+4143] (Z OF WORK COORDINATE NUMBER)
#[#13]=#12-#11
G91G28Z0
M30
%

こんな感じでしょうか?
一つ、#3006=1(****)という特殊な変数を使用しています。
これは、(****)の文字列を画面に表示して停止する変数です。
ここでは、画面に「Z MEASURE」を表示して停止するので、ハンドルモードでマスター工具先端を、ブロックゲージ上面に合わせる操作を促しています。
#11=#[11000+#4] は、#11=#11029 となりますね。
#11029 は上記のシステム変数リストで確認してください。
今回は「工具補正メモリB:パラメータNo.6000#3=1」の機械の場合を想定しています。
H29 の補正に登録されているデータを、#11に代入するの意味となります。
次の、#12=#5023-#2 は、#5023が現在のZ機械座標ですから、
「現機械座標値」-「ゲージ厚」を#12に代入する意味となります。
つまり、T29(マスター工具)の先端が、ワーク上面と接触する位置となります。
#13=[#1×20+4143] がちょっとポイントでしょうか?
上記のシステム変数のリストから、ワーク座標系・G54のZ値は、#5223です。
G55のZ値は、#5243ですね。
ワーク座標系番号が増えると、システム変数値は、20 増えています。
したがって、ワーク座標番号からシステム変数を求める方法は、
システム変数=「ワーク座標系番号」× 20 + 4143 で求められますね。
G54の場合、#13 = 54×20+4143 = 5223 となります
#[#13] は、#5223 と同じ意味です。
整理すると、
#11 が、マスター工具長
#12がマスター工具がワーク上面と接触する位置なので
主軸端面が、ワーク上面と接触する位置は、#12-#11 となります。
この値を、使用するG54のZ値:#5223代入する事で、G54ワーク座標系のZ値を設定できます。

実際の操作は、マスター工具に交換して停止したのち、ハンドルモードへ切換、マスター工具先端を、ブロックゲージ上面に合わせ、再度メモリモードでサイクルスタートすれば、ワーク(素材)上面の機械座標系Z値が、ワーク座標系へ登録されます。

工具の長さを工具長補正へ登録する

次に、使用する工具の長さを測定し、工具長補正番号へ登録するマクロを作成してみましょう。
方法の概略は

  • 事前にワーク(素材)原点・上面のワーク座標系を設定しておく
  • 長さ既知の工具(マスター工具)を使用する
  • 測定したい工具と工具交換し、ハンドルモードで、ブロックゲージと接触するZ位置へ移動する。
  • その時の、Z軸機械座標位置とマスター工具の接触位置との差により、対象の工具の長さを求める
  • 求めた長さを、工具長補正番号へ入力する

こんな感じのマクロを作成してます。

%
O8002(MEASURE TOOL LENGTH)
(--------------------)
#1=54. (WORK COORDINATE)
#2=50. (GAUGE)
#3=1. (T-NO)
#4=1. (H-NO)
#5=29.(MASTER_TOOL_H-NUMBER)
(--------------------)
#11=#0
#12=#0
#13=#0
#14=#0
(--------------------)
#11=[#1*20+4143] (Z of work coordinate)
#12=#[#11]+#[11000+#5]+#2 (MASTER_TOOL_GAUGE_HIGHT)
G17G00G90
T[#3]
M06
G[#1]G00X0Y0
G90
#3006=1(Z MEASURE ON HANDLE_MODE)
M00
#13=#12-#5023 (Difference from MASTER-TOOL)
#14=#[11000+#5]-#13 (Length of TOOL)
#[11000+#4]=#14 (Saving Tool-Length-Offset.)
G91G28Z0
M30
%

#11 で指定ワーク座標系のZ軸情報のシステム変数番号を求めます
#12 でワーク座標系Z値とマスター工具長とブロックゲージ高さから、マスター工具がブロックゲージへ接触する機械座標を求めます
対象工具と工具交換後、#3006 で機械が停止するので、ハンドルモードへ切換、ブロックゲージと接触させます。
#13で、その時の機械座標値とマスター工具が接触する機械座標値(#12)の差を求めます。
#14で、マスター工具長と対象工具長とマスター工具長の差(#13)から、対象工具長を求めています。
#[11000+#4]=#14 で、対象工具長補正番号へ書き込みます

実際の操作は、ワーク(素材)のXYZ原点のワーク座標系への登録は終了していて、マスター工具の工具長も工具長補正へ登録済みが条件となります。
プログラムをスタートすると、測定する工具へ工具交換後、停止します。
ハンドルモードへ切換、ブロックゲージ上面へ工具先端を合わせます。
再度、メモリモードへ戻し、サイクルスタートで、工具長補正番号へ工具長さが登録されます。

まとめ

今回は、マスター工具を利用して、ワーク(素材)Z軸のワーク座標値の設定と、任意工具の工具長補正値設定をカスタムマクロで作成してみました。
カスタムマクロは、マクロ呼び出し機能により、固定サイクル的な機能をユーザー側でも作成するのが、もともとの目的のような気がしていますが、
単純な変数を使用するだけでも、便利な場合があります。
例えばシステム変数を利用すれば、工具長補正だけでなく、工具径補正へもプログラムから書き込み可能ですから、
工具径補正を使用する場合、プログラムの最初に、デフォルトの工具径補正値を設定しておくと、機械側での入力忘れなどの対策にもなると思います。
また、今回説明のシステム変数を利用する事で、機械の現時点の情報をプログラム側へ取り込む事ができます。
そのことを利用して、さまざまな処理をさせることも可能となります。
その一例として、簡単なシステム変数の操作を紹介しました。
ただし、今回のプログラムは実機では検証しておりませんので、実際に利用する場合には十分に確認の上、自己責任で使用してください。

%d人のブロガーが「いいね」をつけました。