transpose_macro(FANUC).pl について

[使用用途]

マクロ呼び出し命令、サブプログラム呼び出し命令を含むNCデータを、 それらが実行された状態に置換して一つのプログラムにします。
また、マクロ文を平易なNC文に変換(実機の内部変換をシミュレート)します。 FANUC系のNCデータ用です。

[使用方法]

まずはPerlが動作する環境を用意してください。StrawberryPerlのインストールを推奨します。

スクリプトの実行には、以下の2つの方法があります。

[実行方法1] 簡単に実行するには、Scriptoriumを使用してください。

Scriptorium本体(Scriptorium.exe)は、NCVCを標準インストールすると、[C:\Program Files\NCVC]フォルダ内にインストールされています(翼のアイコンです)。
または、こちらのページの下方から入手できます。
Scriptoriumを開き、
[スクリプトファイル]にtranspose_macro.pl、
[入力ファイル]に呼び出し命令やマクロを含むNCコードが入っているファイルのパス、
[出力ファイル]に出力したいファイルパス
を指定して[実行]ボタンを押します。
([入力ファイル]を指定すれば、[出力ファイル]にはScriptorium内の設定に沿ったファイル名が自動的に入ります。)

ScriptoriumとNCVCの連携方法について

NCVCで何らかのファイルを開いている状態で、メニューバーの[オプション]-[外部アプリケーションの設定]にて外部アプリケーションの設定ウインドウを立ち上げます。
[参照]ボタンからScriptorium.exe本体を選択し、[追加]ボタンを押すと、上部の外部アプリケーション一覧ウインドウに登録されます。
[OK]ボタンでウインドウを閉じると、NCVC上のツールバーにScriptoriumアイコンが表示されるようになります。
そのアイコンをクリックすると、NCVCで開いているファイルを[入力ファイル]に指定した状態でScriptriumを開くことができます。

[実行方法2] コマンドプロンプトから実行することも可能です。
コマンドプロンプトを立ち上げ、
perl␣"スクリプトのパス"␣"入力ファイルのパス"␣"出力ファイルのパス"
を実行すると、"出力ファイルのパス"に変換後のNCデータファイルが生成されます。
なお、"~のパス"は該当ファイルのアイコンをコマンドプロンプトにドラッグアンドドロップすれば自動的に入力されます。

[変換されるものについて]

・マクロ呼び出し命令(G65,G66),サブプログラム呼び出し命令(M98)
・変数の代入式(=を含むブロック)
・マクロの変数
・四則演算(+-*/)
・関数SIN,COS,TAN,ATAN,ABS,SQRT,ROUND,FIX,FUP
・関数AND,OR,XOR,BCD,BIN
・IF,WHILE,DO構文
・条件式EQ,NE,GT,LT,GE,LE
・GOTO文

[呼び出されるプログラムについて]

呼び出し命令から呼び出されるプログラムは

1. 入力ファイル(変換されるファイル)の中に O<呼び出されるプログラム番号> で始まる行があれば、それ以降の行が読み込まれます。

2. 入力ファイル以外からの呼び出し命令の場合(呼び出されたプログラムが 入力ファイル以外のファイルに入っていて、その中に更に呼び出し命令がある場合)、 1.で見つからなければ、呼び出し命令が入っているファイルの中に O<呼び出されるプログラム番号> で始まる行があれば、それ以降の行が読み込まれます。

3. 1.,2.で該当するものがなければ、入力ファイルと同じ階層(フォルダ)の中のファイルを検索します。

検索されるマクロプログラム、サブプログラムのファイル名について
呼び出されるマクロプログラム、サブプログラムのファイルは、 ファイル名を O<プログラム番号>.ncd としてください。 プログラム番号の前の0は、付けても付けなくても構いません。 (例えば、プログラム番号10のファイル名は O10.ncd または O0010.ncd) また、O<プログラム番号>の後に( )が入っていても認識します (ファイル名を O10(bolt_hole_circle).ncd としても認識します)。

4. 3.でファイルが見つからなければ、下記で登録するフォルダの中のファイルを検索します。
ファイル名のルールは3.と同じです。

マクロプログラム、サブプログラム用のフォルダ(兼用)の登録について
transpose_macro.plをテキストエディタで開き、スクリプト中の
$macro_folder= 'C:\Program Files\NCVC\macro';
の行でマクロプログラム、サブプログラム用のフォルダ(兼用)のパスを設定してください。
デフォルトでは上記のようになっているので、変更したい場合は、' 'で囲まれた部分を変更してください。
(注意)フォルダ名の最後に\はつけないでください。
よく使うプログラムのファイルはここで登録したフォルダに置くと便利です。

5. 4.でもファイルが見つからなければ、マクロ呼び出し命令をそのまま出力します。

[システム変数について]

・#3000
#3000= (アラーム番号);
のブロックを通るとメッセージとともに終了します。

・#4001~#4120
通ったブロックのモーダル情報が自動的に入ります。

・#4001~4022: Gコード各グループのモーダル情報
・#4102: Bコード
・#4109: Fコード
・#4111: Hコード
・#4113: Mコード
・#4119: Sコード
・#4120: Tコード

