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

Драйвер устройства вместо ручной карты PDO

13.08.2026 мы перевели рабочий конфиг стенда с универсального описания generic на драйверы устройств lcec. Описание шины сократилось с 236 строк до 83, ручных записей PDO осталось 10 из 53. Экономия строк здесь не главное — главное, где после перевода живёт знание об устройстве и кто отвечает за его правильность.

Стенд

Что переводили и что получилось

Железо: три сервопривода Inovance IS620N на осях X, Y, Z (режим CSP), привод Wecon VD3E в роли шпинделя (режим CSV) и каплер Omron NX-ECC202 с модулем дискретного ввода-вывода. Мастер — IgH, поверх него LinuxCNC. После перевода все пять слейвов доходят до OP:

0  0:0  OP  +  IS620N_ECAT_v2.6.8
1  0:1  OP  +  IS620N_ECAT_v2.6.8
2  0:2  OP  +  IS620N_ECAT_v2.6.8
3  0:3  OP  +  Wecon VD3E EtherCAT Servo v1.15
4  0:4  OP  +  NX-ECC202 EtherCAT coupler V1.2

lcec.0.all-op                 TRUE
lcec.0.x.srv-opmode-display   8      (CSP)
lcec.0.s.srv-opmode-display   9      (CSV, шпиндель)

Два вендора в двух разных режимах одного профиля CiA-402 работают на одной шине одновременно — это и была цель прогона.

generic → драйвер

Что меняет драйвер

В generic-режиме карту PDO каждого устройства пишет наладчик — вручную, по вендорскому мануалу: какой объект, какой длины, в какой PDO замаплен, как назвать пин HAL. Драйвер устройства несёт эту карту в себе, и описание привода в конфиге сжимается до одной строки.

было (generic)стало (драйверы)
ethercat-conf.xml236 строк83 строки
записей PDO руками5310 — все десять принадлежат каплеру
описание одного привода~39 строк карты PDOодна строка
<slave idx="0" type="IS620N" name="x"/>
<slave idx="1" type="IS620N" name="y"/>
<slave idx="2" type="IS620N" name="z"/>
<slave idx="3" type="VD3E" name="s"/>

Разница не косметическая. Ручная карта PDO — это 39 строк на привод, которые каждый интегратор переписывает заново и в которых ошибка обнаруживается только на живой шине. Карта в драйвере написана один раз, лежит в коде под версионным контролем и одинакова у всех, кто этим драйвером пользуется.

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

Грабля 1

Имена пинов назначает драйвер

В generic имена пинов HAL задавали мы сами. Драйвер называет их по-своему, с префиксом srv- — и не всегда предсказуемо.

былостало
lcec.0.0.cia-statuswordlcec.0.x.srv-cia-statusword
lcec.0.0.actual-positionlcec.0.x.srv-actual-position
lcec.0.0.following-errorlcec.0.x.srv-actual-following-error

Последняя строка показательна: изменилось не только начало имени. Заодно меняется адресация — вместо номера слейва в имени пина стоит name из XML, поэтому lcec.0.0. превращается в lcec.0.x.. Это удобнее: переставили привод в цепи — имена пинов не поехали.

Грабля 2

Меняется тип пина — и HAL узнаёт об этом при связывании

Более дорогая из двух: она проявляется не на этапе конфигурации, а при пуске.

Ошибку слежения мы объявляли в XML как s32. Класс cia402 в драйвере экспортирует её как u32, и запуск падает:

HAL: ERROR: type mismatch 'sampler.0.pin.3' <- 'x-drv-ferr'
./machine.hal:148: link failed

Лечится на приёмной стороне — в нашем случае каналы sampler под ошибку слежения переведены в u32. Правило общее: переводя конфиг на драйвер, сверяйте не только имена пинов, но и их типы — halcmd show pin lcec показывает и то, и другое.

Воспроизвести

Конфиг и драйверы опубликованы

Полный конфиг этого прогона — github.com/SyncTwin/linuxcnc-ethercat-configs, каталог mill-3axis-named-drivers. Драйверы для IS620N и VD3E — в нашей ветке апстрима lcec: github.com/SyncTwin/linuxcnc-ethercat.

Масштабы осей в конфиге посчитаны под нашу механику (ШВП 10 мм, энкодер 23 бита), пределы и направления — под наш станок. При переносе на другую машину эти числа обязаны быть пересчитаны.

Смежные разборы: distributed clocks на той же шине · что привод расскажет о себе по SDO. Наблюдения по устройствам — в реестре EtherCAT-устройств.