Перейти к основному содержанию

Устранение ошибок CAN

Эта статья предназначена для устранения распространенных ошибок сети CAN, аномалий связи и процедур поиска в случае, когда CAN ID не найден.

Применимые сценарии:

  • В Klipper возникают ошибки, связанные с CAN0, CAN UUID или сетью CAN.
  • CAN-устройства периодически отключаются или не обнаруживаются.
  • Требуется устранить проблемы с bytes_invalid в CAN, Timer too close и т.д.

Если требуется настроить CAN0, найти CAN ID или узнать правила подключения и оконечных резисторов, сначала обратитесь к Конфигурация сети CAN и поиск ID.

Определение распространенных ошибок

ОшибкаРаспространенная причинаРешение
OSError: [Errno 19] No such deviceХост-компьютер не находит 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 availableНедостаточно буфера CAN или аномалия системной сетевой очередиУбедитесь, что буфер равен 1024, при необходимости перенастройте CAN0
mcu 'xxx': Invalid CAN uuidCAN UUID заполнен неправильно или устройство не в сетиПовторно найдите UUID, проверьте порядок проводов, питание и оконечные резисторы
Serial connection closedKlipper нашел конфигурацию, но соединение прервалосьПроверьте качество сети CAN, порядок проводов, оконечные резисторы и скорость прошивки
Duplicate canbus_uuidНесколько MCU используют один и тот же CAN UUIDПовторно найдите UUID, убедитесь, что каждый [mcu xxx] уникален
Unknown canbus_uuid xxxCAN UUID из конфигурации отсутствует в результатах поиска текущей сетиЗакомментируйте соответствующую конфигурацию MCU, затем повторно найдите и заполните UUID
Can not update MCU 'xxx' config as it is shutdownCAN MCU сначала перешел в shutdown, последующее обновление конфигурации не удалосьПрокрутите klippy.log вверх, чтобы найти первую причину отключения или shutdown

Дополнительные ошибки Klipper см. Распространенные сообщения об ошибках.

Устранение неисправностей связи CAN

Электромагнитные помехи являются распространенной причиной

Значительная часть аномалий связи по шине CAN вызвана электромагнитными помехами (EMI). Провода шаговых двигателей, нагревателей и стола внутри 3D-принтера при работе с большим током создают сильные электромагнитные поля. Если провода связи CAN (CANH/CANL) проложены близко и параллельно этим силовым проводам, помехи могут наводиться на шину CAN, приводя к:

  • Тайм-аутам связи, периодическим отключениям MCU
  • Случайному отключению CAN-устройств, невозможности сканирования через canbus_query.py
  • Срабатыванию Timer too close или Communication timeout во время хоминга
  • Внезапному shutdown во время печати без явных аппаратных ошибок в логе

При поиске помех в первую очередь проверьте топологию прокладки проводов CAN относительно силовых линий, заземление экрана и целостность оконечных резисторов.

Pост счетчика CAN bytes_invalid

Сообщение об ошибке: В строке Stats в klippy.log появляется ненулевое и постоянно растущее значение bytes_invalid.

Причина ошибки: Сообщения шины CAN были переупорядочены (reordered messages). Это серьезная проблема, которая может привести к нестабильности и случайным ошибкам на любом этапе печати.

Известные причины:

  • Версия ядра Linux ниже v6.6.0, содержит ошибку переупорядочивания в драйвере CAN gs_usb.
  • Использование USB-CAN адаптера с прошивкой candlelight версии ниже v2.0.
  • Версия прошивки узла в режиме моста USB-to-CAN Klipper ниже v0.12.0.

Методы решения:

  1. Обновите ядро Linux до версии v6.6.0 или выше.
  2. Если используется USB-CAN адаптер candlelight, обновите прошивку до версии v2.0 или выше.
  3. Если используется режим моста USB-to-CAN Klipper, убедитесь, что узел-мост прошит прошивкой Klipper v0.12.0+.
  4. Если bytes_invalid продолжает расти, это означает, что основная причина не устранена. Необходимо продолжить проверку версий ядра и прошивки.
  5. Примечание: Увеличение bytes_invalid не вызвано аппаратными проблемами, такими как подключение проводов или оконечные резисторы, и может быть исправлено только обновлением программного обеспечения/прошивки.

Недостаточная очередь шины CAN, приводящая к Timer too close

Сообщение об ошибке: При связи по шине CAN появляется MCU 'xxx' shutdown: Timer too close.

Причина ошибки: Длина очереди по умолчанию (qlen), установленная ядром Linux для сетевого интерфейса CAN, обычно равна 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. Постоянная настройка: добавьте параметр txqueuelen 128 или txqueuelen 1024 в файл /etc/network/interfaces.d/can0; если используется systemd-networkd, задайте TxQueueLength= в файле .link.

Узел шины CAN не отвечает

Сообщение об ошибке: CAN-устройство внезапно отключается, canbus_query.py не может его обнаружить.

Распространенные причины:

  • Отсутствует или неправильно установлен оконечный резистор CAN (между CANH и CANL должно быть ровно два резистора по 120 Ом).
  • Ослабление, плохой обжим или неплотное соединение разъемов проводов CANH/CANL.
  • CAN-провод не является витой парой с экраном или проложен параллельно силовым линиям, что вызывает электромагнитные помехи (наиболее распространенная и скрытая причина).
  • Аномалия питания USB-CAN адаптера.

