Блог

PLCopen Motion и SoftMotion в CODESYS: Когда нужен servo-профиль, а когда достаточно простого позиционирования

Разговор о motion control на ПЛК обычно начинается с вопроса «нам нужен SoftMotion?» и заканчивается либо покупкой лицензии «на вырост», либо самодельным позиционированием на таймерах, которое работает до первой нестандартной ситуации. Ни то ни другое не оптимально. Ниже - разбор того, чем PLCopen Motion отличается от простого управления приводом, что именно даёт SoftMotion в CODESYS, где граница целесообразности, и таблица: задача → минимально достаточное решение → когда всё-таки нужен SoftMotion.

Два уровня задачи

Прежде чем говорить о технологиях, полезно разделить два класса задач.
Простое позиционирование - переместить ось из точки A в точку B, убедиться, что дошла, удержать позицию. Скорость профильная или трапециевидная, один привод, жёстких требований к времени цикла координации нет. Большинство конвейерных приложений, подъёмников, задвижек - здесь.
Координированное движение - несколько осей, связанных математически: интерполяция траектории, электронное зубчатое колесо, кулачок, синхронизация по мастер-оси. Здесь уже нельзя просто «дать скорость» каждому приводу независимо: ошибка рассогласования между осями накапливается и превращается в брак или аварийный останов.
PLCopen Motion Control - это стандарт программного интерфейса для обоих классов. SoftMotion в CODESYS - реализация этого стандарта с координатором движения на уровне рантайма.

Что такое PLCopen Motion Control

PLCopen - организация, которая определяет стандарты программирования ПЛК. Её спецификация Motion Control описывает набор функциональных блоков для управления осями: MC_Power, MC_MoveAbsolute, MC_MoveRelative, MC_MoveVelocity, MC_Stop, MC_GearIn, MC_CamIn и другие.
Главная ценность стандарта - переносимость логики: программа, написанная под PLCopen, не привязана к конкретному приводу или шине. Меняется привод - меняется только нижний уровень конфигурации, прикладная логика остаётся. Это особенно важно в проектах, где одна программная база обслуживает машины с разными приводами.
В CODESYS стандартная библиотека SM3_Basic реализует PLCopen Part 1 (одиночные оси) и Part 2 (координированное движение). SoftMotion добавляет к этому ядро координатора, работающее в реальном времени на самом ПЛК.

Оси в CODESYS: виртуальные и реальные

Ось в CODESYS - это программный объект типа AXIS_REF или его аналог в конкретной реализации. Оси бывают:
Реальные - связаны с физическим приводом через полевую шину: EtherCAT, CANopen, PROFIBUS, аналоговый ±10 В. Фактическая позиция и скорость читаются с энкодера привода.
Виртуальные - существуют только в программе. Используются как мастер-оси для синхронизации: несколько реальных осей «следуют» за одной виртуальной, которая задаёт закон движения.
Количество осей, которые SoftMotion может координировать одновременно, ограничено лицензией и вычислительными ресурсами контроллера. Это важно учитывать на этапе архитектуры: восемь синхронных осей на одном ПЛК с циклом 1 мс - это совсем другая нагрузка, чем две независимые.

Интерполяция: зачем она нужна и когда без неё не обойтись

Линейная интерполяция (MC_MoveLinear и аналоги) - координатор рассчитывает закон изменения позиций сразу нескольких осей так, чтобы инструмент (или каретка) двигался по прямой в пространстве. Ни одна ось сама по себе этого не знает: каждая видит только свой угол или линейное перемещение.
Круговая интерполяция (MC_MoveCircular) - то же самое для дуги. Применяется в станках, плазменных и лазерных резаках, сварочных манипуляторах.
Без интерполятора эти задачи решаются либо предварительным расчётом уставок для каждой оси на хосте (тяжело и хрупко), либо не решаются вовсе. Именно наличие интерполятора на уровне ПЛК и отличает SoftMotion от «самодельного motion».

Электронное зубчатое колесо и электронный кулачок

Электронное зубчатое колесо (MC_GearIn) - ведомая ось следует за ведущей с заданным передаточным числом. Пример: два конвейера, соединённых электронной передачей, должны двигаться в соотношении 1:2. Рассогласование компенсируется в реальном времени. В механике это зубчатая передача; здесь - математика в рантайме.
Электронный кулачок (MC_CamIn) - ведомая ось следует за ведущей по заданной таблице «угол ведущего → позиция ведомого». Применяется в упаковке,印刷, нарезке по движущемуся полотну. Профиль кулачка хранится в массиве и может меняться на лету (смена формата без остановки).
Оба инструмента требуют стабильного цикла обновления: если ПЛК не успевает пересчитать уставки вовремя, синхронизация рвётся. Это и есть ограничение реального времени, о котором важно говорить честно.

Ограничения реального времени: что нужно знать до проекта

SoftMotion работает в рамках циклической задачи CODESYS. Чем короче цикл и чем стабильнее его джиттер - тем точнее координация. На практике:
•Для простой синхронизации по скорости (гирбокс) с допуском ±1-2 мм обычно достаточно цикла 5-10 мс.
•Для точного позиционирования с допуском ±0,1 мм и плавной интерполяцией нужен цикл 1-4 мс и шина с жёстким детерминизмом (EtherCAT).
•Аналоговый выход ±10 В как интерфейс к приводу вносит задержку на стороне привода и ограничивает достижимую динамику независимо от цикла ПЛК.
Если проект требует точной многоосевой координации, а шина - Modbus или аналог - это архитектурная проблема, которую не решить настройкой SoftMotion. Планировать шину и цикл нужно до выбора привода, а не после.

