grbl生成(ポスト処理)の修正で使いやすく

CNCにまつわるソフトは多数あるが、Windows用しかなかったり、有料だったりするものが多い。Macユーザの私は現在のところ主に Fusion 360 を用いてツールパスを生成している。立体デザインには3Dプリンタのための設計で使い慣れた Blender を用い、また彫刻には Inkscape を使っている。ツールパス生成にはいろいろな自由度とコツがあり、3Dプリンタのスライサー設定よりも難しい。それはさておき、Fusion 360 の生成するツールパスにいくつか使い勝手の悪いところがあったので、「ポストライブラリ」を修正して使いやすくしてみた。

まずはポスト処理の修正の方法から。Fusion 360 の「製造」画面から「管理」の「ポストライブラリ」を選び、これまでに使用しているライブラリを任意の場所に書き出す(エクスポートする。ファイルから右に矢印が飛び出しているアイコン)。これを「ローカル」で読み込み直せば自前のポストライブラリとして使用できるので、今度はその書き出したファイル(拡張子が cps のファイル)を修正する。

まず修正したのは、加工後に原点復帰するコードの追加である。刃物を変えて何度か加工するときなど、原点に戻ってくれないと次の加工の位置合わせが面倒になる。刃物を変えると刃先の高さが変わるが、これはなにか治具などを使えば位置合わせ可能であり、本質的には (X, Y) が元に戻れば実用上はほとんど問題ない。これを実現するには、加工後の処理を決める関数onClose()に writeBlock 関数を用いて以下の3行を追加した。後述するようにワークの上に傷をつけるのを避けるため、初期位置から1mm上へ一旦上がり、原点の上へ移動してから下げる動きとしている。

function onClose() {
//ADD : return to the origin
  writeBlock(gFormat.format(0), zOutput.format(1));
  writeBlock(gFormat.format(0), xOutput.format(0), yOutput.format(0));
  writeBlock(gFormat.format(0), zOutput.format(0));
  setCoolant(COOLANT_OFF);

同様に、加工開始時にワークに傷をつけないため最初に1mmだけ上に上昇するコマンドを、開始時処理を指定するonOpen()関数の末尾に追加した。Fusion 360 の grbl のポストライブラリは、初期位置のまま加工開始点へ水平移動するコードとなっている。彫刻などでは、刃先をワークすれすれの高さに調整することが多い(ワークと刃先の間に紙をおいて、紙が動くか動かないかぐらいの高さに刃先の高さを調整する)。そうするとワークの高さのうねりなどで傷が入ることがあるが、1mm上げれば問題ない。もっと上げてもよいが、厚みのあるワークを加工する場合はZ軸のリミットに当たる危険が生じるので1mmに設定した。

  }
//ADD : 1mm hop up
  writeBlock(gFormat.format(0), zOutput.format(1));
}

最後に,gcode のコメントを出力しないようにした。というのが、この機種のオフラインコントローラーはコメントの扱いが不完全なようで、コメントがあると動かないことがあるためである。このためには、以下のように writeComment()関数の書かれた行の行頭に//を書く。

    if (getProperty("useToolCall")) {
      writeToolBlock("T" + toolFormat.format(tool.number), conditional(getProperty("useM06"), mFormat.format(6)));
      if (!isFirstSection() && !getProperty("useM06")) {
//        writeComment(localize("CHANGE TO T") + tool.number);
      }
    } else if (getProperty("useM06")) {
      writeToolBlock(mFormat.format(6));
    }
    if (tool.comment) {
//      writeComment(tool.comment);
    }

これらの修正により出力された gcode ファイルは以下のようになる。追加されたコマンドは赤字で示している。

G90 G94
G17
G21
G0 Z1

T4
S10000 M3
G54
G0 X120 Y0
Z1
G1 Z-1 F333.3
X-120 F500

<中略>

Z-30
X-120 F500
Z1
G0 Z1
G0 X0 Y0
G0 Z0
M5
M30

出力されたファイル(拡張子が nc のファイル)を開いて手作業でこれらのコマンドを書いても良いが、ポストライブラリを直接修正したほうがずっと確実で楽になる。

このような指定を利用して加工した例を示す。木材にしろアクリル板にしろ、安価に入手するには端材を探すのが良い。そこでウォールナットの端材を購入したが、ほとんどすべてが厚み32mmほどの厚板だった。そこで、刃先と軸の太さがともに4mmのエンドミルを用意し、深く掘り下げることで薄板を作ることにした。gcode そのものは直線的に30mm掘り下げるだけのものである(安全のため1mmずつ掘り下げた)。これで一度加工してから、オフラインコントローラーでY軸方向に10mm移動し、また同じコードを走らせることで厚み6mmの薄板を切り出した。何度か同じことを行えば(クランプに当たらない範囲で)複数枚を切り出すこともできるし、Y軸の移動量を変えれば切り出す薄板の厚みを変えることもできる。

もちろん、加工時間を節約するため、太いエンドミルで粗加工してから細いエンドミルで仕上げをするようなことにも利用できる。各軸がねじ駆動のため、意図せず各軸の位置がずれることはほとんどなく、刃先を変えると変わりうるZ軸(高さ)は治具やワーク天面で合わせ直せば良い。これは2種類のエンドミルを交換して作成したネームプレート(幅60mm, 高さ24mm, 厚み5mm)である。材料には上の切り出し方法で作成した6mmの薄板を用いた。最初は直径2mmのスクエアエンドミルを用いて荒削りし、次に1mmのボールエンドミルで仕上げ加工した。Sとaの間の距離が1mmを切っている部分があり、そこが繋がってしまっているが、おおむね良好に作成できた。スクエアエンドミルだけでは、iの点と棒の間や、aの中抜き部分は切削できない。写真では少し切削痕があるが、実物は目視ではほとんど気づかない程度である。