メインコンテンツにスキップ

CAN エラーのトラブルシューティング

このドキュメントでは、CANネットワークの一般的なエラー、通信異常のトラブルシューティング、およびCAN IDが見つからない場合の手順について説明します。

適用シーン:

  • KlipperでCAN0、CAN UUID、またはCANネットワーク関連のエラーが発生した場合。
  • CANデバイスが断続的にオフラインになる、または検出されない場合。
  • bytes_invalid、Timer too closeなどの問題を調査する必要がある場合。

CAN0の設定、CAN IDの検索、配線や終端抵抗のルールについては、まずCANネットワーク設定とID検索を参照してください。

一般的なエラーの判断

エラー一般的な原因対処方法
OSError: [Errno 19] No such deviceホストPCがCANデバイスを見つけられないUTOC、USBケーブル、CANブリッジファームウェア、電源を確認
can.CanError: Failed to transmit: [Errno 100] Network is downCAN0が起動していない、または設定が間違っているCAN0を再設定して再起動
can.CanError: Failed to transmit: [Errno 105] No buffer space availableCANキャッシュ不足、またはシステムネットワークキュー異常キャッシュを1024に確認し、必要に応じてCAN0を再設定
mcu 'xxx': Invalid CAN uuidCAN UUIDの記入ミス、またはデバイスがオンラインではないUUIDを再検索し、線順、電源、終端抵抗を確認
Serial connection closedKlipperが設定を見つけたが接続が切断されたCANネットワーク品質、線順、終端抵抗、ファームウェアレートを確認

その他のKlipperエラーについては、一般的なエラーメッセージを参照してください。

CAN通信エラーのトラブルシューティング

電磁干渉は一般的な原因です

CANバス通信異常の大きな原因の一つは電磁干渉(EMI)です。3Dプリンター内部のステッピングモーターケーブル、ヒーターケーブル、ヒートベッドケーブルは大電流動作時に強力な電磁界を発生します。CAN通信線(CANH/CANL)がこれらの強電線と近距離で平行配線されている場合、干渉信号がCANバスに結合され、以下を引き起こす可能性があります:

  • 通信タイムアウト、MCUの断続的な切断
  • CANデバイスのランダムなオフライン、canbus_query.pyによるスキャン不可
  • ホーミング中のTimer too closeまたはCommunication timeoutのトリガー
  • 印刷中の突然のシャットダウン。ログに明確なハードウェアエラーなし

干渉調査時は、まずCAN線と強電線の配線レイアウト、シールド層の接地、終端抵抗の完全性を確認してください。

CAN bytes_invalid カウンターが増加し続ける

エラーメッセージklippy.logの毎秒統計行Statsbytes_invalidが非ゼロで表示され、増加し続ける。

エラーの原因:CANバスメッセージが再順序付け(reordered messages)されている。これは深刻な問題であり、印刷中のどの段階でも不安定さやランダムなエラーを引き起こす可能性があります。

既知の原因:

  • Linuxカーネルバージョンがv6.6.0未満の場合、gs_usb CANドライバーに再順序付けのバグが存在する。
  • candlelightファームウェアを使用するUSB-CANアダプターで、ファームウェアバージョンがv2.0未満の場合。
  • Klipper USB-to-CANブリッジモードのノードファームウェアがv0.12.0未満の場合。

解決方法

  1. Linuxカーネルをv6.6.0以降にアップグレードする。
  2. candlelight USB-CANアダプターを使用している場合、ファームウェアをv2.0以降にアップグレードする。
  3. Klipper USB-to-CANブリッジモードを使用している場合、ブリッジノードに**Klipper v0.12.0+**ファームウェアをフラッシュしていることを確認する。
  4. それでもbytes_invalidが増加する場合、根本原因が解決されていないため、カーネルバージョンとファームウェアバージョンの調査を続ける必要がある。
  5. 注意bytes_invalidの増加は、配線や終端抵抗などのハードウェア問題によって引き起こされるものではありません。ソフトウェア/ファームウェアの更新によってのみ修正できます。

CANバスキューの不足によるTimer too close

エラーメッセージ:CANバス通信時にMCU 'xxx' shutdown: Timer too closeが発生する。

エラーの原因:LinuxカーネルがCANネットワークインターフェースに設定するデフォルトのキュー長(qlen)は通常10であり、Klipperの高頻度・低遅延通信のニーズには不足しています。Klipper公式サンプルではtxqueuelen 128がよく使われます。FlyOS-FASTではデフォルトで1024に設定されており、ノード数が多い場合や高負荷シナリオで余裕があります。

