Ultimaker Cura 4.11.0 / Anycubic Mega-s用 [Start G-code]、[End G-code] の見直し

3Dプリンター

Curaのバージョンが4.10.0になった際に追加された、Mega-s/pro用プリンタープロファイルの Start G-codeやEnd G-code を自分好みに書き換えていましたが、いくつか気になる点が出てきましたので、改変しました。


基本的事項の参照

今回の記事は、改変した内容についてのみとなりますので、Start G-codeって何?とか、何処で設定するの?などについては、過去記事、「Ultimaker Cura 4.10.0 Mega-s用 [Start G-code]、[End G-code] を変更する」を参考にしてください。Start G-codeやEnd G-codeに使われている命令も説明しています。


Start G-code

改変前のStart G-code

過去記事でデフォルトから書き換えたStart G-codeがこちらになります。黄色のマーカーで塗ってあるところが今回の改変対象です。5行ほどマーキングしてありますが、問題点はふたつです。

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の問題点と改善策

プレート固定用クリップとノズルのニアミス問題

まずはこちらの写真を見てください。
ホーミング開始前のZ軸の位置次第では、ホーミング動作時にノズルがクリップギリギリを通過します。私が持っているMega-sの個体差のせいなのか、すべてのMega-sで同じような状況なのかは分かりませんが、あまりにも近すぎて、当たらないと分かっていても、精神的によろしくないので、移動順番を変更します。

場合によってはこの位置を通過します。動作中は見る角度によっては、ほぼ当たっているようにしか見えません。

ホーミング命令であるG28は、軸名称を省いた単独司令では、X、Y、Zの順番で移動します。したがって、下図”A”の順番に移動しクリップの際を通ってしまいます。そこで、G28を2行に分けることで”B”のような移動順に変更しようと思います。Y軸を先に動かしますので、次のようになります。

G28 Y
G28 X Z

ノズルがホームポジションに移動する時の順序。

印刷領域とイニシャルプリントが重なる問題

イニシャルプリント(GitHubの説明文で使っている言葉)とは、モデル印刷の前に、プレートの端に数十ミリ程度の直線を印刷することです。印刷する目的はビルドプレート密着タイプの一つであるスカートの代わりに、モデル印刷前にノズル内の圧力を高めたり、フィラメントの定着具合を目視確認することです。
今まで、最大サイズで印刷することがなかったので問題にしていませんでしたが、プレートの端と言えども、そこは印刷範囲内ですので、モデルサイズによってはやはり重なってしまいます。
解決策は単純で、印刷範囲外にイニシャルプリントすることです。印刷範囲がデフォルトの210mm×210mmの場合でしたら、プレートの左右及び奥側に、イニシャルプリント可能な領域が存在します。210mm×210mmという印刷範囲(黄枠内)の縛りは、Curaが設けているソフトウェア上の制約でしかありませんので、ノズル自体は220mm×215mmの範囲(緑枠内)を動くことが出来ます。

また、前回、前々回の記事のように印刷範囲を拡大した場合には、プレート左側が唯一のイニシャルプリント領域ですので、どちらにも対応できるようプレート左側にイニシャルプリントすることにします。

改変するのは冒頭の黄色マーカーのコードのうち、G28以外の4行です。変更点は主にイニシャルプリントの始点と終点の座標の書き換えです。Z5は今回の件とはあまり関係はなく、高く上げすぎて無駄な時間が生じていたため低くしました。低くしすぎるとクリップに当たるのでクリップの高さよりは高くしています。


改変後のStart G-code

改変後のStart G-codeがこちらになります。黄色のマーカーで塗ってあるところが今回の改変部分です。本文で説明していない所が二箇所あります。一つは、生成されたGコードを見た時に、Start G-codeが反映されているところがすぐに分かるように、コメント文で挟んでいます。二つ目は、下から3行目のEの値を変更しています。イニシャルプリントの長さを今までのイニシャルプリントより5mmほど長くしたので、その分のフィラメントを余分に押し出しています。