Ключевые моменты при поиске помех:

Аномалии связи CAN, вызванные электромагнитными помехами, часто проявляются как "периодические" и "случайные" — иногда все работает нормально, иногда происходит внезапное отключение, которое восстанавливается после перезагрузки. При поиске следует обратить особое внимание на:

  • Топология проводки: Проложены ли провода связи CAN рядом с проводами двигателей, нагревателей, стола в кабель-канале? Сигналы ШИМ-модуляции шаговых двигателей и шум переключения нагревателей являются самыми сильными источниками помех.
  • Заземление экрана: При использовании экранированного провода заземлен ли экран только с одной стороны (только на стороне хост-компьютера)? Двустороннее заземление создает контур заземления и, наоборот, вносит помехи.
  • Расположение оконечных резисторов: Установлены ли оконечные резисторы на физических концах шины CAN? Включены ли они с помощью перемычек на плате, DIP-переключателей или готовых оконечных разъемов?
  • Спецификация CAN-провода: Используется ли витая пара (шаг скрутки не более нескольких сантиметров)? Параллельные провода (не витая пара) практически не подавляют синфазные помехи.
  • Целостность заземления: Надежно ли заземлены блок питания и корпус машины? Незаземленный металлический корпус принтера действует как большая антенна, легко улавливая шумы окружающей среды.

Методы поиска:

Отключение питания

Следующие аппаратные проверки должны выполняться только при полном отключении принтера от сети: проверка CANH/CANL, перекладка проводов, настройка экрана, включение/выключение оконечных резисторов, измерение сопротивления между CANH и CANL.

  1. Убедитесь, что на шине CAN есть ровно два оконечных резистора по 120 Ом. Предпочтительно использовать перемычки на плате, DIP-переключатели или готовые оконечные разъемы.
  2. Проверьте надежность подключения проводов CANH/CANL, полностью ли вставлены разъемы.
  3. Пожалуйста, сначала отключите питание. Измерьте сопротивление между CANH и CANL мультиметром (нормальное значение около 60 Ом).
  4. Переложите провода: Разведите провода связи CAN и силовые провода, сохраняя расстояние не менее 2-3 см, избегайте параллельной прокладки.
  5. Проверьте заземление экрана: Экран заземлен только на стороне хост-компьютера, на стороне инструментальной платы он должен быть висеть в воздухе; не разбирайте блок питания и не изменяйте заземление сети самостоятельно.
  6. Используйте candump для мониторинга трафика шины CAN, наблюдайте, появляется ли большое количество кадров с ошибками (error frames).
  7. Временно снизьте скорость/ускорение печати для тестирования. Если проблема исчезает, это указывает на прямую зависимость помех от интенсивности работы двигателей.

Порядок поиска, если ID не найден

  1. Выполните ip -details link show can0, убедитесь, что CAN0 существует и находится в рабочем состоянии.
  2. Убедитесь, что скорость CAN в прошивке инструментальной платы и основной платы совпадает со скоростью 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, а затем повторите поиск.

Правила установки оконечных резисторов

Отключение питания

Перед настройкой перемычек оконечных резисторов, DIP-переключателей или повторным подключением проводов CAN полностью выключите принтер и отключите его от сети.

Тип устройстваТребование к оконечному резисторуИнструкция по эксплуатации
Инструментальная плата CANТребуется оконечный резистор 120 ОмВключить с помощью перемычки на плате или DIP-переключателя
CAN-интерфейс основной платыТребуется оконечный резистор 120 ОмВключить с помощью перемычки на плате или DIP-переключателя
Модули преобразования типа 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 и выше или системы с обновленным Klipper после 9 апреля 2026 года:
python3 ~/klipper/lib/katapult/flashtool.py -u <CAN_UUID>
  • Старые версии системы, т.е. FlyOS-FAST до 1.3.8, или системы с Klipper, не обновленным до 9 апреля 2026 года:
python3 ~/klipper/lib/canboot/flash_can.py -u <CAN_UUID>
Внимание

После -u обязательно должен быть пробел, а затем CAN UUID.

Появление сообщения CAN Flash Success обычно означает успешную прошивку.

Loading...

Действия после обновления

После обновления перезапустите Klipper:

sudo systemctl start klipper

Если после обновления подключиться не удается, повторно найдите CAN ID и убедитесь, что canbus_uuid: в printer.cfg все еще верен.

Итоговый контрольный список

Если вы не можете найти CAN ID или Klipper не может подключиться к CAN-устройству, быстро проверьте следующее по порядку:

  1. can0 распознается системой.
  2. bitrate совпадает со скоростью CAN, установленной при компиляции прошивки.
  3. qlen или txqueuelen равно 1024.
  4. CAN-H и CAN-L не перепутаны местами.
  5. Оконечные резисторы на обоих концах шины CAN установлены правильно.
  6. Инструментальная плата или основная плата получают нормальное питание.
  7. Выбран правильный способ связи в прошивке.
  8. В printer.cfg используется фактически найденный canbus_uuid:.
  9. В одном [mcu] не включены одновременно serial: и canbus_uuid:.
Loading...