Ultimaker Cura / Mega-s で確実に【Pause at height】を実行するには

3Dプリンター

先日、投稿した「印刷途中で磁石を埋め込む」の記事の中に事実と異なる内容が含まれていました。実際に実行された方がいらっしゃいましたら、思うように一時停止が出来なくて戸惑ってしまったと思います。大変申し訳ありませんでした。今回は【Pause at height】の設定および、使い方の訂正版です。慌てず確実に一時停止させる方法を解説していきます。

記事の前提

この記事では、次の環境での検証を元に執筆しています。例えば、同じMega-sでもファームウェアのバージョン違いなどで異なる動作となる可能性が無いわけでは無いと思います。実際に印刷される場合は十分に動作確認をお願いします。

  • スライサー:Ultimaker Cura バージョン 4.13.0
  • 3Dプリンター:Anycubic i3 Mega-s ファームウェアバージョン 1.1.5
  • 印刷方法:SDカード経由での印刷

また、当記事において、Gコードについて触れている部分があります。命令一つ一つの意味についての詳細は以下のサイトを参考にしてください。

何が間違っていたのか

当該記事の「印刷時の操作」において、Mega-sのタッチパネル上の [PAUSE] をタップするタイミングでポーズがかかる場所が変わってくるといった内容がありますが、これが間違いでした。実際の記事は次のようなものです。

60層目印刷後に回避動作が入り一旦停止します。ここで、[PAUSE] をタップして動作を止めるのですが、タップし忘れてしまうと、7、8秒後(正確に計っていません)に印刷が再開されます。すなわち、この短い時間を逃すこと無くタップする必要があります。また、困ったことに、タップ後、次のような表示が出て、かなりのタイムラグがありますので、7,8秒の前半以降でタップをすると、印刷再開のための復帰動作が始まり、印刷開始位置への移動中にポーズがかかってしまいます。もっとタップが遅いと印刷再開後にポーズがかかります。というわけで、とにかく早いタイミングでのタップが必要です。なお、ポーズがかかると現在位置から更に20mmノズルが上昇します。

ポーズがかかるタイミングは、[PAUSE] をタップしたタイミングではなく、タップした時点でのバッファにある命令が関連しているみたいです。詳しくは後述します。
また、この記事部分には明記していませんが、M226という命令が回避動作後の一時停止命令のような雰囲気が記事全体から伝わっていましたが、これも間違いで、M226は一時停止とは全く関係なく、7、8秒後に再開するのも他の命令が原因でした。こちらも後述します。

続いて、間違いの確認、原因、改善策の検討について書いていきますので、経緯が気になる方は次章からの「事実の確認」および「確実な停止に向けて」 をお読みください。面倒な話は抜きにして、【Pause at height】の確実な動作の設定方法のみが知りたい方は、「確実な一時停止の設定と操作」へ飛んでください。

事実の確認

問題の順番が前後しますが、まずは「M226は動作に関係ない」の話から確認していきます。
「Pause at height」の設定ダイアログでMethodを選択することで、一時停止のために用いる命令を決定することができ、Mega-sの場合、”RepRap(M226)” が最適としていました。

磁石を埋め込んだモデル製作時の設定:M226を選択

“RepRap(M226)” を選択すること自体は間違っていませんでしたが、M226という命令で一時停止していたわけではなかったようです。以下の命令はM226前後に追加されたものですが、一時停止の原因は、M226直後のM109 S200でした。
M109はノズルの温度を設定温度(この場合200℃)にする命令で、その温度に達したことを確認できるまで次に進みません。7、8秒の一時停止があったのはこの確認のためのタイムラグのようです。

磁石を埋め込んだモデル製作時のGコード

そう結論づけた理由は、動作確認用モデルを実際に印刷してみた結果、M109の命令をコメントアウトして実行した場合に、ノズルの回避位置への動作後、直ぐに印刷開始位置に戻って印刷を開始したためです。よって、M226はMega-s にとって動作に影響の無い命令と判断しました。

動作確認用モデルのGコード:M109をコメントアウトすると一時停止無し。

続いて、ポーズのタイミングについて検証します。
問題になっているのは、ポーズの動作に入るタイミングが、一時停止している回避位置ではなく、印刷再開のための移動の途中になってしまうことです。
ネット上で情報を求めてうろついていると、「実際にポーズがかかるのは、バッファに含まれる実行可能な命令がすべて実行された後である」という一文に出会いました。また、次のような事も判明しました。「命令は印刷実行時に次々先読みされていること」と、「先読みされた命令はバッファに一時的にたまって、動作順を待つこと」です。ただし、命令には、順番が来るまで、律儀にバッファに残る命令と、読み込まれた時点で実行されバッファに残らない命令があることも分かりました。例えば、ノズルの移動命令は先読みされても実行の順番が来るまでは動作しませんが、音を鳴らす命令は、読み込んだ時点で(Gコード上の順番より早く)鳴り始めます。そしてもう一つ、いくつかのある種の命令では、その命令の後ろに命令を書くことによって、音を鳴らす命令のような順番を守らない命令でさえもバッファにとどまるようになることも分かりました。このあたりを検証してみました。

