Ultimaker Cura start G-code が気に入らないから変更だ~。

3Dプリンター

3Dプリンター(AnyCubic Mega-s)の印刷開始時の振る舞いがどうも気になります。サンプルのフクロウさんのg-code とCura 4.8.0 で作成したg-code でスタート時の動きが違います。これはCuraの設定の違いにより生じますが、プリンター管理画面で「開始時のGコード」を書き換えれば、ある程度変更することができます。今日はプリント開始前にGコードが何をしているのかについて見ていきたいと思います。

Gコードの構造

まずはじめに、Gコードの全体を大きく分けてみます。

このように、3つの部分に分けることができます。
最初の開始時のGコードは、プリンターの状態を設定するところです。おそらく2,30行に収まります。
続いて真ん中のパートに実際のプリント動作が書かれています。付属のフクロウのファイルで20万行くらいあります。
そして最後に終了時のGコードとして印刷終了時の処理をします。こちらも開始時と同じく、多くても2,30行くらいです。
今日はこの中の最初の部分の印刷の準備について考えてみます。

設定するところ

開始時のGコードの書き換えはプリンタ管理の中で行います。

図1

画面左上のプリンター名をクリックしてプリンター管理へ進みます。

図2

対象となるプリンターを選択してプリンターの設定へ。

図3

緑の枠内が初期状態での「開始時のGコード」です。ウィンドウが小さいので全て見えていませんが、スクロールするかウィンドウを大きくすると全て見えます。全選択後、コピーして、テキストエディタなどで編集することができます。日本語訳の「G-Code の開始」に違和感を覚えましたので、この記事では「開始時のGコード」に表現を変えています。原文は「Start G-code」です。

設定内容

では、この初期状態のGコードを見てみましょう。

G21 ;metric values
G90 ;absolute positioning
M82 ;set extruder to absolute mode
M107 ;start with the fan off
G28 X0 Y0 ;move X/Y to min endstops
G28 Z0 ;move Z to min endstops
G1 Z15.0 F{speed_travel} ;move the platform down 15mm
G92 E0 ;zero the extruded length
G1 F200 E3 ;extrude 3mm of feed stock
G92 E0 ;zero the extruded length again
G1 F{speed_travel}
G0 Y20 F{speed_travel}
M117 Printing…
G5

各行の”;”以降はコメントになりますので命令に影響しません。
開始時のGコードを日本人に解るように翻訳してみると次のようになります。

G21;長さの単位をmmに設定します。
G90;座標値は絶対指令にします。(原点を基準とした座標値)
M82;フィラメントの押出量は絶対指令にします。(押し出した全体の長さ)
M107;冷却ファンはOFFです。
G28 X0 Y0;X軸とY軸をホームポジションに移動してください。
G28 Z0;Z軸をホームポジションに移動してください。
G1Z15.0 F{speed_travel};プリントヘッドを15mm上昇させます。移動速度は{speed_travel}という変数の値です。
G92 E0;フィラメントの現在の位置を0とします。
G1 F200 E3;フィラメントを200mm/mの速さで3mm押し出してください。
G92 E0;フィラメントの現在の位置を0とします。
G1 F{speed_travel};移動速度を{speed_travel}の値にしてください。
G0 Y20 F{speed_travel};Y軸の座標値20まで{speed_travel}の速さで動いてください。
M117; Printing…ディスプレイに「Printing…」と表示してください。
G5;電源喪失時の復帰を可能にします。

書き出されたGコード

では、適当な3Dデータをスライスして、実際に書き出されたGコードを見てみましょう。保存したファイルの拡張子は.gcodeですが中身は普通のテキストですので、メモ帳などで見ることができます。

;FLAVOR:Marlin
;TIME:4259
;Filament used: 4.05335m
;Layer height: 0.2
;MINX:77.371
;MINY:93.101
;MINZ:0.2
;MAXX:132.628
;MAXY:119.516
;MAXZ:49.4
;Generated with Cura_SteamEngine 4.8.0
M140 S60
M105
M190 S60
M104 S200
M105
M109 S200
M82 ;absolute extrusion mode
G21 ;metric values
G90 ;absolute positioning
M82 ;set extruder to absolute mode
M107 ;start with the fan off
G28 X0 Y0 ;move X/Y to min endstops
G28 Z0 ;move Z to min endstops
G1 Z15.0 F100 ;move the platform down 15mm
G92 E0 ;zero the extruded length
G1 F200 E3 ;extrude 3mm of feed stock
G92 E0 ;zero the extruded length again
G1 F100
G0 Y20 F100
M117 Printing…
G5

