Одна настройка в описании шины определяет, чьи часы в контуре главные: часы компьютера или часы первого DC-способного слейва. При неверном направлении синхронизации расхождение растёт линейно и не сходится никогда — причём система при этом запускается, оси едут, и до срыва может пройти несколько минут. Мы это замерили дважды, на двух конфигурациях одной шины.
Опорные часы EtherCAT-сегмента живут на первом DC-способном слейве цепи. Параметр
refClockSyncCycles в конфигурации lcec задаёт направление подстройки:
при положительном значении мастер каждые N циклов подтягивает опорные часы шины к
часам компьютера; при −1 — наоборот, подстраивает свой цикл под опорные
часы слейва.
Часы компьютера и кварц слейва идут с немного разной скоростью — вопрос лишь в том, кто под кого подстраивается. Наши замеры ниже показывают: на этой шине рабочим оказалось только направление «мастер под слейва».
Шина: три Inovance IS620N, Wecon VD3E, каплер Omron NX-ECC202. Оси стоят,
приводы в Switch-on-disabled. Смотрим dc-sync-diff — расхождение опорных
часов и часов мастера.
| режим | dc-sync-diff за 30 с |
|---|---|
| refClockSyncCycles = 1000 | 2,90 → 3,46 мс — растёт линейно |
| refClockSyncCycles = 1 | 229 → 590 мкс — растёт линейно |
| refClockSyncCycles = −1 | стоит |
История этого замера поучительнее самих чисел. За месяц до него мы поменяли 1000 на 1 и считали это лекарством: приводы перестали быстро терять синхронизацию. Замер показал, что фикс лечил симптом — дрейф не исчез, а замедлился, и срыв просто наступал позже. Пока расхождение не выведено на график, «стало лучше» и «стало правильно» неотличимы.
Честная оговорка: в той конфигурации при −1 расхождение стояло на постоянном смещении в сотни микросекунд. Это смещение — не дрейф, оно не росло; его источник мы тогда до конца не разобрали. После перевода конфига на драйверы устройств (см. ниже) смещение ушло вместе со старым описанием шины.
Та же шина, конфиг переведён на именованные драйверы lcec. Сравнение снято на 40-й секунде после старта.
| refClockSyncCycles = 1 | refClockSyncCycles = −1 | |
|---|---|---|
| часы сошлись | нет | да |
dc-sync-diff через 40 с | 1 175 551 нс | 103 нс |
phase-jitter | 22 634 | 0 |
В установившемся режиме 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.