Ultimaker Cura / ChangeAtZ のバグ? / 設定通りに変化しない!

3Dプリンター

先日の記事でご紹介した、ChangeAtZというプラグインにおかしい動作を引き起こす、設定がありました。ほとんどの方が遭遇しないと思われますが、原因が分かるまで結構悩みました。もし思い当たる症状がありましたら参考にしてください。

はじめに

この記事は、ChangeAtZの使い方が分かっていることを前提に書いています。もしご存じで無い場合は過去記事で簡単な使い方を書いていますので、以下のリンクからご覧ください。

どう頑張っても指定した温度にならない

新しく買ったフィラメント。一応、推奨印刷温度は205℃らしいのですが、スプールには190から230℃と随分と幅広い温度が表示してありましたので、ChangeAtZで適切な印刷温度を調べることに。10℃刻みの五段モデルを作成し、四回温度変更をするように設定したつもりだったのですが、実際に印刷してみると指定した高さに達してもデフォルトの温度のままなのです。設定を見直しても間違いは見当たらなく、プレビュー画面では温度に関しては全く分からないので、Gコードを見てみることにしました。

設定値と結果

今回設定した値は次のようなものです。
モデルの一段分の高さは7mmです。各段の一層目の高さをトリガーの高さとしましたので、例えば、二段目であれば、7.2mmから二段目の一層目が始まります。Apply To は、”Target Layer + Subsequent Layer” にしていますので、次の変更まですべてのレイヤーが対象です。

四つのChangeAtZの設定値は下表のように、「Change Height」には、各段の最初の層を印刷する高さを、「Extruder1 temp」にはそのときの温度を設定しています。一段目は、プリント設定の印刷温度にて230℃を設定しています。

段数Change HeightExtruder1 temp
二段目7.2220
三段目14.2210
四段目21.2200
五段目28.2190

この条件でスライスしたGコードの二段目(7.2mm)あたりが下図です。左側の数字は、テキストエディタが表示している行番号ですので、Gコードに書かれているものではありません。
レイヤー高さは0.2mmで印刷しています。したがって、7.2mmは36層目となりますが、CuraがスライスしたGコードでは、1層目をLAYER:0と表記していますので、36層目はLAYER:35となります。
9890行で36層目が始まり、9895行でZの値が7.2となっていますので、このあたりで、印刷温度変更の命令(M104)があるはずなのですが、見当たりません。

で、前後を探していると、35層目の途中に、M104の命令がありました。下図の9761行目です。場所はおかしいですが、ちゃんと220℃に変更しています。ChangeAtZが変更を加えた部分は、”;[CAZD:” と “;:CAZD]” で挟まれていて、その下にはZ7.2の指令があります。このことから、ChangeAtZのスクリプトの仕様上「Change Height」で指定された数字が初めて現れた直前に「Extruder1 temp」による変更が加えられると推測できます。また、9769行と9771行から分かるように「Change Height」で指定された高さより低い値が現れると、デフォルトの印刷温度に戻す仕様でもあるようです。(スクリプトを確認したわけではありません。推測です。)

原因

問題は、「35層目は高さ7mmなのに、何故 “7.2” の数字が出てくるのか?」ということになりそうですが、思い当たる節があります。プリント設定の「移動」カテゴリにある、[Zホップ高さ] の値を “0.2” にしていました。Gコードをみて初めて、これが原因か、と気づきました。
[Zホップ高さ] はノズル移動時に、ノズルと既に印刷している部分の干渉(衝突)を防ぐため僅かにノズルを上昇させる、上昇量なのですが、私の場合、デフォルトより少し大きめに設定することがあり、この時、偶然 “0.2” と言う数字にしていました。

結局、原因は、「35層目のZ7.2は、干渉防止のためのZホップだったけど、「Change Height」の値と “同じ”(後で変更あり)だったので、ChangeAtZのスクリプトが誤動作をしてしまった。」ということです。
他の段でも同様なことが起きていたようです。下図は三段目への変更のようすで、高さ14mmの層で誤作動を起こしています。4段目、5段目も同様でした。

対処法

対処法は二つ。一つは[Zホップ高さ]の値を変更すること、もう一つは、ChangeAtZの Trigger を “Layer No.” にすることです。

[Zホップ高さ] の変更

Zホップしたときの高さが、「Change Height」の高さと “同じ” にならないように値を変更すること、と単純に思っていたのですが、もしかしてと思って試してみると、Zホップしたときの高さが、「Change Height」の高さより大きい場合も反応するようです。下図は[Zホップ高さ]を0.25mmにしてあります。

結果、[Zホップ高さ] は、[レイヤー高さ] 未満の数値を設定しないとアウトということになりそうです。
こんな制限は忘れてしまう可能性が高いので、次のLayer No.で設定する方が良いかもしれません。

Trigger の変更

高さをレイヤーの数で指定する方法ですので、[Zホップ高さ]なんてものも関係なくなります。 Trigger を “Layer No.” にして、変更するレイヤー数を設定します。

ここで注意しなくちゃいけないのが、先にも書きました通り、プレビュー画面でのレイヤー数とGコード上のレイヤー数がずれていることです。プレビュー画面では初期層がレイヤー1ですが、Gコード上ではレイヤー0です。ChangeAtZのスクリプトは、Gコードのレイヤー数を見ますので、Gコード上でのレイヤー数で設定する必要があります。

正常動作でのスライス結果がこちら。ちゃんと;LAYER:35直後で印刷温度が変更されました。ちなみに [Zホップ高さ] は、0.25mm です。

あとがき

分かってみると単純な事なのですが、原因が分かるまでに結構時間がかかりました。おそらく誰もやらないと思われる設定の組み合わせですので、参考になる方はいないんじゃ無いかと思いますが、Pause at heightなども、高さをトリガーにしたスクリプトですので、もしかすると、今回の経験が生きてくるかもしれません。知ってても損はしないですよね。
ちなみに、ChangeAtZやPause at heightなどのスクリプトは、
C:\Program Files\Ultimaker Cura 4.13.0\plugins\PostProcessingPlugin\scripts
に置いてありますので、読める人は、暇なときに眺めてみると何か発見があるかもです。

コメント

スポンサーリンク