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

«Станок дёргается»: три измерения вместо одной жалобы

За жалобой «дёргается», «теряет синхронизацию», «вываливается из OP» стоят как минимум три разных механизма, и меряются они порознь. Всё ниже делается штатными средствами LinuxCNC и IgH-мастера — наш софт для этого не нужен. Мы дважды копали настройку EtherCAT там, где на самом деле был перегружен процессор, — этот разбор существует, чтобы не повторять наш путь.

Измерение 1

Задержки реального времени — мерить первыми

Прежде чем искать ошибку в профиле движения или в описании шины:

cyclictest -m -p 80 -i 1000 -h 400

Запускать без графической оболочки и смотреть максимум, а не среднее: серво-поток убивает редкий выброс, а не средняя величина. Утилиты latency-test и latency-histogram поднимают собственный поток реального времени и конфликтуют с уже работающим LinuxCNC — на машине с живым станком годится именно cyclictest.

Ориентир с нашего стенда: после разгрузки системы пик составил 15 мкс — с таким запасом приводы держат OP устойчиво при servo-периоде 1 мс.

Как выглядит противоположный случай: в логе LinuxCNC появляется Unexpected realtime delay on task 0 with period 1000000, а приводы начинают отваливаться из OP по одному. Выглядит как проблема настройки EtherCAT — лечится разгрузкой машины.

Измерение 2

Отставание оси — процентиль, не среднее

Пин joint.N.f-error показывает, насколько фактическое положение отстало от командного. Снимается штатным halsampler:

halcmd loadrt sampler depth=10000 cfg=fff
halcmd net fe0 joint.0.f-error sampler.0.pin.0
halcmd net fe1 joint.1.f-error sampler.0.pin.1
halcmd net fe2 joint.2.f-error sampler.0.pin.2
halcmd addf sampler.0 servo-thread
halcmd start
halsampler -c 0 -n 5000 > f-error.txt

По столбцам считать процентиль, а не среднее: интересен именно хвост распределения.

Ловушка сравнения осей. На программе с разной длиной ходов ось X у нас показала медиану 0,27 мм против нуля у Y и Z — читалось как «X настроена хуже». Неправда: X дольше была в движении. Сравнивать оси можно только на одинаковом движении с одинаковой подачей; тогда числа сошлись — 1,34 мм у всех трёх на 3000 мм/мин.

Что значит результат. Отставание пропорционально скорости, отношение одно и то же на разных подачах — у нас около 37 с⁻¹. Это штатный след позиционной петли, а не расстройка привода. На прямой оно в геометрию не выходит, потому что все оси отстают одинаково и меняется только фаза; срез появляется на углах и дугах.

Телеметрия на частоте servo-thread показывает и то, что в усреднённых значениях растворяется: например, дискрет, с которым привод отдаёт скорость, — у двух приводов нашего стенда он различается в 800 раз, и это прямо влияет на чтение «дрожи» (разбор — в сравнении сервоприводов).

Измерение 3

Ошибки на линии — счётчики портов

Если синхронизация теряется посреди нормальной работы, а не при остановке мастера, — проверить счётчики ошибок портов у слейвов: RX Error, Forwarded RX Error, Lost Link.

Растут — проблема на проводе: кабель, экран, разность потенциалов между шкафами. Стоят на нуле, а сбои есть — проблема выше, в мастере и его расписании: возвращайтесь к первому измерению.

Анти-измерение

Чем джиттер мерить нельзя

Разность часов distributed clocks не годится как мера разброса прихода кадров. Это выход петли подстройки локальных часов слейва: она работает дискретными шагами по знаку невязки и разброс сглаживает, а не показывает. Джиттер меряется на мастере (cyclictest) и по счётчикам ошибок портов. Что разность часов DC меряет на самом деле и почему она может не сходиться — отдельный разбор.

Методика целиком, с примерами вывода: github.com/SyncTwin/linuxcnc-ethercat-configs, каталог measuring.