;—– Start of 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 Y ; move Y to min endstops
G28 X Z ; move X/Z to min endstops
G1 Z3 F100 ;lift nozzle 3mm
G92 E0 ;zero the extruded length
G1 F200 E3 ;extrude 3mm of feed stock
G92 E0 ;zero the extruded length again
G1 X-1 Y50 F1500 ;move X-1 Y50
G1 Z0.2 F100 ;move Z0.2
G1 F600 Y130 E15 ;Extrude 15mm of filament in a 80mm line.
G1 F5000 Z0.5 Y140 ;Quickly wipe away from the filament line
;—– End of Start G-code—–


End G-code

改変前のEnd G-code

改変前のEnd 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


End G-codeの問題点と改善策

印刷終了前にノズルの温調が停止する問題

印刷の最終付近で長い直線が数行に渡って続く場合に、印刷が続いているにも関わらず、ノズルの温度設定命令のM104 S0が実行され、ノズルの温度がどんどん下がってしまいます。想像で話しているので、間違っているかもしれませんが、命令を何行か先まで先読みして、実行が許される命令に関しては、読み込んだ時点で実行しているのだと思います。通常の印刷だと短い直線が多く、行数が稼げるので問題になっていないだけのような気がします。ちなみに、この問題に気付いたのは、前回、前々回の記事などで最大サイズの四角形の外壁のみを印刷したときでした。
改善方法として、M104 S0の行をEnd G-codeの最後に移動させました。
ビルドプレートの温度設定(M140)も同様の理由で印刷完了前に温調が停止されますが、こちらは、End G-codeにM140 S0を書いても書かなくても、End G-codeが反映される前の行に生成されるようです。ただ、プレートの温度は、ノズルのように直ぐに下がらないので、今の所無視してます。何か解決策を思いついたら変更する予定です。

Gコードの印刷完了付近。

2021/12/03 追記
バージョン 4.12.0 以降では、M140が生成されなくなっています。従って、End G-code内のどこかに “M140 S0” を書いておく必要があります。

終了時のテーブル位置が想定外問題

2~4行目で、印刷完了後のノズルをZ軸方向に逃がす動作や、フィラメントを引き戻す動作を行っています。この動作は、モデルによって毎回座標が異なりますので、G91で相対指示に切り替えて司令しています。その後のY軸の動作は絶対位置でのY180に指示したつもりでしたが、相対指示のままでした。したがって、実際は、かなりの確率で、移動範囲限界のY215まで移動してました。ということで、G90の絶対座標指示をXY軸移動より前に変更します。また、X軸の移動にG28を使っていましたが、ホーミングさせる意味を感じませんので、XY軸を同時に移動させて少しだけ時間を節約します。

終了音が長くてうざい問題

印刷完了時のお知らせメロディを某コンビニの入店音にしていましたが、毎回長くてうざくなったので、メロディーを変更しました。


改変後のEnd G-code

Start G-codeと同様にコメント文でEnd G-codeを挟み、可読性を良くしています。その他は本文で説明した通りです。

;—– Start of End G-code—–
G91 ; relative positioning
G1 E-2 F300 ; retract a little
G1 Z+1 E-5 ; lift print head
G90 ; absolute positioning
G1 X-1 Y180 F2000 ; Move it so easily removed
M84 ; disable stepper motors
M300 S440 P200 ; Make Print Completed Tones
M300 S440 P400
M300 S494 P200
M300 S440 P200
M300 S381 P200
M300 S440 P400

M104 S0 ; Extruder off
;—– End of End G-code—–

あとがき

変更したStart G-codeやEnd G-codeがうまく機能するかどうかを検証していた時に、SDカードを使って印刷する場合と、USBケーブルで接続し、直接送信して印刷する場合で、振る舞いが違ったことが有りました。具体的には、USB接続の場合に、Gコード最後の数行が実行されないといった症状です。メロディが途中で途切れたり、印刷が完了してもノズルの温度が高いまま維持されていたり、といった具合です。ただ、再現性がなく、うまくいくときとダメなときの差が分かりませんでした。これについては、もう少し検証していきたいと思います。

コメント

スポンサーリンク