バイナリ版モニタリングデータについて


1.バイナリ版モニタリングデータとは
2.どういう狙いがあるか?
3.中身のフォーマット仕様
4.解析プログラム・サンプル1(バイナリ−>テキスト変換ツールソースコード)
5.解析プログラム・サンプル2(加工部長さの解析)


1.バイナリ版モニタリングデータとは

 モニタリングデータは、最適化処理中に得られる微少移動ごとに切削の状況をモニタリングした情報ファイルです。 当初から対応していたテキスト形式は見やすい反面、莫大なデータ量になってしまいますので、 情報を圧縮(約20%ぐらい)した形式で出力したものがバイナリ版と呼んでいるものです。 内容や情報量はテキスト形式と等価なものになります。
 モニタリングデータの抽出は当初は最適化処理中の副産物という位置付けでしたが、 切削モニタリングデータのグラフ解析ツールも用意され ていますので、最適化機能は、加工状況把握用ということでモニタリングデータの出力 を目的にご利用いただいても有効かと思います。


2.どういう狙いがあるか?

 一言でNCデータの最適化と言っても、そこに要求されるものは、ユーザーごとに様々です。 例えばTRYCUT2000/3000の最適化のF値コントロールは、切削量に応じた区分けで行っていますが、 このような考え方はある一例でしかありません。
 究極の最適化を求めてゆくためには、工具にかかる応力や工具熱、スピンドル回転数、刃形、刃の枚数、クーラント、たわみ、摩耗その他、 追求してゆくときりがないぐらいのファクターを考慮しなければならないと考えます。
 ただ、これら全てのファクターを真正直に捉えて、最適化ツールを作ろうとしても、 なかなか最適な解が見つけられるものではないと思われます。 ある程度ユーザー側で、条件(素材、工具、形状パターン)が絞れる状況であるならば、 個別には、比較的単純なコントロールによって、より最適なNCデータを送出できる場合も多いであろうと考えられます。
 実際には一部のユーザーが対象になるかもしれませんが、 バイナリ版モニタリングデータの目的は、NCデータの個別最適化をユーザー側で開発しようとした時に、 避けて通れないと考えられる単位移動あたりの切削状況のモニタリングデータを、 より現実的なファイルサイズで(なるべく小さく)表現しようとしたものです。

 また最近では、個別最適化の前に、実際の加工部長さの把握など、 最適化の前哨戦としてNCデータの分析を行いたいというニーズも出てきています。もちろん、 このようなケースでもモニタリングデータの中身を抽出すれば様々な解析ツールを作成することが出来るはずです。 ここでは第5項で、解析プログラム・サンプル2(加工部長さの解析)をソースコード付きで紹介しています。


3.中身のフォーマット仕様

 テキスト版モニタリングファイル名:"CUTDATA.TXT"
 バイナリ版モニタリングファイル名:"CUTDATA.BIN"

 基本的には、従来のテキスト形式のモニタリングデータと、同等の情報を 持ったファイルです。ただし、圧縮させるためテキスト形式で言うところの各行 ごとに変化のある部分のみ情報を出力させています。

 まずは参考までにテキスト形式では、各行ごとに以下の順でデータが 並んでいます。
(1)元NCデータのひとつの移動ブロックの番号をブロックごとの連番で(N コード)
(2)ひとつの移動ブロック内での移動点番号(カッコ内)
(3)元NCデータの移動コード(G00 or G01 or G02 or G03 各種補正やサイクルコードは展開済みのもの、例外としてG06.2やG132は、"NURBS"と表示)
(4)移動点座標(X,Y,Z コード)
(5)元の送り速度(Fコード)
(6)切削状況(カッコ内 N:空転 A:全面切削 V:垂直切削 U:アップカット D:ダウンカット)
※全面切削とは、垂直切削以外で、工具のアップカット側、ダウンカット側の一部でも双方で切削している場合に指す。
(7)単位移動(1mm)あたりの切削除去量(カッコ内)
注:この量は実際は変化のない部分でも、被切削材(格子)の精度と工具の移動ピッチとの関係や切削方向によって大きくバラツク場合もあります。
(8)最適化ルールに従った送り速度、ただし進入時の減速は行われていません (カッコ内 Fコード)
例: N39(0007)G01X43.000000Y0.000000Z35.000000F1000(A37.963111F100)
 なお工具指定のためのTコードやG92の位置決め指定なども別途ブロックで出力されます。

 バイナリ形式では、各行ごとに、変化した部分を認識するためのビット情報を前半 2バイトで出力し、その後にそれぞれの変化した情報のみをバイナリ形式で付加した ものの羅列になります。