Типичные проблемы настройки привода

На практике большинство проблем с motion в CODESYS укладываются в несколько категорий.
Несоответствие единиц - ПЛК работает в пользовательских единицах (мм, градусы), привод - в инкрементах энкодера. Если коэффициент пересчёта задан неверно или не задан, MC_MoveAbsolute отправит ось не туда. Проверяется принудительным перемещением на заведомо известное расстояние и сверкой с фактическим.
Нет референса (хоминга) - после включения питания реальная ось не знает своей позиции. Блок MC_Home или последовательность с датчиком нуля обязательна, если задача требует абсолютного позиционирования.
Ошибки Following Error - рассогласование между заданной и фактической позицией превышает допуск. Причины: слишком агрессивный профиль скорости/ускорения, неправильно настроенный ПИД привода, механический люфт или проскальзывание, недостаточный момент.
Зависание в состоянии ErrorStop - ось ушла в аварию и не выходит из неё. MC_Reset нужно вызывать правильно: сначала устранить причину ошибки, убедиться что условие сброса выполнено, только потом - импульс Execute.
Нестабильный цикл задачи - при большой нагрузке ПЛК время цикла увеличивается, координатор получает данные с джиттером. Решение: выделить motion в отдельную задачу с высоким приоритетом и жёстким контролем перегрузки.

Таблица: задача → минимально достаточное решение → когда нужен SoftMotion

Задача
Минимально достаточное решение
Когда нужен SoftMotion
Разгон/торможение конвейера, без позиционирования
Частотный преобразователь с аналоговым управлением, без ПЛК-motion
Не нужен
Позиционирование в одну точку (A → B), допуск мм
PLCopen MC_MoveAbsolute без координатора, или встроенный позиционер привода
Не нужен, если одна ось
Несколько независимых одиночных осей
PLCopen Part 1 (SM3_Basic) + отдельный вызов для каждой оси
Не нужен, если оси не координируются
Позиционирование с S-образным профилем скорости
PLCopen MC_MoveAbsolute с параметрами Jerk (если поддержано)
Зависит от привода; SoftMotion даёт профиль на уровне ПЛК
Синхронное движение двух осей с постоянным передаточным числом
SoftMotion MC_GearIn
Да
Линейная интерполяция двух и более осей
SoftMotion c группой осей и MC_MoveLinear
Да
Круговая интерполяция (станок, резак)
SoftMotion + MC_MoveCircular
Да
Электронный кулачок (упаковка, нарезка)
SoftMotion + MC_CamIn
Да
Синхронизация по полотну (летучие ножи, принтеры)
SoftMotion с виртуальной мастер-осью
Да
Управление шаговым двигателем без обратной связи
Встроенный позиционер контроллера шаговика или простые выходы Step/Dir
Обычно нет

Где уместен СТАБУР

Оборудование СТАБУР на базе CODESYS поддерживает стандарт PLCopen Motion через библиотеку SM3_Basic. Для задач с SoftMotion выбор привода и шины нужно согласовывать с поддержкой: не все комбинации «ПЛК + привод + шина» дают одинаковые возможности по циклу и детерминизму. Закладывать архитектуру motion-проекта лучше до закупки оборудования, а не после монтажа.

Заключение

PLCopen Motion - это не «большой» и «маленький» вариант одной и той же задачи. Это два разных уровня: управление одной осью по событию и координированное движение нескольких осей в реальном времени. SoftMotion нужен там, где задача требует второго уровня - интерполяции, синхронизации, кулачка. Для одиночного позиционирования без координации достаточно стандартных PLCopen-блоков, которые есть в базовой библиотеке. Главное - принять это решение до начала проекта, а не в процессе наладки.

FAQ

SoftMotion работает без EtherCAT?
Работает, в том числе с CANopen, PROFIBUS, аналогом. Но EtherCAT даёт наилучший детерминизм цикла и максимальные возможности по количеству осей и частоте обновления.
Можно ли добавить SoftMotion в существующий проект?
Да, это вопрос лицензии и конфигурации осей. Прикладная логика на PLCopen-блоках при этом не переписывается.
Что такое Following Error и как выставить допуск?
Following Error - разница между заданной и фактической позицией. Допуск задаётся в параметрах оси; слишком жёсткий допуск даёт ложные аварии, слишком мягкий - скрывает реальные проблемы механики и настройки привода.
Обязательно ли делать хоминг при каждом включении?
Для абсолютных энкодеров - нет, позиция сохраняется. Для инкрементальных - да, хоминг обязателен после каждой потери питания или сброса.
PLCopen Motion и SoftMotion - это одно и то же?
Нет. PLCopen Motion - стандарт интерфейса (блоки MC_*). SoftMotion - конкретная реализация в CODESYS с координатором движения. Блоки PLCopen можно использовать без SoftMotion для одиночных осей.

Внутренняя перелинковка

Обсуждение