Industry 4.0 · цифровые двойники станков и промышленной автоматики · отечественная R&D-разработка +7 925 353-56-35 info@synctwin.ru

Distributed clocks: почему часы не сходятся

Одна настройка в описании шины определяет, чьи часы в контуре главные: часы компьютера или часы первого DC-способного слейва. При неверном направлении синхронизации расхождение растёт линейно и не сходится никогда — причём система при этом запускается, оси едут, и до срыва может пройти несколько минут. Мы это замерили дважды, на двух конфигурациях одной шины.

refClockSyncCycles

Что настраивается

Опорные часы EtherCAT-сегмента живут на первом DC-способном слейве цепи. Параметр refClockSyncCycles в конфигурации lcec задаёт направление подстройки: при положительном значении мастер каждые N циклов подтягивает опорные часы шины к часам компьютера; при −1 — наоборот, подстраивает свой цикл под опорные часы слейва.

Часы компьютера и кварц слейва идут с немного разной скоростью — вопрос лишь в том, кто под кого подстраивается. Наши замеры ниже показывают: на этой шине рабочим оказалось только направление «мастер под слейва».

Замер 1 · 12.08.2026

Дрейф линейный при любом положительном значении

Шина: три Inovance IS620N, Wecon VD3E, каплер Omron NX-ECC202. Оси стоят, приводы в Switch-on-disabled. Смотрим dc-sync-diff — расхождение опорных часов и часов мастера.

режимdc-sync-diff за 30 с
refClockSyncCycles = 10002,90 → 3,46 мс — растёт линейно
refClockSyncCycles = 1229 → 590 мкс — растёт линейно
refClockSyncCycles = −1стоит

История этого замера поучительнее самих чисел. За месяц до него мы поменяли 1000 на 1 и считали это лекарством: приводы перестали быстро терять синхронизацию. Замер показал, что фикс лечил симптом — дрейф не исчез, а замедлился, и срыв просто наступал позже. Пока расхождение не выведено на график, «стало лучше» и «стало правильно» неотличимы.

Честная оговорка: в той конфигурации при −1 расхождение стояло на постоянном смещении в сотни микросекунд. Это смещение — не дрейф, оно не росло; его источник мы тогда до конца не разобрали. После перевода конфига на драйверы устройств (см. ниже) смещение ушло вместе со старым описанием шины.

Замер 2 · 13–14.08.2026

На конфиге с драйверами устройств

Та же шина, конфиг переведён на именованные драйверы lcec. Сравнение снято на 40-й секунде после старта.

refClockSyncCycles = 1refClockSyncCycles = −1
часы сошлисьнетда
dc-sync-diff через 40 с1 175 551 нс103 нс
phase-jitter22 6340

В установившемся режиме dc-sync-diff на этой конфигурации держится в единицах наносекунд: 3–13 нс по замеру 14.08.2026, phase-jitter — ноль. С положительным значением часы не сходятся никогда — расхождение растёт, пока привод не сорвёт синхронизацию.

Ловушка

Опорные часы обязаны быть в конфиге

Если описать в конфигурации только один слейв из длинной цепи, мастер отвечает Failed to get reference clock time: слейв доходит до OP, а DC не работает. Опорные часы живут на первом DC-способном слейве цепи, и он обязан присутствовать в конфиге — даже если сам вам не нужен.

Как читать

Стабильное большое и растущее маленькое — разные диагнозы

Спор о времени шины решается замером, а не рассуждением: смотреть, растёт ли dc-sync-diff. Стабильное большое значение — постоянное смещение, с ним система живёт; растущее маленькое — дрейф, который рано или поздно кончится срывом. Одна цифра, снятая один раз, эти два случая не различает.

И обратное предупреждение: разность часов DC не годится как мера разброса прихода кадров. Это выход петли подстройки часов слейва — она работает дискретными шагами по знаку невязки и разброс сглаживает, а не показывает. Джиттер меряется на мастере и по счётчикам ошибок портов — об этом отдельный разбор.

Конфигурация, на которой сняты замеры, опубликована: github.com/SyncTwin/linuxcnc-ethercat-configs, каталог mill-3axis-named-drivers.