スタート点座標XYZ(4x3バイト)
変化ビット部(2バイト)
変化情報部(可変長)
変化ビット部(2バイト)
変化情報部(可変長)





<変化ビット部(2バイト)の中身>
1.変化ビット1バイト目
 0ビット目:Tコード  情報部での値は、2バイト整数 0 - 999
 1ビット目:SEQNO            4バイト整数 1,2,3,4,5,6,,,,
 2ビット目:移動モード         1バイト 0,1,2,3,132(NURB)
 3ビット目:X出力フラグ        4バイト実数
 4ビット目:Y出力フラグ        4バイト実数
 5ビット目:Z出力フラグ        4バイト実数
 6ビット目:元F値出力フラグ      4バイト整数
 7ビット目:工具加工位置情報      1バイト整数 0,1,2,3,255=A,V,U,D,N

2.変化ビット2バイト目
 0ビット目:単位移動当たりの切削量   4バイト実数
 1ビット目:最適化F値出力フラグ    4バイト整数
 ※2〜7ビット目は、現状全て未使用で0

<変化情報部(可変長)の中身>
変化ビットがON(1)になっているデータをそれぞれの形式に従って順番に羅列



4.解析プログラム・サンプル(バイナリ−>テキスト変換ツールC言語ソースコード)

 3.でのフォーマットの説明が、テキスト形式に対応させた説明ですので、その 逆変換である、テキスト形式への変換プログラムのサンプルが最も理解しやすと 思われるため、参考までに以下に添付しておきます。 実際は、以下のコードをカット&ペーストして、適当なファイル名(拡張子.c 又は、 .cpp)で保存し、コンパイル・リンクして実行して見て下さい。
 以下のサンプルプログラムですと、作業フォルダ下に存在するバイナリ版モニタ リングデータ"CUTDATA.BIN"を読み、モニタリングデータに変換し、同じく 作業フォルダ下に"CUTDATA.TXT"という名称のファイルを作成します。
※単なるコマンドラインプログラムですので、SDKのページで 紹介させていただいているフリーのC++コンパイラでも、十分コンパイルリンクは可能です。

#include <stdio.h>
typedef struct optform {
unsigned short tcode;
long seqno;
unsigned char movemode;
float p[3];
long orgfeed;
unsigned char pos;
float vol;
long optfeed;
} OPTFORM;

void main()
{
long seqn;
char bit[4];
FILE *ifp;
FILE *inc;
OPTFORM cutform;
cutform.tcode=0;
cutform.seqno=0;
cutform.movemode=255;
cutform.orgfeed=0;
cutform.pos=0;
cutform.vol=0.0;
cutform.optfeed=0;
ifp=fopen("CUTDATA.BIN","rb");
inc=fopen("CUTDATA.TXT","w");
fread(&cutform.p[0],12,1,ifp);
/* 開始処理 */
fprintf(inc,"%s\n","%");
fprintf(inc,"G92X%fY%fZ%f\n",cutform.p[0],cutform.p[1],cutform.p[2]);
while(1) {
/* 2バイト読み込みと終了の検出 */
if( fread(bit,2,1,ifp) == 0 ) break;
/* 工具の変更検出と読み込み */
if( bit[0] & 0x01 ) {
fread(&cutform.tcode,2,1,ifp);
fprintf(inc,"T%02d\n",cutform.tcode);
}
/* SEQNO(ブロック行番号)変化検出と読み込み */
if( (bit[0] & 0x02) >> 1 ) {
seqn=0;
fread(&cutform.seqno,4,1,ifp);
}
/* 移動モードG00/G01/G02/G03の変化検出と読み込み */
if( (bit[0] & 0x04) >> 2 ) fread(&cutform.movemode,1,1,ifp);
/* 座標値の変化検出と読み込み */
if( (bit[0] & 0x08) >> 3 ) fread(&cutform.p[0],4,1,ifp);
if( (bit[0] & 0x10) >> 4 ) fread(&cutform.p[1],4,1,ifp);
if( (bit[0] & 0x20) >> 5 ) fread(&cutform.p[2],4,1,ifp);
/* 設定F値の変化検出と読み込み */
if( (bit[0] & 0x40) >> 6 ) fread(&cutform.orgfeed,4,1,ifp);
/* 加工方向の変化検出と読み込み */
if( (bit[0] & 0x80) >> 7 ) fread(&cutform.pos,1,1,ifp);
/* 切削量の変化検出と読み込み */
if( (bit[1] & 0x01) >> 0 ) fread(&cutform.vol,4,1,ifp);
/* 最適化後F値の変化検出と読み込み */
if( (bit[1] & 0x02) >> 1 ) fread(&cutform.optfeed,4,1,ifp);
seqn++;
/* テキスト版モニタリングデータ書き込み */
fprintf(inc,"N%d(%04d)G%02dX%fY%fZ%f",
cutform.seqno,seqn,cutform.movemode,cutform.p[0],cutform.p[1],cutform.p[2]);
if( cutform.pos == 0 ) {
fprintf(inc,"F%d(A%fF%d)\n",cutform.orgfeed,cutform.vol,cutform.optfeed);
} else if( cutform.pos == 1 ) {
fprintf(inc,"F%d(V%fF%d)\n",cutform.orgfeed,cutform.vol,cutform.optfeed);
} else if( cutform.pos == 2 ) {
fprintf(inc,"F%d(U%fF%d)\n",cutform.orgfeed,cutform.vol,cutform.optfeed);
} else if( cutform.pos == 3 ) {
fprintf(inc,"F%d(D%fF%d)\n",cutform.orgfeed,cutform.vol,cutform.optfeed);
} else {
fprintf(inc,"(N)\n");
}
}
/* 終了処理 */
fprintf(inc,"%s\n","%");
fclose(inc);
fclose(ifp);
}