では、まず、「どこまで、先読みされ、バッファにたまるのか」をみてみます。
次からの説明は、動作確認用モデルを実際にポーズをかけて印刷してみた様子です。「Pause at height」の設定状況は次の通りで、3層目終了時点でポーズをかけます。

下図のGコードにおいて、”PAUSE”をタップしたのが、M109の命令で停止していた時だったと仮定します。先述したように、実際にポーズがかかるのは、バッファ内の実行可能な命令が実行された後です。そして今回、ポーズの動作に入ったのが、印刷開始位置に移動したあたり(G1 F9000 X112.・・・)でしたので、少なくとも二行分はバッファにたまっていたと推測できます。その後のZ軸の移動(実際の動作はありません)や、リトラクト動作(E6)もしくはその次の G1 F1500 も実行しているかもしれませんので、多くて5行分ほどがバッファに入っている可能性があります。

そこで、音を鳴らす命令 “M300” を五行追加してみました。どの音まで鳴るかを確認することでバッファにたまる行数を把握しようという魂胆です。先読みするのが、容量単位ではなく、行単位であることが前提の実験です。追加の操作はCuraで保存したGコードファイルをテキストエディタで開いて直接編集しました。この時追加する位置はM109の後となります。M109は順番を守らない命令をバッファにとどまらせる命令の一つのようですので、M109(”PAUSE”をタップしたタイミング)と一緒にバッファに入っているところまでしか演奏されません。

ドからソまでの音を鳴らして、バッファにたまる行数を把握

結果、ミの音まで鳴ったところでポーズがかかりましたので、三行分がバッファされているのだろうと推測できます。ちなみに、[CONTINUE] をタップしたときには、ファが鳴るところから再開しました。

これらの結果を踏まえて、確実に回避位置でポーズがかかる方法を模索したいと思います。

確実な停止に向けて

改善すべき点は二つ。一時停止している時間の不確実さ、そして、ポーズがかかるタイミングの不確実さです。

まずは、一時停止している時間の不確実さから検討します。
「Pause at height」の設定の中に、”G-code Before Pause” という項目があります。M226の直前に実行したいGコードを挿入できる機能です。印刷途中で磁石を入れる記事では、もうすぐ止まるよ、という合図の意味で音を鳴らす命令を入れていました。

この “G-code Before Pause” に、一定時間停止する命令を入れると [PAUSE] をタップするまでの時間を確実にコントロールできます。使う命令は、”G4″ です。同行のSの後に秒数を指定すると停止する時間が設定できますので、”G4 S10″ と入力すれば問答無用で10秒間停止してくれます。この間に [PAUSE] をタップすれば問題なしです。 これで「一時停止している時間の不確実さ」は解決です。

さて、次はポーズがかかるタイミングの不確実さです。
直ぐに思いつくのが、そう、”G-code After Pause” です。M226の直後に実行したいGコードを挿入できる機能です。ここに、何かしらの命令を入力してやれば、バッファをコントロールできそうです。先ほどの実験で、[PAUSE]をタップしてから、少なくとも三行分必要なのは分かっています。”G-code Before Pause” に入力した、”G4 S10″ の時点でタップしますので、回避位置からノズルが動く前にポーズをかけるためには、M226の直後に一行分の命令があれば良いことになります。

また、G4の命令は、M109等と同じように、実行順を守らないM300のような命令をバッファに残すので、M226直後の命令は、動作上差し障りのない命令でしたら何を入れても良いようです。M300でポーズに入るお知らせを鳴らしても、G4で一定時間止めても、M226で何もしないという選択も出来ます。ここでは、”G4 S1″ で一時停止を追加します。

改善案が出揃いましたので、次章で設定と操作をまとめてみます。

確実な一時停止の設定と操作

改めて、Mega-s で「Pause at height」を使うときの設定と一連の流れを記しておきたいと思います。

設定

まずは、設定内容から。

[Pause at]
一時停止させる高さをレイヤー数で指定しますので、”Layer Number” を選択します。

[Pause Layer]
一時停止するレイヤー数を入力します。ここで設定したレイヤーのすべての印刷が完了した時点で、回避位置へ移動します。前もってスライスしてレイヤー数を確認しておく必要があります。

[Method]
どの命令を一時停止に使うかの選択です。”RepRap(M226)” を選択します。

[Disarm timeout]
一時停止の時間を設定しますが、Mega-s では無効です。”0″ 以外の数字を入力すると、M18 S__の命令が追加されます。実害はないですが、必要もないので “0” のままで。

[Park Print]
一時停止時後の作業をしやすくするために、任意の場所にノズルを待避させたい場合はチェックを入れます。

[Park Print Head X]
ノズル待避位置のX軸座標をいれます。