解決方法

  1. 現在のCANインターフェースのキュー長を確認する:
ip link show can0 | grep qlen
  1. キュー長を一時的に増加させる。通常のシステムではまず128を試し、FLYシステムやマルチノードマシンでは1024を使用できます:
sudo ip link set dev can0 qlen 128
# または
sudo ip link set dev can0 qlen 1024
  1. 永続的に設定する:/etc/network/interfaces.d/can0txqueuelen 128またはtxqueuelen 1024パラメータを追加します。systemd-networkdを使用している場合は、.linkファイルにTxQueueLength=を設定します。

CANバスノードが応答しない

エラーメッセージ:CANデバイスが突然オフラインになり、canbus_query.pyでデバイスをスキャンできない。

一般的な原因

  • CAN終端抵抗の欠落または不正(CANH-CANL間には必ず2つの120Ω抵抗が必要)。
  • CANH/CANL配線の緩み、圧着不良、またはコネクタの緩み。
  • CANケーブルがツイストペアシールドケーブルではない、または強電線と平行配線されていることによる電磁干渉(最も一般的で見つけにくい原因)。
  • USB-CANアダプターの電源異常。

干渉調査のポイント

電磁干渉によるCAN通信異常は、「断続的」かつ「ランダム」に現れることが多いです。つまり、正常な時もあれば突然切断され、電源再投入で復旧することもあります。調査時は以下に注目してください:

  • 配線レイアウト:CAN通信線がモーターケーブル、ヒーターケーブル、ヒートベッドケーブルとケーブルキャリア内で並走していませんか?高速PWM変調されたモータードライバー信号とヒーターのスイッチングノイズは、最も強力な干渉源です。
  • シールド層の接地:シールドケーブルを使用する場合、シールド層は片端接地(ホスト側のみ)ですか?両端接地はグラウンドループを形成し、かえって干渉を引き起こします。
  • 終端抵抗の位置:終端抵抗はCANバスの物理的な末端に取り付けられ、ボード上のジャンパーピン、ディップスイッチ、または既製の終端インターフェースを介して有効になっていますか?
  • CANケーブル仕様ツイストペアケーブル(ツイストピッチが数センチメートル以内)を使用していますか?パラレルケーブル(ツイストペアではない)はコモンモード干渉をほとんど抑制できません。
  • 接地の完全性:マシンの電源、筐体は確実に接地されていますか?接地されていないマシンの金属フレームは大型アンテナのように機能し、環境ノイズを拾いやすくなります。

調査方法

電源オフ操作

以下のハードウェア調査は、プリンターの電源を完全に切り、電源をコンセントから抜いた状態で行ってください:CANH/CANLの確認、配線のやり直し、シールド層の調整、終端抵抗の有効化/無効化、CANH-CANL間の抵抗測定。

  1. CANバス上に2つの120Ω終端抵抗がちょうど存在することを確認します。ボード上のジャンパーピン、ディップスイッチ、または既製の終端インターフェースを優先して使用します。
  2. CANH/CANLの配線が確実に固定されているか、コネクタが完全に挿入されているかを確認します。
  3. 電源を切ってから操作してください。マルチメータを使用してCANH-CANL間の抵抗を測定します(正常値は約60Ω)。
  4. 配線をやり直す:CAN通信線を強電線から分離し、少なくとも2~3cmの距離を保ち、平行にならないようにします。
  5. シールド接地の確認:シールド線はホスト側のみで接地し、ツールボード側は浮かせて接続しないでください。電源を分解したり、商用電源のアース線を変更したりしないでください。
  6. candumpを使用してCANバストラフィックを監視し、多数のエラーフレーム(error frames)が表示されるかどうかを確認します。
  7. 印刷速度/加速度を一時的に下げてテストします。問題が解消される場合、干渉がモータードライブ強度に正の相関関係があることを示しています。

