<弟15回目:’04年1月20日>

dxfファイルをCAMデータに変換するプログラムの動作確認


dxfファイルを専用CAM用の切削データに変換するテストプログラムdxf2zcamを作成しました。前回作成した、dxfファイルのエンティティを動的メモリに読みこむプログラムに図形の接続を追跡するコードを追加して、簡単な切削順(ツールパス)を生成できるようにしました。まだ、テスト段階で簡単な図形しか変換できません。以下は処理フローです。

////////////////////////////////////////////////////////////////////////////////////////////
//
// 処理フロー
//
// ・DXFファイルを読み込み、動的メモリに格納します。
//   格納するのは以下の2種類です。
//
//     a.OBJ構造体の動的メモリにLine,Arc,Circle,Point,Textの各エンティティのポインタを
//         チェインしながら格納します。
//
//     b.上記Textが"CW"または"DEF"から始まる特定のレイヤ名であればTEXT_OBJ構造体の動的
//         メモリに、ポインタをチェインしながら、そのテキストの内容を格納します。
//
//         レイヤ名の意味は以下のようになります。
//
//          CW:時計回りに切削
//          CCW:反時計回りに切削
//          DEF:接続されている順で処理します。
//          例:レイヤ名:CW100
//              テキスト内容:depth=21.0/2.5 speed=80
//              時計回りのレイヤ名100、21mm厚を2.5mmづつ切り込み、切削速度は80
//
// ・TEXT_OBJ構造体のメモリチェインからレイヤ名を得てOBJ構造体の動的メモリに同一のレイヤ名が
//    あるか調べ、もしあれば、エンティティの端点を辿り接続されている図形が開いているか閉じて
//    いるか調べます。この接続されたエンティティをブロックとして定義します。ブロックは全体の
//    切削厚を切り込み切削厚で複数回、専用データに変換しファイルに出力します。
//
//    <端点に接続できる端点の数>
//     各エンティティの端点には最大で1つの他の端点が接続できます。つまり、端点に2つの
//     エンティティが接続されていると、どちらか1つしか接続を調べません。
//
//    <端点の接続条件>
//     各端点X,Yがそれぞれ+-0.001の範囲であれば接続されていると判断します。
//
//     a.ブロックが開いている
//         2つの端点をみつけて、切削方向にしたがいブロックを専用データに変換し出力します。
//
//     b.ブロックが閉じている
//         カレント点に近い接続点を見つけて、そこから切削方向に従いブロックを専用データに
//         変換し出力します。
//
////////////////////////////////////////////////////////////////////////////////////////////

下はQcadで作ったドカのミッレ用ブレーキキャリパーサポートの図面です。内側のの部分が切削されて残る部分です。外側の黒の部分は内側から4.3mm外側に作った荒削り用のデータです。Qcadは平行線を作成する機能があり、距離を指定して、直線、ARC、円の平行線が簡単に作成できます。ただし、平行図形は接続が保たれない場合があり、この場合は2直線のトリムを使って接続させます。4.3mmという値は8mmのエンドミルの半径+0.3mmとして計算したものです。仕上げよりも0.3mm大きくなるように切削します。現状ではエンドミルの刃幅を考慮して手動で図面を入力します(笑)。この外形図形と、切り込み/切削速度を指定するテキストdepth=21.0/2.5speed=80""CCW_ARA"というレイヤ名を付けます。先頭のCCW反時計回りで切削するということを表します。後ろは適当な名前を付けておきます。これにより接続されている図形のブロックと切り込み厚、切削速度が指定されます。エンドミルは通常時計回りに回転します。切削後に内側を使う場合は反時計回りに切削した方が仕上がりがきれいになります。

作成したdxf2zcamを使ってCAM用の専用ファイル(ここを参照)確認用のGnuplot用のプロットファイルを生成します。下はプロットファイルをGnuplotで3D表示したところです。Gnuplotの難点は3軸を正しい比率にできないことです。正しく変換できているかの確認用なので、とりあえずGnuplotを使っています。また、gsplot(ここからリンクされています)を使うと、ボタンクリックすることで視点を変えて図形を回転させることができます。原点から移動して21mmを2.5mmづつ切りこんでいる様子が確認できます。最終的にはGnuplotではなく、フライス制御用のアプリから専用のプロットアプリを呼んで、表示させる予定です。

変換されたCAMデータ本体はボールペンで描画させて確認します。4.3mm外側に書かれた図形です。こちらも正しく変換できているようです。

実際に20mmのジュラルミンを切削してみます。下穴用のデータを作成して、4つの下穴用のマーク原点の小さなマークをドリルで付けます。

上記のマーク部に穴開け加工を行い、2つの穴を使ってテーブル固定し、原点マークを合わせます。8mmのエンドミルで切削を行います。下は加工が終わったところです。切り込みの跡や 荒削のため切削面がかなり荒れているのが確認できます。

下の図面は4mm外側に作った仕上げ用のデータです。今度は21mmの切り込み1回切削し仕上げ上げます。


下は仕上げ後の切削面です。切り込みが21mmのため、長い切りこが出ています。かなりきれいになっていますが、少し荒削り面が残っています。もう少し荒削りを外側にした方が良いようです。


現状ではレイヤ毎に図面を分けていますが、実用的には1つの図面からレイヤ毎に切削データを出力させ、各種エンドミル/ドリルを取り替えながら一括して切削できるようにする必要があります。


外形の完成したブレーキキャリパーサポートに軽量化のために加工をしました。画像をクリックすると
動画を再生します。容量は約10MBです。