5.解析プログラム・サンプル2(加工部長さの解析)

 先の解析プログラム・サンプル1は、単に等価な情報を別フォーマットに変換するだけの サンプルでしたが、実用サンプルとして、工具毎に加工部の種類別で長さを出力するコマンド ライン・プログラムを紹介します。

 帳票出力でも似たような情報が出ますが、あくまでもNCデータ単独の情報が元になります ので解析には限界があります。このプログラムはモニタリングデータを元にしますので 更に詳細な情報が得られます。
 このサンプルでは工具毎の情報で、かつ早送り部(G00)でも、空転部と加工(干渉)部に 分け、切削送り部でも、同様に空転部と加工部別に長さを出力します。さらにその加工部でも 内訳として、ダウンカット、アップカット、垂直部、その他の部分に分けて、それぞれの長さを 出力します。NCデータの無駄な部分の解析や、異常な経路の抽出には役立つはずです。
 コマンドラインのプログラムですので、TRYCUTの起動も含めバッチファイルで 利用すると自動化されて使いやすいものと思われます。

 実行モジュールvmon.exe(2005/9/11版) ソース コードvmon.cpp(2005/9/11版)

[起動形式]
 コマンド・プロンプトにて
vmon (バイナリモニタリングデータ名) [Enter]

[結果例]
T19
早送り 空転= 338.959
早送り 切削= 0.000
切削送り 空転= 8.000
切削送り 切削= 602.000
内訳 ダウンカット= 0.000
   アップカット= 12.000
   垂直部 = 0.000
   全面/その他 = 590.000

T21
早送り 空転= 796.314
早送り 切削= 0.000
切削送り 空転= 70.000
切削送り 切削= 32.000
内訳 ダウンカット= 0.000
   アップカット= 0.000
   垂直部 = 32.000
   全面/その他 = 0.000

T05 早送り 空転= 717.232
早送り 切削= 5.000
切削送り 空転= 75.964
切削送り 切削= 512.415
内訳 ダウンカット= 19.945
   アップカット= 6.981
   垂直部 = 20.000
   全面/その他 = 465.489

※ソースコードは自由に改変していただき、他の情報の抽出やフォーマット変更など を行って下さい。実行モジュールの作成にはコンパイラが必要になりますが、SDKの ページでも紹介しているVisual Studio の Express Edition(無償コンパイラ)で十分間に合うと思われます。インストール後、スタートメニューに登録されるコマンドプロンプトを開き、修正ソースに 対して、

cl vmon.cpp [enter]

とするだけで、vmon.exe が作成されます。


 本モニタリングデータに対するご要望や、ご意見ご質問がありましたら、 support@trycut.comまで、ご連絡 下さい。


トップページ