デフォルトでプライベートIPアドレスを許可するようなLAN内向けのアプリケーションがあったりする。つまり192.168.0.13 とかでアクセスする分には特に設定せず問題なく繋がるというもの。

IP アドレスを調べる手間をはぶくため、mDNS 対応していて、voron2.local というホスト名でアクセスできるようになっているとする。この場合、このホスト名でアクセスするときだけうまくアプリケーションが動かないという挙動をすることがある。

mDNS で voron2.local などとアクセスした場合、解決されるアドレスは環境によって IPv4 だったり IPv6 だったりになる。IPv4 で解決されるなら 192.168.0.13 などでアクセスしたことと同じで、問題ない。

問題は IPv6 かつ、しっかりグローバルIPアドレスを持っている場合で、アプリケーションはグローバルIPアドレスからのアクセスをデフォルトで許可するわけにはいかないので拒否される。

この件でやっかいなのは、アプリケーション自体はデュアルスタックで IPv6 対応しているが、IPアドレスベースのアクセス制限をかけているというところで、アクセス制限をかけてない部分には問題なくアクセスできる。

これは localhost と書くと IPv6 対応したときに死ぬことがあると同種の問題といえる。ホスト名はデュアルスタック環境だとどちらに解決されるか環境依存なので、IPv6 環境になり、特に今回の場合はグローバルアドレスが付与されているという条件付きでうまく動作しない環境ができあがる。

正攻法

IPv6 の Link local アドレスならデフォルトで許可しやすいので、mDNS でこのアドレスをひければ一番良いが、avahi でそのような設定を行うことは不可能なようだ (mDNS の仕様的にできないっぽい?)。

または自分と同じ IPv6 prefix を持つなら許可するみたいな動的なアクセス制御を行うようにすればいいがこれは実装が必要になる。

あるいは明示的に現在持っている IPv6 prefix を許可するようにする。が prefix がいつ変化するかよくわからないのでやりたくない。

IPv6 を無効にする

あまりやりたくはないが mDNS 時に利便性が悪 すぎるので、今回は該当機の IPv6 を無効にすることにした。

以下を /etc/sysctl.conf に書く。

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

これで aaaa が解決できなくなる。

dig aaaa voron2.local
  1. トップ
  2. tech
  3. mDNS と IPv6 とアクセス制限

プリント中に一部のオブジェクトだけ反って浮いてきてしまった場合やベッドから外れてしまった場合などに、該当するオブジェクトだけスキップして他のを完成させることができる。

スライサ・ユーザインターフェイス・G-code 実行器でそれぞれやることがあり、協調しないと実現しないので、なかなか難しい機能といえる。

Mainsail のドキュメント https://docs.mainsail.xyz/features/exclude_objects に従えばほぼ良いが、事前処理についてはスライサで完結させたほうが良い。

スライサの設定

スライサ側の設定「オブジェクトに名前をつける」をオンにし、G-code の生成後に preprocess_cancellationを通すようにする。

preprocess_cancellation 自体は moonraker (mainsail のバックエンド) へ enable_object_processing を設定することでも同様のことができるが、この設定はかなり重いようなので手元で処理してしまったほうが良さそう。G-code からオブジェクトの領域を算出しているようで、ちゃんとした CPU の手元でやってももそこそこ遅い。

どうなるか

キャンセルボタンが拡張され、一部のオブジェクトだけキャンセルできるようなUIが追加される。

  1. トップ
  2. tech
  3. 3Dプリンタの Object Cancellation (Klipper + Mainsail)

原則として、オーバーヒートしない限りできるだけたくさん電流を流すほうが安定する (トルクが高い)。

手元の Voron 2.4 の ABZ のモーターは Ralted Current 2A となっている。

RMS電流の最大は 0.707 をかけて 1.414A、ただし TMC2209 の最大電流が1.2Aなのでそっちで最大がきまる。

デフォルトは0.8Aになっていた。Zモーターは外に出ていて4つで重量を分けあってるが、A/B モーターは庫内でかなり加熱するのでちょっとこわい。

TMC2209 のリミットにあてるのも恐いので、とりあえず 1.0A にすることにした。→ 長時間やったあとサーモカメラでA/Bモーターの温度を見たところ60℃いかないぐらいだったので 1.1A に増やした。→音がやたらうるさくなったと感じたので1.0Aに戻した

ステッピングモータの熱

スペック上130℃の絶縁階級(B種)となっている。これは絶対最大定格にあたるので内部がこれを超えることがあってはいけない。

だいたい目安としてはケースで100℃ぐらいまで。触れないレベルで熱いのは危険。

ref. https://docs.vorondesign.com/community/howto/120decibell/calculating_driver_current.html

  1. トップ
  2. tech
  3. 3Dプリンタのステッピングモーターの電流 (run_current)