また、Gコードのモーダル情報(#4001~#4022)の初期値には、当方のFANUCのマニュアルに書いてある電源投入時のものが入ります。 (初期値がマニュアルにないグループには値は入りません。)

・#4001(グループ1): 0
・#4002(グループ2): 17
・#4003(グループ3): 90
・#4004(グループ4): 22
・#4005(グループ5): 94
・#4007(グループ7): 40
・#4008(グループ8): 49
・#4009(グループ9): 80
・#4010(グループ10): 98
・#4011(グループ11): 50
・#4012(グループ12): 67
・#4013(グループ13): 97
・#4014(グループ14): 54
・#4015(グループ15): 64
・#4016(グループ16): 69
・#4017(グループ17): 15
・#4018(グループ18): 50.1
・#4019(グループ19): 40.1
・#4020(グループ20): 160

もし、お使いの機械が違う設定なら下記のものと同じ要領で登録してください。

・その他のシステム変数
その他のシステム変数を使用する場合で、初期値が必要なものは値を登録してください。 初期状態のGコードのモーダル情報が違う場合も同様です。
transpose_macro.plをテキストエディタで開き、スクリプト中の
#%system_value= (,);
の行の行頭の#を削除して、
%system_value= (変数番号,変数値);
としてください。
登録する変数が複数ある場合は","で区切って変数番号とその値を順番に羅列してください。
%system_value= (変数番号1,変数1の値,変数番号2,変数2の値,・・・);

例えば#4119に3000、#4120に1を登録したいときは
%system_value= (4119,3000,4120,1);
となります。

[コメント出力について]

オプションとして、変換前の原文等をコメント出力できます。

変換前の原文は(^^ と ^^)で、内部処理は(---と---)でくくられて出力されます。
ここで、[変換前の原文]とは呼び出し命令のブロックやマクロに関するブロックを指し、
[内部処理]とは変数への値の代入や、EQ、NE等の条件判定などの処理を指します。
NC文がどのように動いているか確かめたい場合に出力させてください。

また、#4000番台にはモーダル情報が自動で入りますが、入った値は(----と----)でくくられて出力されます。
モーダル情報を使わない場合は不必要なので、オプションを別にしました。

どちらもデフォルトでは出力されないので、スクリプト内で設定してください。

・変換前の原文及び、内部処理のコメント出力の設定
スクリプト内の
$debug_flag= 0;
の行で、コメント出力する場合は1、しない場合は0 に設定してください。
ただし、プログラム呼び出しの開始、終了のとき、構文エラー等が起きたときのメッセージは、0を設定していても出力されます。

・モーダル情報のコメント出力の設定
スクリプト内の
$modal_flag= 0;
の行で、コメント出力する場合は1、しない場合は0 を設定してください。

・システム変数#5001、#5002、#5003のコメント出力の設定
スクリプト内の
$modal_flag2= 0;
の行で、コメント出力する場合は1、しない場合は0 を設定してください。

・出力したコメントを削除したい場合
モーダル情報の行だけを削除したい場合はremove_modal_comment.pl、
原文、内部処理の行も含めて削除したい場合はremove_debug_comment.plを別途使用してください。

[Fコードの小数点の出力について]

Fコードで指定する数値の小数点以下が0のとき、小数点を出力するかを設定できます。
$F_flag= 0;
の行で、小数点を出力しない場合は0、小数点を出力する場合は1を設定してください。

[オプショナルブロックスキップについて]

オプショナルブロックを実行するかを設定できます。 $OBS_switch= 0;
の行で、オプショナルブロックスキップを有効(ON)にしたい場合は1、無効(OFF)にしたい場合は0 を設定してください。
有効(ON)にすると、オプショナルブロックを実行しない場合のプログラム処理が行われます。
無効(OFF)にすると、オプショナルブロックを実行する場合のプログラム処理が行われます。

[M98の繰り返し数の指定方法について]

コントローラによって2種類のものがあるようです。

1. M98P○○○○L○○○○で指令して、L○○○○で繰り返し数を指定する。
2. M98P○○○○○○○○で指令して、○の前半4桁で繰り返し数を指定する。

$M98_houshiki= 0;
の行で、1.の場合は0、2.の場合は1 を設定してください。

[WHILEやDOのループの上限数の設定について]

$loop_max= 300;
の行で、ループの上限数を設定できます。一つのループ内で上限数を超える繰り返し処理が行われると処理を中断します。
条件不良による無限ループを回避するための設定です。
初期値は 300 になっています。

[GOTO文実行の上限数の設定について]

$GOTO_exe_max= 500;
の行で、GOTO命令実行の上限数を設定できます。プログラム全体で上限数以上のGOTO命令が実行されると処理を中断します。
GOTO文による無限ループを回避するための設定です。
初期値は 500 になっています。

[文法の誤りを検出した場合の処理について]

文法の誤りであろう箇所を検出した場合、処理を中断するかを設定することができます。
$break_flag= 1;
の行で、中断する場合は1、中断せずに処理を続行する場合は0 を設定してください。
初期値は 1 になっています。

[多重度の制限について]

マクロ呼び出しなら5回、マクロとサブプログラム呼び出し合わせてなら9回の多重呼び出しでエラーとなり、終了します。

[数値の精度について]

関数等の演算結果や、変数の中の数値は10進8桁の精度を持ちます。
出力時には小数点3桁まで(小数点第4位を四捨五入)を出力します。

[シーケンス番号の出力について]

変換前のブロックにシーケンス番号が付いている場合でも、シーケンス番号は出力されません。

[サンプルデータについて]

macro_sample.ncd というマクロサンプルを同梱しています。
macro_sample.dxf にイメージ図がありますが、ボルトホールサークルのマクロ例です。
マクロサンプルの中に呼び出し命令、呼び出されるプログラムとも入っているので、
サンプルを入力ファイルに指定するだけで変換されます。
なお、入力ファイル(macro_sample.ncd)はユーザーアカウント上の[ドキュメント]や[デスクトップ]フォルダにコピーして使用することをオススメします。