IDが見つからない場合の調査手順

  1. ip -details link show can0を実行し、CAN0が存在し利用可能な状態であることを確認します。
  2. ツールボード、メインボードのファームウェアCANレートがホストPCのCAN0レートと一致していることを確認します。
  3. デバイスIDがprinter.cfgに既に書き込まれている場合、一時的に対応する設定をコメントアウトし、シャットダウンして約10秒後に電源を再投入して検索します。
  4. CAN-HとCAN-Lの接続が逆ではないか、断線や接触不良がないか確認します。
  5. CANネットワークの両端にそれぞれ120Ωの終端抵抗があることを確認します。マシンの電源を完全に切った状態で、CAN-HとCAN-L間の抵抗値を測定し、約60Ωであることを確認します。
  6. ツールボードまたはメインボードに正常に電源が供給されていることを確認します。
  7. ファームウェアコンパイル時に正しい通信方式が選択されていることを確認します。
  8. 検索結果にApplication: CANBOOTまたはApplication: Katapultと表示される場合、先にKlipperファームウェアをフラッシュしてから再度検索します。

終端抵抗のルール

電源オフ操作

終端抵抗のジャンパーピン、ディップスイッチの調整、またはCANケーブルの抜き差しを行う前に、プリンターの電源を完全に切り、電源をコンセントから抜いてください。

デバイスタイプ終端抵抗の要件操作説明
CANツールボード120Ω終端抵抗が必要ボード上のジャンパーピンまたはディップスイッチで有効化
メインボードCANインターフェース120Ω終端抵抗が必要ボード上のジャンパーピンまたはディップスイッチで有効化
UTOCタイプ変換モジュール通常は120Ω抵抗が内蔵済み追加の終端抵抗は不要

クイック調査手順

  1. まずデバイスを確認:lsusbを実行し、1d50:606fが表示されることを確認します。
  2. 次に設定を確認:ip -details link show can0を実行し、CAN0が存在し、レートが正しく、キャッシュが1024であることを確認します。
  3. 最後にハードウェアを確認:完全に電源を切った状態でCAN-HとCAN-L間の抵抗を測定し、約60Ωであることを確認します。

これらをすべて確認しても異常が続く場合は、USBケーブル、CANケーブル、UTOC、またはCANブリッジデバイスを交換してクロステストを試みてください。

CANデバイスファームウェア更新リファレンス

このセクションは、すでにCANネットワークに接続できており、CAN経由でメインボードまたはツールボードのファームウェアを更新する必要があるシナリオ向けです。製品ごとにファームウェア名やコンパイル方法が異なりますので、まず対応する製品のチュートリアルに従ってファームウェアをコンパイルしてください。

準備

  1. 製品のチュートリアルに従って新しいファームウェアをコンパイルします。
  2. デバイスのCAN UUIDが検索可能であること、またはprinter.cfgにそのデバイスのcanbus_uuid:が記入されていることを確認します。
  3. Klipperサービスを停止します:
sudo systemctl stop klipper

更新の実行

以下のコマンドの<CAN_UUID>を実際のデバイスIDに置き換えてください。

バージョン説明

システムバージョンに応じて対応するコマンドを選択してください。

  • FlyOS-FAST 1.3.8以降、または2026年4月9日以降にKlipperを更新したシステム
python3 ~/klipper/lib/katapult/flashtool.py -u <CAN_UUID>
  • 旧バージョンのシステム、つまりFlyOS-FAST 1.3.8より前、または2026年4月9日より前にKlipperを更新していないシステム:
python3 ~/klipper/lib/canboot/flash_can.py -u <CAN_UUID>
注意

-uの後には必ずスペースを入れ、その後ろにCAN UUIDを記入してください。

CAN Flash Success というメッセージが表示されれば、通常は書き込み成功です。

Loading...

更新後の操作

更新が完了したら、Klipperを再起動します:

sudo systemctl start klipper

更新後に接続できない場合は、CAN IDを再検索し、printer.cfgcanbus_uuid:が正しいかどうかを確認してください。

最終確認リスト

CAN IDが見つからない、またはKlipperがCANデバイスに接続できない場合は、以下の手順を順に確認してください:

  1. can0がシステムに認識されている。
  2. bitrateがファームウェアコンパイル時に設定したCANレートと一致している。
  3. qlenまたはtxqueuelen1024である。
  4. CAN-HとCAN-Lが逆に接続されていない。
  5. CANバス両端の終端抵抗が正しい。
  6. ツールボードまたはメインボードへの電源供給が正常である。
  7. ファームウェアの通信方式が正しく選択されている。
  8. printer.cfgで実際に検索されたcanbus_uuid:を使用している。
  9. 同じ[mcu]内でserial:canbus_uuid:の両方が有効になっていない。
Loading...