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

Диагностика ошибок CAN

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

Сценарии применения:

  • Появление ошибок, связанных с CAN0, CAN UUID или CAN-сетью, в Klipper.
  • Периодическое отключение CAN-устройств или их ненахождение.
  • Необходимость диагностики проблем bytes_invalid, 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-сети, порядок проводов, оконечные резисторы и скорость прошивки

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

Диагностика ошибок CAN-связи

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

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

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

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

Постоянный рост счетчика CAN bytes_invalid

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

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

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

  • Версия ядра Linux ниже v6.6.0, присутствует ошибка переупорядочивания в драйвере gs_usb CAN.
  • Использование 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 устройства можно найти, или что canbus_uuid: уже указан для этого устройства в printer.cfg.
  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...