G92 E0
G92 E0
G1 F2400 E-6
;LAYER_COUNT:247
;LAYER:0
M106 S255
  ・
  ・

黄色くマーキングしたところが設定してある「開始時のGコード」です。それより上はCuraが自動で作成したコードで、プリント時間、フィラメントの使用量などの情報表示や、ヒートベッドやプリントヘッドの温度を指示しています。G5より下の部分からが実際の印刷の動作となります。

気に入らないところ

このままでも問題なく印刷できるので気にしないでも良いと言われれば、グーの根も出ないのですが、気になるところを説明します。

M82

開始時のGコードで指定しなくても自動で生成してくれていますので、削除の方向で。もし、自動で入らなかったらまずいよね。と不安な方は入れても何の問題も無しです。

G28

原点(ホームポジション)への移動を2行に分けて、Z軸を後で動かそうという意図が見えますが、Anycubic Mega-s の場合、軸指令無しのG28 単独指令でX軸、Y軸、Z軸の順番で各軸が原点移動後に次の軸が動きますので、1行にまとめても全く同じ動作になります。

G1 Z15.0 F100

Z軸を15mmも上昇させる理由がよくわからないのと上昇速度が遅すぎます。最後に説明する密着性の動作と関係してくるのですが、必要量のみ上昇させます。

G1 F100

ここで単独で速度を指令する必要を感じません。削除対象です。

G0 Y20 F100

この動作にどういう意味があるのかわかりません。時間かかるしちょっと謎です。しかし、上のG1 F100 も同様に、歴史のあるソフトがわざわざ入れているので、何か意味があると思います。判ればまたご報告します。

M117 Printing…

Anycubic Mega-sはディスプレイへの文字表示に対応していません。削除します。

ヒートベッドへのプリプリントで密着性の安定化をはかるコードが無い

プリント開始時にノズルに付いたゴミの除去や溶出を安定させ1層目の密着性を向上させる目的でテーブル外周部のどこかで、一定の距離のラインを引く動作を入れます。プリント設定で密着性のチェックを入れて種類をスカートにすれば同じ効果がありますが、大きい印刷物だと無駄なライン引きが発生するので、こちらで対応します。

書き換え作業

上記の方針に従って書き換えるとこうなります。

G21 ;metric values
G90 ;absolute positioning
M107 ;start with the fan off
G28 ;move X/Y/Z to min endstops
G1 Z5 F3000 ;move the platform down 5mm
G92 E0 ;zero the extruded length
G1 F200 E3 ;extrude 3mm of feed stock
G92 E0 ;zero the extruded length again
G1 X5 Y5 F1500 ;move X5 Y5
G1 Z0.2 F1000 ;move Z0.2
G1 F600 X80 E14 ;print line
G1 F5000 Z0.5 Y10 ;retract filament
G5 ;enable resume from power failure

Z軸の上昇量を5mmとしました。その後Z軸0.2mmの高さで、ヒートベッドの手前の方(Y5)から X方向に 80mm のラインを引いた後に、フィラメントを一旦切り、後は実際の印刷位置に移動していきます。

書き換えは、このGコードをコピーして、図3の開始時のGコードの所へ貼り付ければ、次のスライスからこのコードが反映されます。

ラインの引き方やその前のZ軸の高さなどは色々試してみて納得のいく値を見つけてください。
Gコードを日本語で説明したところに変数という言葉が出ましたが、変数を使えばいろいろ便利なことが出来たりします。こちらはまた別記事で紹介したいと思います。

では、今日はここまでです。

コメント

  1. 石垣 治 より:

    Gコードの解説がとても分かりやすく説明されていて勉強になりました。
    ありがとうございます。

    • rimo rimo より:

      石垣 様
      わざわざコメントを残してくださりありがとうございます。
      少しでもお役に立てたみたいで嬉しいです。
      これからもよろしくお願いします。

スポンサーリンク