Skip to main content
CNC.wiki

G65/G66マクロ呼び出しと引数代入の極意:パラメータ設定と衝突回避

G65/G66マクロ呼び出しにおける引数代入の挙動とパラメータ設定を解説。Fanucの6008#7、Siemensのシステム変数、Mitsubishiの#1241パラメータ設定を検証し、ロット間での再現性低下や激しいタレット衝突を防ぐ実務手順。

Hakan Gündoğdu
Hakan Gündoğdu

CNC CARE 共同創業者

はじめに

G65やG66マクロ呼び出しにおける座標データの引数代入エラーは、工作機械のスピンドルやタレットが超高速の早送り動作でワーククランプやマシニングバイスの口金(バイスジョー)、あるいはチャックへ猛烈に突き刺さる致命的な機械衝突を引き起こす。パラメータの不整合やアドレス順序の狂いによってサブプログラム内の変数計算が狂うと、制御装置は異常を検知することなく、誤った数値に基づいてツールパスを算出する。その結果、オペレータが非常停止ボタンを押す間もなく、工具はチャックやバイスなどの物理的な障害物に激突し、刃具の破損やワークの全損、さらには主軸の芯ブレといった深刻な設備破損を招く。

このパラメータが未検証のまま量産に入ると、2ロット目から寸法ばらつきが広がり、最終検査で初めて不良が発見される。量産現場における信頼性の確保とロット間での繰り返し精度の維持は極めて重要である。非計画停止を未然に防ぎ、量産での深刻な再現性の低下や不良品発生を排除するためには、引数仕様のマッピング規則、各制御装置のパラメータ設定、およびアラームのトリガー条件を完全に理解し、段取り段階で確実に検証することが不可欠である。

技術概要

仕様項目技術詳細
コマンドコードG65, G66, G66.1, G67
モーダルグループG65は非モーダル (グループ 00)、G66およびG66.1はモーダル (グループ 12)、G67はモーダル呼び出しキャンセル
対象ブランドFanuc, Siemens, Mitsubishi
重要パラメータFanuc: 6008#7 (IJK) および 6007#4 (CVA); Mitsubishi: #1241 (Macro argument L/P valid) および #11053; Siemens: $MC_EXTERN_FUNCTION_MASK
主な制約事項引数のスタックはI、J、K座標の最大10セットに制限され、競合するコードは同じプログラムブロックに組み合わせることはできません

クイックリード

  • 1回限りのシンプルなマクロ呼び出しにはG65を、各軸移動で繰り返されるモーダル呼び出しにはG66を選択します。
  • 逃げ座標での意図しない動作を防ぎ、干渉を回避するため、モーダルマクロ操作の直後には必ずG67キャンセルコマンドをプログラミングします。
  • 複雑な多点座標の引数仕様II(Argument Specification II)を自動検出できるようにするため、Fanucパラメータ6008#7を0に設定します。
  • 正しい変数マッピングを確保するため、Mitsubishiの引数指定I(Argument Designation I)を使用する場合は、I、J、Kアドレスを厳密にアルファベット順にプログラミングします。
  • 解析アボート(解析中断)を防ぐため、$C_システム変数を読み取る前に、G290を使用してSiemensインタープリタをネイティブモードに切り替えます。
  • 特定の機械パラメータによって明示的に有効にされていない限り、GやNなどの禁止されたアドレスを引数として使用することは避けてください。

基本概念

マクロ呼び出し時の引数代入(Argument assignment)は、呼び出しブロックからサブプログラム内のローカル変数へと直接数値を転送する機能を提供します。これにより、プログラマーは呼び出し行の入力を変更するだけで、異なるワークや加工工程に再利用できる、普遍的なパラメータ駆動プログラムを作成することができます。この方法を使用することで、座標、送り速度(feedrate)、スピンドル速度、または形状入力がマクロサブプログラムに動的に注入されます。

これがどのように動作するかを理解するには、Gコードブロックのアドレスと内部の変数レジスタとの関係を参照する必要があります。例えば、FanucまたはMitsubishiシステムでは、Aなどのアドレス文字は変数#1に対応し、Bは#2に対応します。Siemensシステムでは、アドレス文字は$C_A$C_Bのような名前付きシステム変数に直接転送されます。適切なパラメータ設定、該当する場合の引数のアルファベット順の維持、および重複した変数マッピングの回避は、物理的な衝突(collision)やワークのスクラップ(scrap part)につながるロジックエラーを防ぐための普遍的な要件です。

