Устранение ошибок 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 down | CAN0 не запущен или настроен неправильно | Перенастройте CAN0 и перезагрузите |
can.CanError: Failed to transmit: [Errno 105] No buffer space available | Недостаточно буфера CAN или аномалия системной сетевой очереди | Убедитесь, что буфер равен 1024, при необходимости перенастройте CAN0 |
mcu 'xxx': Invalid CAN uuid | CAN UUID заполнен неправильно или устройство не в сети | Повторно найдите UUID, проверьте порядок проводов, питание и оконечные резисторы |
Serial connection closed | Klipper нашел конфигурацию, но соединение прервалось | Проверьте качество сети CAN, порядок проводов, оконечные резисторы и скорость прошивки |
Duplicate canbus_uuid | Несколько MCU используют один и тот же CAN UUID | Повторно найдите UUID, убедитесь, что каждый [mcu xxx] уникален |
Unknown canbus_uuid xxx | CAN UUID из конфигурации отсутствует в результатах поиска текущей сети | Закомментируйте соответствующую конфигурацию MCU, затем повторно найдите и заполните UUID |
Can not update MCU 'xxx' config as it is shutdown | CAN 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.
Методы решения:
- Обновите ядро Linux до версии v6.6.0 или выше.
- Если используется USB-CAN адаптер candlelight, обновите прошивку до версии v2.0 или выше.
- Если используется режим моста USB-to-CAN Klipper, убедитесь, что узел-мост прошит прошивкой Klipper v0.12.0+.
- Если
bytes_invalidпродолжает расти, это означает, что основная причина не устранена. Необходимо продолжить проверку версий ядра и прошивки. - Примечание: Увеличение
bytes_invalidне вызвано аппаратными проблемами, такими как подключение проводов или оконечные резисторы, и может быть исправлено только обновлением программного обеспечения/прошивки.
Недостаточная очередь шины CAN, приводящая к Timer too close
Сообщение об ошибке: При связи по шине CAN появляется MCU 'xxx' shutdown: Timer too close.
Причина ошибки: Длина очереди по умолчанию (qlen), установленная ядром Linux для сетевого интерфейса CAN, обычно равна 10, что мало для требований Klipper к высокочастотной связи с малой задержкой. В официальных примерах Klipper часто используется txqueuelen 128; в FlyOS-FAST по умолчанию установлено 1024, что обеспечивает больший запас при большом количестве узлов или высокой нагрузке.
Методы решения:
- Проверьте текущую длину очереди CAN-интерфейса:
ip link show can0 | grep qlen
- Временно увеличьте длину очереди. Для обычных систем можно сначала попробовать
128, для систем FLY или машин с несколькими узлами —1024:
sudo ip link set dev can0 qlen 128
# или
sudo ip link set dev can0 qlen 1024
- Постоянная настройка: добавьте параметр
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.
- Убедитесь, что на шине CAN есть ровно два оконечных резистора по 120 Ом. Предпочтительно использовать перемычки на плате, DIP-переключатели или готовые оконечные разъемы.
- Проверьте надежность подключения проводов CANH/CANL, полностью ли вставлены разъемы.
- Пожалуйста, сначала отключите питание. Измерьте сопротивление между CANH и CANL мультиметром (нормальное значение около 60 Ом).
- Переложите провода: Разведите провода связи CAN и силовые провода, сохраняя расстояние не менее 2-3 см, избегайте параллельной прокладки.
- Проверьте заземление экрана: Экран заземлен только на стороне хост-компьютера, на стороне инструментальной платы он должен быть висеть в воздухе; не разбирайте блок питания и не изменяйте заземление сети самостоятельно.
- Используйте
candumpдля мониторинга трафика шины CAN, наблюдайте, появляется ли большое количество кадров с ошибками (error frames). - Временно снизьте скорость/ускорение печати для тестирования. Если проблема исчезает, это указывает на прямую зависимость помех от интенсивности работы двигателей.
Порядок поиска, если ID не найден
- Выполните
ip -details link show can0, убедитесь, что CAN0 существует и находится в рабочем состоянии. - Убедитесь, что скорость CAN в прошивке инструментальной платы и основной платы совпадает со скоростью CAN0 хост-компьютера.
- Если ID устройства уже записан в
printer.cfg, сначала временно закомментируйте соответствующую конфигурацию, затем выключите питание примерно на 10 секунд и снова включите для поиска. - Проверьте, не перепутаны ли местами CAN-H и CAN-L, нет ли обрыва или плохого контакта.
- Убедитесь, что на каждом конце сети CAN есть по одному оконечному резистору
120 Ом. После полного отключения питания измерьте сопротивление между CAN-H и CAN-L; оно должно быть около60 Ом. - Убедитесь, что инструментальная плата или основная плата получают нормальное питание.
- Убедитесь, что при компиляции прошивки был выбран правильный способ связи.
- Если результаты поиска показывают
Application: CANBOOTилиApplication: Katapult, сначала прошейте прошивку Klipper, а затем повторите поиск.
Правила установки оконечных резисторов
Перед настройкой перемычек оконечных резисторов, DIP-переключателей или повторным подключением проводов CAN полностью выключите принтер и отключите его от сети.
| Тип устройства | Требование к оконечному резистору | Инструкция по эксплуатации |
|---|---|---|
| Инструментальная плата CAN | Требуется оконечный резистор 120 Ом | Включить с помощью перемычки на плате или DIP-переключателя |
| CAN-интерфейс основной платы | Требуется оконечный резистор 120 Ом | Включить с помощью перемычки на плате или DIP-переключателя |
| Модули преобразования типа UTOC | Обычно уже имеют встроенный резистор 120 Ом | Дополнительно включать оконечный резистор не нужно |
Быстрый порядок проверки
- Сначала проверьте устройство: выполните
lsusb, чтобы убедиться, что видно1d50:606f. - Затем проверьте конфигурацию: выполните
ip -details link show can0, чтобы убедиться, что CAN0 существует, скорость верна, буфер равен1024. - В конце проверьте оборудование: после полного отключения питания измерьте CAN-H и CAN-L, убедитесь, что сопротивление составляет около
60 Ом.
Если после всех проверок аномалия сохраняется, можно попробовать заменить USB-кабель, CAN-провод, UTOC или устройство CAN-моста для перекрестного тестирования.
Обновление прошивки CAN-устройств
Этот раздел предназначен для сценариев, когда вы уже можете подключиться к сети CAN и вам нужно обновить прошивку основной платы или инструментальной платы через CAN. Названия прошивок и способы компиляции различаются для разных продуктов. Сначала скомпилируйте новую прошивку в соответствии с инструкцией для соответствующего продукта.
Подготовка
- Скомпилируйте новую прошивку в соответствии с инструкцией для вашего продукта.
- Убедитесь, что CAN UUID устройства найден или что в
printer.cfgзаполненcanbus_uuid:этого устройства. - Остановите службу 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 обычно означает успешную прошивку.
Действия после обновления
После обновления перезапустите Klipper:
sudo systemctl start klipper
Если после обновления подключиться не удается, повторно найдите CAN ID и убедитесь, что canbus_uuid: в printer.cfg все еще верен.
Итоговый контрольный список
Если вы не можете найти CAN ID или Klipper не может подключиться к CAN-устройству, быстро проверьте следующее по порядку:
can0распознается системой.bitrateсовпадает со скоростью CAN, установленной при компиляции прошивки.qlenилиtxqueuelenравно1024.- CAN-H и CAN-L не перепутаны местами.
- Оконечные резисторы на обоих концах шины CAN установлены правильно.
- Инструментальная плата или основная плата получают нормальное питание.
- Выбран правильный способ связи в прошивке.
- В
printer.cfgиспользуется фактически найденныйcanbus_uuid:. - В одном
[mcu]не включены одновременноserial:иcanbus_uuid:.