[Park Print Head Y]
ノズル待避位置のY軸座標をいれます。

[Retraction]
一時停止時のフィラメントの引き戻し量を設定します。プリント設定のデフォルトと同じで良いと思います。作業時にフィラメントが垂れてくるようでしたら、増やします。

[Retraction Speed]
引き戻し時の速度です。デフォルトで良いと思います。

[Extrude Amount]
フィラメントを交換したときなどに色が混ざるのを防ぐためにフィラメントをある程度排出する場合の排出量を設定します。

[Extrude Speed]
フィラメント排出時の速度です。

[Redo Layer]
チェックを入れると、一時停止したときのレイヤーをもう一度印刷します。

[Standby Temperature]
一時停止中のノズルの温度を設定します。

[Display Text]
3Dプリンターのディスプレイに表示する文字を入力します。対応するプリンターが必要です。

[G-code Before Pause]
M226の直前に命令を追加します。”G4 S10″ を入力して、一定時間動きを止めます。LCDの[PAUSE]をタップするために必要な時間を設定しておきます。Sの後の数字が停止している秒数です。

[G-code After Pause]
M226の直後に命令を追加します。”G4 S1″ を入力します。単にバッファをコントロールするための命令ですので、動作に影響のない命令でしたら何でもOKです。

操作

続いて、実際の操作手順です。おおよその流れは次のようになります。

  1. 通常通り印刷開始
  2. [Pause Layer] に設定したレイヤーの印刷が完了
  3. [Park Print Head X]および、[Park Print Head Y] の位置へ回避
  4. [G-code Before Pause] に設定した秒数だけ動きが止まるので、[PAUSE] をタップする
  5. 必要な作業を行う
  6. [CONTINUE] をタップしてポーズを解除する
  7. [Pause Layer] に設定したレイヤーの次のレイヤーから印刷再開

手作業で介入するのは、4.から6.です。では、もう少し詳しく見ていきます。

2.でそのレイヤーの印刷が終了した時点で、3.による回避動作が開始されます。具体的には、まず、Z軸が2.のレイヤーから1mm上昇します。ただし、その高さがビルドプレートから15mm以内でしたら、15mmまで上昇します。その後XY方向の回避が行われます。

所定の回避位置に達したら、[PAUSE] をタップする。

ここで、[PAUSE] をタップしますが、タイムリミットは [G-code Before Pause] に入力した”S”で指定された秒数です。タップすると直ぐにポーズの動作に取りかかるのではなく、次のようなメッセージが表示されますので、しばらく待ちます。待つ時間は、”S” の残りの秒数です。

所定の回避位置に達したら、[PAUSE] をタップする。

LCDの表示が消えてもまだポーズにはなりません。実際にポーズの動作に入るのは、この時点でバッファに入っている命令がすべて実行された後ですので、数秒かかります。
ポーズの動作に入ると、先ほどの1mm(もしくは15mm)上昇した点から更に20mm上昇します。そして、LCDの [PAUSE] ボタンが [CONTINUE] に変わります。

後は、 [CONTINUE] をタップしない限り再開することはありませんので、所望の作業を行います。
作業が完了しましたら、[CONTINUE] をタップして印刷を再開させます。

以上が、「Pause at height」での操作手順です。
もし、タイミングを逃して [PAUSE] をタップ出来なかった場合には、G4などで設定した時間が経過した後で何事もなかったかのように印刷が再開します。

Methodの他の選択肢はダメなのか?

これまでの結果から、”M226″ という命令に意味は無いですので、Methodにある他の命令を選択した場合でも、動作するものがあるんじゃないの?との疑問があると思います。で、答えはYesです。Methodの五つの選択肢の内、一番最後の「Repetier/OctoPrint (@pause)」は動作します。命令としては、”@pause ・・・・” が追加されますが、これもMega-s にとっては意味のない無視される命令のようです。ただ、一時停止時のノズル温度が設定できないなどの差があります。
その他の三つの選択肢に関しては、停止の命令として、”M0″ または “M25″ が使われています。これらは意味ある命令として実行されます。”M0″ はすべての動作が止まってしまい、LCDのどのボタンも反応しなくなります。よって、使えません。”M25” は自動でポーズの動作をしているようなのですが、その後、再開させる手立てを失います。したがって、これもダメです。(方法があるのかもしれませんが、見つけられていません)
というわけで、”M226″ が一番妥当だと思います。

あとがき

「印刷途中で磁石を埋め込む」記事の訂正ということで書いてみました。前回記事に騙されて歯がゆい思いをされた方には、改めてお詫び申し上げます。今回は大丈夫と思うのですが、環境違いで何か不具合があるかもしれませんので、くれぐれもご注意ください。
話変わって、先日、この「Pause at height」を使って、ものを埋め込む、フィラメントを変える、以外の作業をしてみたところ、なかなかの結果を得たので、近いうちに記事にしたいと思っています。
では、今回はこのへんで。

コメント

スポンサーリンク