コマンド構造

マクロサブプログラム呼び出しを開始してデータを転送するには、CNCインタープリタは呼び出し動作と呼び出し先プログラムの両方を定義する特定のコマンドコードを処理する必要があります。主要なコマンドは、単純な非モーダル呼び出しのG65と、モーダル呼び出しのG66です。単純呼び出しはマクロサブプログラムが呼び出されたブロック内で正確に1回だけ実行されるのに対し、モーダル呼び出しはアクティブな状態を維持し、キャンセルされるまで移動コマンドを含む後続のすべてのブロックでサブプログラムを実行します。

これらの呼び出し中、メインプログラムブロックで指定されたアドレス文字はサブプログラム内のローカル変数にマッピングされます。標準的な呼び出しブロックには、プログラム番号アドレスPと、オプションで繰り返し回数Lを含める必要があります。他のすべての文字は、値を渡す引数(arguments)として機能します。

各システムにおけるマクロ呼び出しの構文:

  • Fanuc/Mitsubishi: G65 P_ L_ <arguments>;
  • Siemens: G65 P_ L_ <Arguments>;

マクロ呼び出し構造で使用されるパラメータ:

  • P: サブプログラム番号(または識別子)。
  • L: サブプログラムが繰り返される回数(繰り返し回数)。
  • <arguments>: ローカル変数に値を渡すアドレス文字(A、B、C、I、J、Kなど)。

ブランド別応用

Fanuc

Fanuc Custom Macro Bでは、パラメータ6008#7およびパラメータ6007#4が座標のマッピング方法を制御します。これらのパラメータは、制御装置が引数仕様I(Argument Specification I)またはIIのどちらを使用するかを決定します。

以下の構文は、単純なG65マクロ呼び出しと、スタックされた引数仕様II(Argument Specification II)呼び出しを示しています。

; Fanuc 単純呼び出し:
G65 P1000 A1.0 B2.0 X15.0 Y25.0;

; Fanuc スタック呼び出し (引数仕様II): G66 P9100 I10.0 J20.0 K30.0 I40.0 J50.0 K60.0;

カテゴリ項目 / コード説明値 / 詳細
Parameter6008#7 (IJK)グローバルな引数動作0 = 仕様I/IIを自動判定; 1 = 厳密な仕様I強制
Parameter6007#4 (CVA)小数点フォーマットの解析0 = NCフォーマット; 1 = マクロフォーマット
Parameter6020#4 (GAA)禁止アドレスのオーバーライドG(#28#32にマッピング)およびL(#12にマッピング)の使用を許可
Parameter6009#2 (MAA)Mコードマクロ呼び出しアドレスGが引数になるかどうかを決定
AlarmAlarm 129 (PS0129)無効なアドレスGの使用GAA/MAAパラメータによってGが禁止されている場合にトリガー
AlarmAlarm 1095 (PS1095)スタック制限超過10セットを超えるI/J/Kが指定された場合にトリガー
AlarmAlarm 114 (PS0114)マクロのフォーマットエラー未定義のHコードまたは不正な数式フォーマット
VersionT-Series旋盤構成アドレスを厳密にA、B、F、H、I、K、M、P、Q、R、S、Tのみに制限
VersionM-Seriesマシニングセンタ構成完全に拡張されたリストをサポート: A, B, D, F, H, I, J, K, L, M, P, Q, R, S, T, X, Y, Z

不適切な設定は座標の上書きや機械的衝突につながるため、プログラマーは、スタックされたI、J、K座標を含むプログラムを実行する前にパラメータ設定を確認する必要があります。

Siemens

Siemens Sinumerik制御装置は、引数を番号付きのローカル変数にマッピングしません。代わりに、呼び出しの実行時に値を$C_Aから$C_Zのような事前定義されたシステム変数に直接書き込みます。

以下の例は、G65呼び出しブロックでパラメータがどのように宣言され、サブプログラム内部で取得されるかを示しています。

; Siemens 呼び出しブロック:
N30 G65 P10 F55 X150. Y100. S2000

; Siemens サブプログラム パラメータ取得: N15 X_AXIS = $C_X Y_AXIS = $C_Y SPEED = $C_S FEEDRATE = $C_F

