Ultimaker Cura 4.10.0 Mega-s用 [Start G-code]、[End G-code] を変更する

3Dプリンター

Curaのバージョンが4.10.0になって、anycubic mega-s のプリンターのプロファイルが追加されました。ただし、Mega-pro と共用みたいで Mega-s には関係のないコードが Start G-code に入っています。実害は無いので放っておいても問題ないのですが、他にも変更したいところがありますので、書き換えてみようと思います。ついでに End G-code コードも少し変更しました。

Start G-codeって?

プリントする前に、テーブルやノズルを温めたり、単位系を設定したり、絶対位置で制御するのか、それとも相対位置なのかなど、毎回必ず実行しなければならない命令をStart G-code として Cura に設定します。同様に終了時に毎回行う動作を End G-code に記述しておきます。
プリントする前に実行される命令は、Start G-code の内容のみではなく、Curaによって自動的に生成される命令が含まれますので、その命令を Start G-code に書く必要はありません。どのような命令が生成されるかについてはこの記事の最後の方で触れてみます。
なお、日本語訳の ”G-codeの開始” が何だか馴染めないので、英語のままで表記します。

設定場所

設定する場所はプレファレンスの中にありますので、プレファレンスからプリンターの項目を開いてもいいですし、下図のように、”準備する” のモードでプリンター名をクリックして、プリンター管理からプレファレンスにアクセスしても同じところにたどり着きます。

変更対象のプリンターが選択されていることを確認してプリンターの設定を開きます。

表示されるスペースが小さく、スクロールしてもコメント文が見えませんので、全体を見たい場合は、ウィンドウを大きくします。

初期状態のStart G-code

初期状態での Start G-code は次のようになっています。” ; ” より右側はコメントになります。

各命令を簡単に解説しておきます。

G21 ; 長さの単位を mm に設定します。G20がインチです。
G90 ; ノズル位置の指定を絶対指令にします。(原点を基準とした座標値)
M82 ; フィラメントの押出量の指定を絶対指令にします。(印刷開始時を0とした押出した全長)
M107 ; 冷却ファンをOFFにします。(ノズル左側のダクト付きのファンが対象です)
M140 S{material_bed_temperature_layer_0} ; {}内の温度までビルドプレートの温度を上昇させます。{}内は変数名です。意味は後述します。(目標温度に達していなくても、次の命令を受け付けます。)
G4 S60 ; 60秒待ちます。(ビルドプレートの温度が上がり続けます。)
M104 S{material_initial_print_temperature} ; {}内の温度までノズルの温度を上昇させます。(目標温度に達していなくても、次の命令を受け付けます。)
M190 S{material_bed_temperature_layer_0} ; ビルドプレートが{}内の温度になるまで待ちます。
M109 S{material_initial_print_temperature} ; ノズルが{}内の温度になるまで待ちます。
M300 S1000 P500 ; 0.5秒間、1000Hz のビープ音を鳴らします。
G28 X0 Y10 Z0 ; 各軸をホームポジションに移動させます。
M420 S1 ; Enable leveling ビルドプレートのレベル関連の何か。よくわかりません。
M420 Z2.0 ; Set leveling fading height to 2 mm ビルドプレートのレベル関連の何か。よくわかりません。
G0 Z0.15 ; ノズルを Z軸 0.15mm の位置に移動させます。
G92 E0 ; 現在のフィラメントの位置を 0 に設定します。
G1 X50 E25 F500 ; ノズルを X軸 50mm の位置に移動させながら、フィラメントを 25mm 押し出します。X軸の移動速度は、500mm/分です。
G92 E0 ; 現在のフィラメントの位置を 0 に設定します。
G1 E-2 F500 ; フィラメントを 2mm 引き戻します。引き戻す速さは 500mm/分です。
G1 X120 F4000 ; ノズルを X軸 120mm の位置に移動させます。フィラメントの押出しはありません。

G-code について詳しく見たい方は、こちらにリファレンスがあります。

スライス後の Start G-code

適当なモデルをスライスして出来上がったG-code がこちらです。黄色くマークしている行が、Start G-codeが反映されているところです。変数を使っていた部分に具体的な数字か入っているのがわかります。

