У CoE есть механизм самоописания: словарь объектов устройства можно перечислить прямо по шине, через SDO-Info. Идея заманчивая — подключил незнакомый привод, спросил, получил полный список параметров. Мы спросили четыре привода четырёх вендоров. Ответы: 0, 109, 809 и снова 0 записей.
| привод | 0x6502 (supported drive modes) | словарь по SDO-Info |
|---|---|---|
| Inovance IS620N | 0x3AD | 0 записей |
| Wecon VD3E | 0x3AD | 109 записей |
| Mitsubishi MR-J4 | 0x3AD | 809 записей |
| Schneider LXM28E | 0xED — нет csv/cst, есть ip | 0 записей |
Три вендора отвечают на 0x6502 байт в байт одинаково, четвёртый — иначе. Два прибора из четырёх словарь не отдают вовсе, и один из них — недешёвый европейский. Стандарт гарантирует, где лежат базовые объекты профиля, но не гарантирует, что устройство согласится их перечислить.
Вывод для архитектуры: автодискавери приводов на SDO-Info строить нельзя.
Идентифицировать устройство надёжно можно по vendor id и product code из ESI-описания —
для VD3E это 0x00000EFF / 0x0D3E0001, подтверждено живой
шиной, — а состав параметров брать из заранее разобранного профиля, а не спрашивать
устройство.
Дыры встречаются и в самом словаре. У VD3E объектов масштабирования 0x608F (разрешение энкодера) и 0x6092 (feed constant) нет вовсе — на запрос приходит «object does not exist». Разрешение энкодера у этого привода по шине узнать нельзя, только из ESI или паспорта. Электронный редуктор 0x6091 при этом есть и работает ровно по стандарту — мы проверяли его внешним эталоном, проворачивая размеченный вал рукой.
Медианы на нашем стенде, мастер IgH в фазе Idle.
| операция | время |
|---|---|
запуск процесса (/bin/true, базовая линия) | 0,57 мс |
ethercat version | 1,5 мс |
ethercat master (шину не трогает) | 1,4 мс |
ethercat sdos — перечислить словарь | 5 мс |
ethercat upload — прочитать один параметр | 32 мс |
Спросить структуру дёшево: словарь мастер отдаёт из кеша, собранного при сканировании. Спросить значение дорого: это реальный обмен через мейлбокс. Чтение 60 параметров заняло у нас 1,97 с; полный паспорт привода в 300 параметров — около десяти секунд. Для разового дискавери приемлемо, для периодического опроса на живой шине — нет. Сколько это займёт при поднятом циклическом обмене, мы не мерили.
Подтверждение записи по SDO говорит только о том, что сообщение доставлено. Применилось ли значение — проверяется другим объектом: записали режим в 0x6060 — читайте факт из 0x6061; послали controlword — ждите биты statusword. Команда и факт в профиле CiA-402 всегда живут в разных объектах, и это сделано не случайно.
Обратная сторона того же свойства — шум, который не надо чинить. Строка
Failed SDO download 0x6060 (error -22) у нас печатается при каждом
запуске, включая успешные: объект замаплен в PDO, и привод отвергает попытку записать
его ещё и по SDO. Мы потратили время на «лечение», прежде чем заметили, что строку
печатают и работающие оси.
И последняя грабля — про сам измерительный инструмент. Замеряя длительность переходов машины состояний CiA-402 через SDO, мы получили на всех ступенях ровно 64 мс — две SDO-транзакции по 32 мс. Переходы происходят быстрее, чем метод способен различить: мы померили собственный прибор, а не привод. Поэтому базовую линию — стоимость пустого чтения — стоит печатать рядом с каждым результатом.
Скрипты этих проверок опубликованы:
github.com/SyncTwin/linuxcnc-ethercat-configs,
каталог sdo-probing. Полные словари параметров по моделям — в
каталоге приводов, наблюдения
по устройствам — в реестре EtherCAT-устройств.