カテゴリ項目 / コード説明値 / 詳細
ParameterPサブプログラム識別子4〜8桁(マシンデータによって決定)
ParameterLサブプログラム繰り返し回数1から9999の間の整数値
System Mask$MC_EXTERN_FUNCTION_MASKマシンデータビット構成ビット6はPの桁フォーマットを設定; ビット3はDINコード評価を有効化
AlarmAlarm 12720プログラム番号未検出マクロ呼び出しにアドレスPが欠落している場合にトリガー
AlarmAlarm 12722サイクルとマクロ呼び出しの混在マクロ呼び出しと固定サイクルを組み合わせた場合にトリガー
AlarmAlarm 14016競合するブロック機能M98、戻り、またはプログラム終了コードとの競合
VersionBit 6 = 0厳密にPを4桁に埋める4桁を超えるプログラム番号を渡すとアラームが発生
VersionBit 6 = 1ネイティブで8桁をサポートパディングなしで最大8桁のプログラム番号を受け入れ

解析アラームやサイクルのアボート(中断)を回避するため、オペレーターはすべての引数パラメータを必ずプログラム呼び出しコードの直後に配置する必要があります。

Mitsubishi

Mitsubishi制御装置は、引数をローカル変数#1#33に割り当てます。プログラマーはパラメータ#1241を使用して、LおよびP変数を有効にすることができます。

以下のブロックは、引数を渡すMitsubishiマクロ呼び出しを示しており、混合形式の呼び出しにおける上書き優先順位を示しています。

; Mitsubishi 単純呼び出し:
G65 P9900 A60. S100. F800;

; 上書きの実証: G65 A1.1 B-2.2 D3.3 I4.4 I7.7;

カテゴリ項目 / コード説明値 / 詳細
Parameter#1241 (set13/bit5)マクロ引数L/Pの有効性L/Pを変数#12および#16に渡すことを有効化
Parameter#11053ユーザープログラム格納位置0 = NCメモリ; 1 = ハードディスク
AlarmP275スタック制限超過10セットを超えるI/J/Kがプログラミングされた場合にトリガー
AlarmP33プログラム構文エラーM98での無効なL/Pの使用または不正な文字列によりトリガー
VersionM800V/M80V Series呼び出しモード依存関係G65/G66ではGおよびNを禁止、G66.1ではGおよびN引数を許可

不適切なパラメータマッピングを防ぐため、オペレーターは指定I(Designation I)の実行中にI、J、K変数をアルファベット順に指令する必要があります。

ブランド比較

機能特徴FanucSiemensMitsubishi
変数マッピングローカル変数#1#33システム変数$C_A$C_Zローカル変数#1#33
引数スタック仕様II(Spec II)により、最大10セットのI/J/Kを変数#4#33にマッピング最大10セットを$C_I[0]...に格納し、数を$C_I_NUMで追跡指定II(Designation II)により、最大10セットのI/J/Kを変数#4#33にマッピング
小数点優先順位混合ブロックでは、最後に指定された引数タイプが優先される— (no source)後から指定されたアドレス値が有効
禁止アドレスG/L/N/Pはブロック。G/LはGAAパラメータを使用してマッピング可能P, L, O, Nは整数である必要あり。実数値はアラームをトリガーG/NはG65/G66でブロック。L/Pはパラメータ#1241で有効化可能
インタープリタ切り替えネイティブCustom Macro Bサブプログラムでシステム変数を評価するためにG290が必要ネイティブCustom Macro

技術解析

これらの制御装置における引数代入の違いを分析すると、3つの異なるアーキテクチャの方向性が明らかになります。Fanucは、パラメータ駆動型のアドレスエイリアシングと独自のマルチプレックス機能に大きく依存しています。引数仕様II(Argument Specification II)をサポートすることにより、Fanucは1つのブロックでI, J, Kを最大10回繰り返すことで、アルファベットのアドレス制限を回避することを可能にしています。制御装置は、これらの繰り返されるアドレスをローカル変数#4#33へと自動的かつ不可視の状態で順番に配置します。6020#4(GAA)や6009#2(MAA)のようなパラメータにより、プログラマーはGおよびLアドレスのデフォルトの禁止設定をオーバーライドし、それらを変数#28#32および#12に直接マッピングすることもできます。