;FLAVOR:Marlin
;TIME:9
;Filament used: 0.00315765m
;Layer height: 0.2
;MINX:102.7
;MINY:102.7
;MINZ:0.3
;MAXX:107.3
;MAXY:107.3
;MAXZ:0.375
;Generated with Cura_SteamEngine 4.10.0
M82 ;absolute extrusion mode
G21 ; metric values
G90 ; absolute positioning
M82 ; set extruder to absolute mode
M107 ; start with the fan off
M140 S60 ; Start heating the bed
G4 S60 ; wait 1 minute
M104 S210 ; start heating the hot end
M190 S60 ; wait for bed
M109 S210 ; wait for hotend
M300 S1000 P500 ; BEEP heating done
G28 X0 Y10 Z0 ; move X/Y to min endstops
M420 S1 ; Enable leveling
M420 Z2.0 ; Set leveling fading height to 2 mm
G0 Z0.15 ; lift nozzle a bit
G92 E0 ; zero the extruded length
G1 X50 E25 F500 ; Extrude 25mm of filament in a 5cm line.
G92 E0 ; zero the extruded length again
G1 E-2 F500 ; Retract a little
G1 X120 F4000 ; Quickly wipe away from the filament line`

G92 E0
G92 E0
G1 F1500 E-6
;LAYER_COUNT:1
;LAYER:0
M106 S76.5
M205 X10 Y10
G1 F600 Z0.375
;MESH:model01.stl
G0 F6000 X106.5 Y106.5 Z0.375
M205 X8 Y8
;TYPE:WALL-INNER
G1 F600 Z0.3
G1 F1500 E0
G1 F600 X103.5 Y106.5 E0.14967

ここで少し変数の話をしておきたいと思います。
M140、M190 の行に 60、そして M104、M109 の行に 210 という記載がありますが、お察しのとおり、Start G-code にある{material_bed_temperature_layer_0}や{material_initial_print_temperature}がその値を取り出すための変数になっています。
例えば、{material_bed_temperature_layer_0} は「マテリアル」カテゴリーの [初期レイヤーのビルドプレート温度] を、{material_initial_print_temperature} は [初期印刷温度] の値を読み出すための変数となります。

このように、予め定義された名称さえわかれば、いろんな値を取り入れて 柔軟な Start G-code を書くことが出来ます。どんな変数があるかについては、次のようなサイトがあります。

もっと身近なところで言えば、 Cura をインストールしたフォルダ内のファイルでもわかります。テキストエディタで開けます。

C:\Program Files\Ultimaker Cura 4.10.0\resources\definitions\fdmprinter.def.json

変更したいコードとその理由

変更したい命令とその理由などを述べたいと思います。

M82
Cura が自動的に生成する命令のひとつですので、Start G-code に新たに記述しなくても大丈夫です。同じ命令を2度司令しても特に問題にはなりませんが、個人的に1バイトでも無駄な文字を書きたくないので、削除します。

M300 S1000 P500
ビルドプレートとノズルの温度が設定値に達しましたよ、の合図のビープ音だと思いますが、エラーが発生したのかと、毎回、ドキッとしてしまいますので、削除します。次のG28でテーブルが動き始めれば、設定温度に達したことはわかるので問題ありません。

G28 X0 Y10 Z0
ホームポジションに移動して原点復帰をする命令ですが、記述してある座標値に意味はありません。Y軸に10という値が書いてありますが、Y0 でも Y でも全く同じ動作となります。さらに言えば、3軸ともホームポジションに移動させる場合は、軸名称もいりません。このときに3軸が同時に移動するのではなく、Mega-s の場合はX、Y、Z の順番にホームポジションに移動します。G28単独で記述します。

M420 S1
M420 Z2.0

ビルドプレートのレベリングに関する命令で、mesh-based leveling systems を使うそうなのですが、Mega-s では関係ないと思われるので、削除します。

G0 Z0.15
この行から3行分の動作は、実際にノズルを動かしながらフィラメントを押出すことにより、フィラメントの押出しの安定を図るとともに、押し出されたフィラメントの幅、量などを目視することで、ノズルの状態やビルドプレートとの間隔などを確認するためのものです。個人的にはレイヤー高さを 0.2mm で印刷することが多く、それと同じ高さで確認することを目的とするため、Z0.2 にします。
また、ホームポジションへの移動後、いきなりプリプリントの動作を行っていますが、ノズル温度の上昇中に溶出した場合のフィラメントをノズルから引き離す効果を期待して、一旦Z軸を上昇させ、少し離れたポイントに下降させます。その際、Y軸の位置があまりにも端すぎるので、若干内側に寄せます。これはプリンターの個体差のせいかもしれません。
もひとつ、Z軸を上昇させた際にボーデンチューブ内の遊びを無くすため、フィラメントを3mmだけ前進させます。

G1 X50 E25 F500
移動距離が短すぎの印象があるのと、その割に押出量が多く感じます。3月初旬に旧バージョンでの Start G-code 変更の記事を書いた際に、色々試して、たどり着いた値がありますので、今回もその値を採用します。

G1 E-2 F500
G1 X120 F4000
プリプリント完了後にフィラメントの引き戻しの動作とX軸の動作を入れて、印刷開始位置へ移動する際に、ノズルからフィラメントが溶出しないようにしているものと思われます。実際に出力されたG-code を見ていただくとわかるのですが、E-2 で引き戻された分が、押し戻されていません。印刷開始時に明らかに押出し不足になります。デフォルトでスカートが生成されますので、そちらで不足分を補うという考えなのでしょうか。ただ、スカートはモデルが大きいとムダに長いラインを引いてしまいますので、好きになれません。そもそもスカートの代わりのプリプリントなので、このあとの行で、CuraがE-6を生成することもあり、この E-2 は不必要と考えます。代替の動作は、これまた前回採用した、ZとYの動きに変えようと思います。

M140、M104、M190、M109
これらについては変更ではないのですが、少し説明をしておきます。
実は、ビルドプレートとノズルのヒーターに関しては、Start G-code に記述しなくても自動で生成されますので、本来ならStart G-codeに書く必要はないのですが、自動生成されるコードでの加熱制御は、ビルドプレートが設定温度に達してから、ノズルのヒーターがONになるので、少々時間がかかります。それに対して、今回のデフォルトで記述されているヒーターの制御は、ビルドプレートが温まり始めて60秒後にノズルも温まり始め、同時に加熱が進みます。その分、印刷開始が少し早くなるというメリットがあります。

変更後のStart G-code

変更後の内容が次のようになります。

G21 ; metric values
G90 ; absolute positioning
M107 ; start with the fan off
M140 S{material_bed_temperature_layer_0} ; Start heating the bed
G4 S60 ; wait 1 minute
M104 S{material_initial_print_temperature} ; start heating the hotend
M190 S{material_bed_temperature_layer_0} ; wait for bed
M109 S{material_initial_print_temperature} ; wait for hotend
G28 ; move X/Y/Z to min endstops
G1 Z5 F100 ;lift nozzle 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 F100 ;move Z0.2
G1 F600 X80 E14 ;Extrude 14mm of filament in a 80mm line.
G1 F5000 Z0.5 Y10 ;Quickly wipe away from the filament line

書き換え作業

あとは、出来上がった上記のファイルをStart G-codeの欄へ上書きすれば完了です。コメントが必要でなければ、命令のみを直接打ち込んでもいいですし、テキストエディタで編集後、コピペしてもいいです。先程も触れましたが、表示欄が小さいので、ウィンドウを大きくして作業することをお薦めします。

End G-code を変更

続いて、End G-codeを編集したいと思います。
End G-code のオリジナルはこちらです。

Start G-code と同様に各命令を簡単に解説しておきます。

M104 S0 ; ノズルのヒーターをoffにします。
M140 S0 ; ビルドプレートのヒータをoffにします。
M107 ; 冷却ファンをOFFにします。
G91 ; ノズルの位置、およびフィラメントの位置を相対指令にします。
G1 E-5 F300 ; フィラメントを5mm引き戻します。
G1 Z+10 E-5 ; ノズルを10mm上方に移動させながら、フィラメントを5mm引き戻します。
G28 X0 Y0 ; X軸とY軸をホームポジションに移動させます。
G1 Y180 F2000 ; ビルドプレートを前方へ移動させます。
M84 ; モーターをoffにします。
G90 ; ノズルの位置、およびフィラメントの位置を絶対指令にします。
M300 S440 P200 ; 終了のビープ音を鳴らします。周波数400Hz、0.2秒間。
M300 S660 P250
M300 S880 P300

スライス後の End G-code

こちらがスライスして出来上がったコードです。

G1 F1500 E-2.84235
M140 S0
M205 X10 Y10
M107
M104 S0 ; Extruder off
M140 S0 ; Heatbed off
M107 ; Fan off
G91 ; relative positioning
G1 E-5 F300 ; retract a little
G1 Z+10 E-5 ; X-20 Y-20 F{travel_xy_speed} ; lift print head
G28 X0 Y0 ; homing
G1 Y180 F2000 ; reset feedrate
M84 ; disable stepper motors
G90 ; absolute positioning
M300 S440 P200 ; Make Print Completed Tones
M300 S660 P250 ; beep
M300 S880 P300 ; beep
M82 ;absolute extrusion mode
;End of Gcode

End G-code の気になるところ

M140 S0
Cura が自動的に生成する命令のひとつですので、End G-code に新たに記述しなくても大丈夫です。

M107
こちらも、Cura が自動的に生成する命令のひとつです。

G1 E-5 F300
フィラメントの引戻し量が多すぎる気がするので少なめに。

G1 Z+10 E-5
印刷終了後のノズル引き上げが多すぎる気がするので少なめに。実害はないのですけど、気になった点を少しばかり。セミコロンが何故か2つあります。まぁ、それは良しとして、もし、1つ目のセミコロンを外して ”X-20 Y-20 F{travel_xy_speed}” を使う場合、変数名が間違ってますので、このままでは数字に変換されません。正しくは、{speed_travel} です。

G28 X0 Y0
Y軸をホームポジションに移動させる理由がよくわからないので、とりあえず、X軸のみをホームポジションへ。

M300 S440 P200
少しメロディーを変えてみます。書き換えた周波数に小数点を入れていますが、小数点が有効かどうかの確認は取れていません。小数点が無視されて鳴っているのかどうかは、私の耳では判別が付きませんでした。

変更後の End G-code

変更後の内容がこちらです。Start G-code と同様にプリンターの設定に書き込みます。

M104 S0 ; Extruder off
G91 ; relative positioning
G1 E-2 F300 ; retract a little
G1 Z+1 E-5 ; lift print head
G28 X ; homing X
G1 Y180 F2000 ; Move it so easily removed
M84 ; disable stepper motors
G90 ; absolute positioning
M300 S739.989 P400 ; Make Print Completed Tones
M300 S587.33 P400
M300 S440 P400
M300 S587.33 P400
M300 S659.255 P400
M300 S880 P1200
M300 S659.255 P400
M300 S739.9489 P400
M300 S659.255 P400
M300 S440 P400
M300 S587.33 P800

Start G-code , End G-code を空白にすると?

特に深い意味があるわけではないのですが、Start G-code 、 End G-code 共に空白にしてスライスするとどうなるのか試してみました。

まずは、Start G-code からです。具体的な動作は、ビルドプレートとノズルのヒーターのONと、フィラメントの押出しを絶対指令にすることと、その押出位置をリセットすることの3つです。M28の原点復帰がありませんので、Start G-code への記述無しでの動作は無理っぽいですね。

;FLAVOR:Marlin
;TIME:9
;Filament used: 0.00315765m
;Layer height: 0.2
;MINX:102.7
;MINY:102.7
;MINZ:0.3
;MAXX:107.3
;MAXY:107.3
;MAXZ:0.375
;Generated with Cura_SteamEngine 4.10.0
M140 S60
M105
M190 S60
M104 S200
M105
M109 S200
M82 ;absolute extrusion mode
G92 E0
G92 E0

続いて、End G-code を見てみます。フィラメントの引戻し、ビルドプレートとノズルのヒーターのoff、冷却ファンのoff、とフィラメント送りの絶対位置制御が指示されましたが、高温のノズルが印刷したモデルにとどまったまま終了するので、終了地点に痕が残ってしまいそうです。こちらも空白ではまずいようです。

G1 F1500 E-2.84235
M140 S0
M205 X10 Y10
M107
M82 ;absolute extrusion mode
M104 S0
;End of Gcode

あとがき

さて、今日はG-codeについて見てきました。Start G-code や End G-code の書き換えについては、もし間違えていると、3Dプリンターの動作に直接関わるので、場合によっては良くない結果となるかもしれません。変更後最初の印刷については、出来上がったGコードをよく確認して、プリンターを壊さないようお気をつけください。

では、今日はこのへんで、終わります。

コメント

スポンサーリンク