フライス盤自作CNC化

フリーのCNC用ソフトウェア
HeeksCNCのNCデータを内部コードに変換する
gcode2zcamプログラムを作成する

 


2014年
5月11日
HeeksCNC
の使い方もだいたい分かってきたので、ガレージのCNCの内部コードに変換する
gcode2zcamプログラムを作成しました。変換部の処理は下記のように単純でGコードで使われるアルファベットX,Y,Z,Fなどを探して、次のアルファベットまでの間の文字を数値に変換するだけです。以前に作成したdxf2zcamの処理と同様にバックラッシュを補正して内部コードに変換し同時にgnuplot用のプロットデータを生成します。
//
// "N0100X8.0001Y-8.0001Z.01F840S200I5.25J2.5M02"; //のような文字列の先頭ポインタが引数
//
// 文字が無くなるまで
while (*ptr !='\0') {

    // 指定文字でない間ループしてポインタを進める
    while (*ptr!='X' && *ptr!='Y' && *ptr!='Z' && *ptr!='F' && \
           *ptr!='S' && *ptr!='M' && *ptr!='I' && *ptr!='J' && *ptr!='\0') {
           *ptr++;
    }

    // 指定文字によって分別
    switch (*ptr) {

        case 'X':
        ptr++;

        // さらにアルファベットならエラー
        if (isupper(*ptr))
            return (G_ERROR);

        //ディステネーション側ポインタ初期化
        g_ptr = &gxx_x[0];

        //アルファベットが来るまでコピー
        while (!isupper(*ptr) && *ptr!='\0') {
            *g_ptr++=*ptr++;
        }
        *g_ptr='\0';               

        //前の値を取っておく
        gxx_val_x_o = Curr_x;

        // 数値へ変換
        sscanf(gxx_x, "%lf", &Curr_x);

        //変換したパラメータのビットパターンを加算
        res += IS_X;
        break;
 
        //
        //その他、Y,Z,Fなど他のパラメータの変換
        //
    }
}


HeeksCNCの使い方1で作成したデータで切削してみます。HeeksCNCの使い方1で作成してた2つの球で凹んでいる直方体です。このページは図をクリックすると大きい図が表示されます。


gcode2zcamでデータ変換して3mmのエンドミルで2x4材に切削したところ。これは正常に切削できました。


次はHeeksCNCの使い方3で作成したWEB上のSTLデータです。


HeeksCNCの使い方3の最後に作成したNCデータをよく見ると、周囲全体が-17mmまでパスが通っていないことがわかります。これは外枠の"Sketch"が小さいためです。


外枠の"Sketch"もう一回り大きく変更、また、高さ17mmのSTLデータを深さ17mmでボールエンドミルで切削しても外周がちゃんと削れません。なので、もう一段深く削るように、"minimum Z"-20に設定します。


"Pocket Operation""final depth"-20に設定します。


このパラメータでNCデータを作成します。よく確認すると、STLデータを突き抜けているデータがありました。このまま切削すると、せっかく作っているものにが開きます。


NCデータをエディタで確認します。下記の赤で囲った部分が該当するデータで、各ステップダウン毎にありました。


複雑な形だと分かりにくいので、直方体に半球がついた簡単な3Dデータで確認します。


赤枠の直線が3Dデータの内部まで達しています。


ポケット切削のパラメータを確認します。この3Dデータの内部に達するデータは"rapid safety space""step down"のパラメータが関係していことが分かっています。"rapid safety space"の意味が、いまいちわかりませんが、選択すると以下のような絵がでてきます。0.18.0ではフリーハンドですが、1.0はきれいな絵になっています(笑)。ちなみに半球部の高さは10mmです。


まず、
step down=2.5,rapid safety space=0の場合。半球の頂点から下に7.5mm伸びています。これはいけません


step down=2.5,rapid safety space=7.5の場合。半球の頂点から上に7.5mm伸びています。これは無駄なパスですが、切削自体は問題ないです。


step down=5,rapid safety space=0の場合。半球の頂点から下に5mm伸びています。これはいけません


step down=5,rapid safety space=5の場合。半球の頂点から上に5mm伸びています。これは無駄なパスですが、切削自体は問題ないです。いろいろ調べてみましたが、この4例から分るのは全切削深さをstep down幅で複数回で切削していったとき、最後から1つ前のstep downまでの長さ(深さ10で2.5の時7.5、5の時5)のパスが生成されるということのようです。深さが深いときは移動の時間がかかつて無駄ですが、rapid safety spaceの値を大きくして上側に延ばせばとりあえずはいいことになります。NCデータを直接エディットして削除するということもできますが〜次回はF86を切削してみたいと思います。



5月18日
上記で作成したF86のデータの無用データをエディタで直接削除して、スタイロフォームに切削してみました。


昼間は塗装でコンプレッサを使っていたので、夕方から開始して、3時間17分かかりました(笑)。約9600本の直線に変換されていて、小さいわりに時間がかかります。



<<まとめ>>

・外枠のSketch
 エンドミル直径を考慮して、パスが下部の外周に達するような大きさで作る。
SketchのZ軸の値はどんな値でも影響しない。
 (HeeksCNCの使い方1でZ=0
Sketchを描いていますが、Z軸の値はどこでも影響しません)

・切削深さ
 ボールエンドミルを使う時は下部の外周が切り込み不足にならないよう注意する。

無用データ
 パラメータの設定の問題か?無用データが生成される。特に凸部を切削する時は切削物に切り込む場合がある。