Siemensは、自己文書化されたシステム変数を支持して、番号付きのローカル変数システムを採用していません。番号付きのローカル変数に値を押し込む代わりに、Siemensは$C_X$C_Sのように、軸や機能そのものにちなんで命名された変数に引数を割り当てます。配列引数については、Siemensはネイティブの配列処理を実装しており、繰り返されるI, J, K入力をインデックス付き配列($C_I[0]など)にスタックし、その数を$C_I_NUMを介して追跡します。Siemensは動的な相互コンパイル(cross-compilation)もサポートしており、プログラマーはパラメータに対して複雑な数学的演算を実行するために、高レベルモード(G290)とISOダイアレクトモード(G291)を切り替えることができます。

Mitsubishiは、特殊な上書きロジックと呼び出しモード依存のアドレスキャプチャを備えた堅牢な妥協案を提供します。同じブロック内で重複するフォーマットがプログラミングされている場合、Mitsubishiのインタープリタは機械を停止させることなく、後の方の値を優先して受け入れます。この制御装置は、パラメータ#1241を介してユニークな柔軟性も提供しており、これによりLおよびPアドレスを変数#12および#16として渡すことが可能になります。モーダル呼び出しB(G66.1)では、MitsubishiはGやNのような予約されたアドレスであっても、実行可能なNCコードの後に配置されている限り、引数#10および#14としてキャプチャすることを許可します。

プログラム例

Fanuc の例

G65 P1000 A1.0 B2.0 X15.0 Y25.0;

空運転 (dry run)

  • インタープリタはG65を読み取り、制御をプログラムO1000に移行します。
  • 1.0 がローカル変数#1に割り当てられます。
  • 2.0 がローカル変数#2に割り当てられます。
  • 15.0 がローカル変数#24に割り当てられます。
  • 25.0 がローカル変数#25に割り当てられます。
  • マクロプログラムはこれらの変数を使用して処理を実行し、M99を介してメインプログラムに戻ります。

Siemens の例

G65 P1234 A10. C20. X30. Z40. I50. K60. J70. I80.

空運転

  • インタープリタはG65を読み取り、プログラム番号1234を呼び出します。
  • 10.0$C_Aにマッピングされます。
  • 20.0$C_Cにマッピングされます。
  • 30.0$C_Xにマッピングされます。
  • 40.0$C_Zにマッピングされます。
  • 配列変数$C_I[0]50.0$C_J[0]70.0$C_K[0]60.0が割り当てられます。
  • アドレスIの2番目のインスタンスは80.0$C_I[1]に割り当て、配列サイズを追跡するために$C_I_NUM2に更新されます。

Mitsubishi の例

G65 A1.1 B-2.2 D3.3 I4.4 I7.7;

空運転

  • インタープリタは単純呼び出しを処理します。
  • 1.1 がローカル変数#1(アドレスA)にマッピングされます。
  • -2.2 がローカル変数#2(アドレスB)にマッピングされます。
  • アドレスDは#7にマッピングされ、3.3を割り当てます。
  • アドレスIの最初のインスタンスは#4にマッピングされます(値4.4)。
  • アドレスIの2番目のインスタンスは、指定II(Designation II)の順序付けにより#7にマッピングされます(値7.7)。Dと2番目のIの両方が#7にマッピングされるため、上書きロジックにより後から指定された引数が優先され、変数#7は値7.7で確定します。

エラー解析

ブランドアラームコードトリガー発生条件オペレータの確認症状根本原因と対策
FanucAlarm 129許可されていない状況でアドレスGを引数として指令したCNCの実行が即座に停止し、画面にアラームメッセージが表示されるGAA/MAAパラメータが無効です。パラメータ6020#4を有効にするか、Gコードを修正してください
FanucAlarm 1095引数仕様IIにおいて10セットを超えるI/J/Kをプログラミングした制御装置がサイクルを停止し、移動が開始される前にプログラムが停止する仕様IIのスタック制限を超過。I/J/Kのペアを10セット以下に削減してください
SiemensAlarm 12720プログラム番号アドレスPを指定せずにG65/G66マクロを呼び出したインタープリタが実行を中止し、サイクルスタートランプが消灯するNCブロックにPアドレスが欠落しています。マクロ呼び出しでプログラム番号P_を指定してください
SiemensAlarm 12722同じブロック内で固定サイクルとG65/G66マクロ呼び出しを混在させた制御装置がブロックを拒否し、画面にマクロとサイクルの競合が表示されるG81〜G89とG65/G66が1つのブロックに混在しています。それらを2つのブロックに分割してください
MitsubishiP275指定IIにおいて10セットを超えるI/J/Kを指令した軸の移動が禁止され、アラームステータスがアクティブになるスタック制限を超過。繰り返されるI/J/Kセットを10以下に維持してください
MitsubishiP33M98サブプログラム呼び出しにおける無効なL/Pアドレスプログラムが構文エラーで停止するパラメータ#1241がアクティブであり、L/Pが変数引数になっています。L/Pを含まない標準のM98を使用してください

実務応用ノウハウ

スタックされた複数のI、J、K座標を用いるプログラム(引数仕様II)を実行する際、パラメータ 6008#7(IJK)の不整合は、位置決めデータの異常な上書きを招き、スピンドルがワーククランプやバイスジョーへ激突する致命的な衝突事故を引き起こす。Parameter 6008#7が「1」に設定されていると、制御装置はすべてのI、J、K入力を仕様Iとして厳密に解釈するため、変数#4〜#33へ順次格納されるべき座標値が上書きされて消失し、マクロ内の軌道計算が完全に破綻する。段取り前に6008番パラメータを確認することで、このコマンドで最も多い非計画停止を防げる。また、入力値に小数点がない場合の解析方法を決める 6007#4(CVA)パラメータの確認を怠ると、例えば「X10」という指令が10.0mmではなく0.01mmとして処理され、極小の送り量や極端な座標ずれが発生して不良品発生に直結する。Siemens環境においては $MC_EXTERN_FUNCTION_MASK のビット6の設定によってプログラム番号の桁数上限が制限され、4桁を超える呼び出しがアラーム12720で即座に遮断される。さらに、Mitsubishiシステムでは、引数指定Iを使用する際にI、J、Kをアルファベット順に記述しないと、内部マッピングが狂って予期しない位置に軸が移動し、再現性の低下を引き起こす。これらのアラームや異常動作を未然に排除し、ロット間での高精度な繰り返し精度を維持するためには、実加工に入る前のパラメータ整合性の検証が絶対条件である。

関連コマンド

  • - G65 Custom Macro B: サブプログラムを開始し、変数値を転送するために使用される単純な非モーダルマクロ呼び出しコマンド。
  • - G66: キャンセルされるまで、軸移動を含むすべてのブロックでサブプログラムの実行を繰り返すモーダルマクロ呼び出しコマンド。
  • - G67: G66またはG66.1モーダルサイクルを非アクティブ化し、通常のインタープリタ実行に戻すために使用されるモーダルキャンセルコマンド。
  • - サブプログラムの作成と呼び出し: 二次プログラムを呼び出すが、変数引数の転送を許可しない一般的なサブプログラム実行コマンド。
  • - マクロ論理演算子: 転送された引数を検証し、プログラムフローを制御するためにマクロサブプログラム内部で使用される論理演算。

おわりに

量産工程における寸法精度の安定とロット間での高い再現性を保証するためには、マクロ呼び出し時の引数代入仕様と機械のパラメータ設定を同期させるプログラム制御の標準化が不可欠である。初品加工や段取り替えの際には、単にNCプログラムを流すだけでなく、Parameter 6008#7(Fanuc)や #1241(Mitsubishi)、$MC_EXTERN_FUNCTION_MASK(Siemens)などの制御パラメータとプログラム記述が一致していることを必ずチェックシートで検証しなければならない。実加工に入る前のドライランモードでの空運転によるグラフィックチェックやシングルブロック動作での変数確認手順の徹底こそが、パラメータの不整合に起因する予期せぬ衝突や非計画停止を完全に防ぎ、寸法ばらつきによる不良品発生を防いで、生産ライン全体の品質と信頼性を維持するための確実なアプローチである。

よくある質問

マクロ呼び出し(G65)を用いた部品のロット加工において、ロットの途中から突然寸法がばらつき、再現性が低下する原因と対策は何ですか?

主な原因は、引数として渡される座標データに小数点チェックを行わないパラメータ設定(Fanucの6007#4など)が有効になっており、入力プログラム内の「X10」などの値がマクロ変数内で「0.01」として誤解析され、温度変化や熱変位の補正計算が狂うことです。これにより、加工ロットの後半で許容公差を超える寸法不良が発生します。実務アクションとして、プログラム内のすべてのマクロ引数の数値表現に必ず小数点「.」を明示し、段取り前にCVAパラメータ(6007#4)が適切に設定されていることを確認してください。

SiemensシステムでG65マクロ呼び出しを実行した際、プログラム番号桁数のエラー(アラーム12720など)を回避するために、事前に検証すべきシステム設定は何ですか?

Siemensでは、マシンデータ $MC_EXTERN_FUNCTION_MASK のビット6が「0」の場合、Pで指定されたプログラム番号が厳密に4桁に制限され、これを超える桁数を指定すると解析アボートをトリガーします。実務アクションとして、段取り前に該当のマシンデータを確認し、8桁のプログラム番号をネイティブにサポートさせるためにビット6を「1」に設定するか、あるいはマクロのサブプログラム番号を4桁以内に統一するプログラム変更を行ってください。

FanucやMitsubishiでG65呼び出し時に「アラーム129」や「P33」などの構文エラーが発生し、機械が非計画停止するのを防ぐにはどうすればよいですか?

これらのアラームは、パラメータで許可されていない状態で、引数文字としてアドレス「G」や「L」、「N」をブロック内に記述した場合にトリガーされます。特にサブプログラム呼び出しの記述ミスや、変数マッピングが競合した場合に発生し、自動サイクルを即座にインターロックします。実務アクションとして、Fanucではパラメータ6020#4(GAA)を有効にしてGおよびLの引数使用を許可するか、あるいはプログラム内でGやLなどの禁止アドレスを引数文字として絶対に使用しないよう、マクロの引数リストを仕様I/IIに基づいて再設計してください。

まだ解決しませんか?

このトピックについて、AIアシスタントに自然言語で質問できます。検証済みの情報源に基づいており、ハルシネーションはありません。

AIアシスタントに質問する
Hakan Gündoğdu
Hakan Gündoğdu
  • CNC CARE Co-Founder (May 2025 - Present)
  • Mitsubishi Electric NC Sales & Service Section Manager (2008 - 2025)
  • Reis CNC Service Engineer (2003 - 2005)
  • Ören Kalıp CNC Mold Line Team Leader (1999 - 2002)

CNC工作機械業界のあらゆる分野で25年以上の経験を持ち、ブランドに依存しないコンサルティング、エンジニアリング、純正部品サービスを提供するCNC CAREの共同創業者として活動を続けています。

関連記事

このトピックに関する他の記事

Fanuc 3D干渉チェックの設定手順と干渉回避パラメータ

Fanucの3D干渉チェックパラメータ設定手順を解説。パラメータ10930#0や10930#5の検証、アラームPS0492への対処、PMC信号TDICHGによる変更反映手順を解説し、ロット加工における激しい衝突事故や不良品発生を防ぐ実務技術。

FanucProgramming

Fanucカスタムマクロ有効化パラメータ(0932/8135)の設定と衝突回避ガイド

Fanucカスタムマクロ有効化パラメータ0932および8135の設定手順、共通変数拡張、工具補正マッピング(V15)について解説。ロット間での再現性低下やアラーム123による非計画停止、チャックやバイスジョーへの激しい機械衝突(ハードクラッシュ)を防ぐ段取り実務。

FanucProgramming

Fanucの工具寿命管理パラメータ設定方法と衝突を防止する段取り手順

Fanucの工具寿命管理パラメータ(6800#2、6810)の正しい設定方法を解説。登録時のエラーアラーム156や159の発生原因と対策を提示し、量産時の工具折損に伴うspindleやturretの衝突事故(ハードクラッシュ)を防ぎ、ロット間の加工精度と高い再現性を維持します。

FanucProgramming

Fanucリジッドタッピング加減速パラメータ:設定手順と衝突防止ガイド

Fanuc CNCにおけるリジッドタッピング用の最適なトルク加減速パラメータ(11420#0や5214番など)の設定手順を徹底解説。ギア固有の加減速調整やアラームSP0741、衝突事故を防止してロット生産の繰り返し精度と加工品質を高める実務ノウハウを紹介。

FanucProgramming