Ось прошла MC_Home в CODESYS SoftMotion, в Online статус «Homed», оператор даёт Move - ось в Fault, привод мигает ошибкой, MC_ReadStatus показывает ErrorStop. В симуляторе SoftMotion тот же проект: Home, несколько циклов позиционирования, ноль проблем. На объекте с реальным сервоприводом по EtherCAT или CANopen - стабильный сценарий «после Home всё ломается». Частая причина не в программе Move, а в конфигурации оси: неверный тип энкодера, лимиты после референса, MC_Power без Enable, или симулятор не эмулирует ответ привода на MC_SetPosition.
Статья разбирает MC_Home и MC_Power, лимиты, энкодер, состояние оси по PLCopen, отличие симулятора SoftMotion от реального привода и типовые ошибки конфигурации. Не заменяет вводную по PLCopen Motion / SoftMotion в CODESYS - там база осей и библиотек. Фокус на расхождении симулятор vs объект после процедуры Home.
Короткий ответ
Если ось в Fault после Home на объекте, а в симуляторе нет - проверьте: MC_Power (Enable, биты готовности привода); тип и масштаб энкодера в конфигурации оси vs факт датчика; положение лимитов после референса (Home offset, software limits); состояние MC_ReadStatus / MC_ReadAxisError (код ошибки привода); не выполнен ли MC_SetPosition в симуляторе «молча», а на приводе отклонён. Симулятор не моделирует крутящий момент, STO, following error привода, расхождение импульсов энкодера. Сравните Online: ActualPosition после Home с ожидаемым нулём, Difference pulse counter, DriveReady из телеграммы.
Цепочка MC_Power и MC_Home
Перед Home ось должна быть в состоянии, позволяющем референс. Типовая последовательность:
MC_Power с Enable=TRUE, дождаться Status «PowerOn» и «IsHomed» FALSE до Home. MC_Home с параметрами режима (по маркеру, по индексу, текущая позиция). После успешного Home - «IsHomed» TRUE, ActualPosition часто 0 или offset из конфигурации.
Если MC_Power сброшен между Home и Move - ось в SwitchOnDisabled или ErrorStop. Оператор видит «мы домировали», но Enable уже FALSE.
На реальном приводе MC_Power зависит от STO, разрешения с реле, готовности DC bus. Симулятор поднимает биты готовности автоматически.
Проверка на объекте: в Online биты MC_Power.Status, EnableValid, Error. При Error после Home - MC_ReadAxisError и журнал привода.
MC_Home: режимы и что ломается на объекте
Режимы Home по PLCopen (зависит от привода и настройки): движение к маркеру, к индексу Z, установка текущей позиции как нуля без движения (только если привод поддерживает и разрешено).
«Установить текущую позицию нуля» в симуляторе работает всегда. На приводе - только при определённом состоянии и часто только в Servo Off - иначе Fault 0x8xxx.
Неверный Home offset в конфигурации оси: после референса программная позиция 0, а физически вал в упор в лимит - следующий Move в «плюс» упирается в software limit и Fault.
Скорость и ускорение Home выше, чем позволяет механика - following error на реальном приводе, в симуляторе нет контроля.
Направление Home против физического упора - привод в torque limit, таймаут Home, ErrorStop.
Сверьте параметр Home в конфигурации оси CODESYS (Device → SoftMotion axis) с мануалом привода: не подставлять значения из примера проекта другого механизма.
Лимиты: software и hardware после референса
После Home ActualPosition = 0 (или offset). Software limits Min/Max заданы в конфигурации оси. Если Min = 0 и вал стоит в нуле, Move с отрицательным target - мгновенный limit fault.
Hardware limits (концевики) подключены NC/NO - при рассинхроне «ноль программы» и физики концевик уже активен - ось не выходит из ErrorStop.
В симуляторе концевики часто не подключены или всегда FALSE.
Диагностика: MC_ReadDigitalInputs или биты лимитов в Online; ручной медленный jog после Home в безопасном направлении.
После замены энкодера или редуктора пересчитать импульсы на оборот и лимиты в мм - старые лимиты в программе при новом масштабе дают ложный limit.
Энкодер: тип, масштаб, направление
Расхождение «симулятор ок / объект fault» часто в Encoder configuration: incremental vs absolute, single-turn vs multi-turn, pulses per revolution, направление (invert).
На объекте: после Home ActualPosition скачет или дрейфует - неверный масштаб или пропущен Z index.
EtherCAT/CANopen: масштаб иногда задаётся в приводе и в CODESYS - двойная настройка с разными значениями. Симулятор использует только конфиг CODESYS.
Проверка: ручной оборот вала, шаг ActualPosition vs ожидаемый периметр. MC_ReadParameter на object-specific параметры энкодера.
Абсолютный энкодер без корректной процедуры при первом пуске - Home каждый раз разный, после «успешного» Home позиция вне лимитов.
Состояние оси: MC_ReadStatus и переходы
PLCopen state machine: Disabled → StandStill → Homed (логически) → Moving → ErrorStop. MC_ReadStatus возвращает биты: Error, Disabled, Standstill, Homed, ContinuousMotion, и др.
После Home ожидаем Standstill + Homed, Error=FALSE. Если Error=TRUE - Move блокируется.
Типовой сценарий: Home завершился с внутренним warning, бит Homed TRUE, но Error тоже TRUE - программа не проверяет Error перед Move.
В Online смотреть AxisGroupStatus и отдельно MC_ReadAxisError.AxisErrorID - код для мануала привода.
Симулятор не выставляет часть кодов ошибок привода (overload, encoder wire break).
Симулятор SoftMotion vs реальный привод
Симулятор SoftMotion в CODESYS моделирует кинематику оси по конфигурации: идеальный энкодер, мгновенный отклик, лимиты только software из проекта.
Не моделирует: задержки цикла EtherCAT, lost frames, реальный following error, STO с реле, механический упор, дребезг концевика, неверный Unit в приводе, необходимость MC_Reset на приводе после fault.
Практика пуска: логику MC (Home, Move, Reset) отладить в симуляторе; конфигурацию оси и привода валидировать на стенде с реальным мотором до FAT.
При первом старте CODESYS 3.5 проверьте версию SoftMotion library и Device Description - несовпадение с рантаймом на ПЛК даёт странные статусы только на железе.
Сравнение с ENUM и симулятором ПЛК - общий принцип: симулятор не заменяет полевую проверку.
MC_Reset и цикл после Fault
После Fault нужны MC_Reset (и иногда Reset на приводе) перед новым MC_Power и Home. Оператор жмёт «Старт» без Reset - ось остаётся в ErrorStop, «после Home» в интерфейсе - устаревший индикатор HMI.
Программа: после MC_Home проверить NOT Error, затем разрешить HMI-кнопку Move. Индикатор Homed на экране связать с MC_ReadStatus.Homed AND NOT Error.
Таймаут Home: при истечении без сброса - ось в неопределённом состоянии, частично Homed.
EtherCAT / CANopen: связь и PDO
На объекте ось fault «после Home» из-за потери связи в следующем цикле - не из-за Home как такового. PDO Statusword привода показывает fault bit (например bit 3 fault).
Проверка: EtherCAT slave state OP, WC complete; осциллограф цикла; нет ли DC sync fault.
Unit mode привода не в Cyclic Position - MC_MoveAbsolute не выполняется, симулятор не проверяет mode.
После Home привод в режиме с ограничением скорости из HMI - параметр скорости 0 - таймаут движения, ErrorStop.
Статус оси / Fault и проверка на объекте
| Статус / Fault | Вероятная причина | Проверка на объекте |
|---|---|---|
| ErrorStop после Home, Homed=TRUE | Home с warning, Error не сброшен | MC_ReadAxisError; MC_Reset; условие Move |
| Fault при первом Move после Home | Software limit, target вне Min/Max | ActualPosition, limits, target в Online |
| Fault на Home, в симуляторе OK | Режим Home не поддержан приводом | Мануал привода, смена Home mode |
| Following error на Home | Скорость/ускорение Home, механика | Снизить Home velocity; момент |
| Encoder fault 0x23xx | Обрыв/тип энкодера | Проводка, тип в конфиге vs привод |
| STO / not ready после Home | MC_Power FALSE, реле безопасности | STO цепь, MC_Power.Enable |
| Концевик active в Standstill | Нулёвка не совпадает с механикой | Jog, концевики, offset Home |
| Работало до перезагрузки ПЛК | Абсолютный энкодер без сохранения | Процедура первого пуска, battery |
| Fault только на быстром цикле | EtherCAT jitter, lost PDO | Cycle time, sync, кабель |
| Homed OK, позиция дрейфует | Масштаб импульсов неверный | Оборот вала vs ActualPosition |
| MC_SetPosition в программе | На приводе запрещён в Servo On | Убрать или выполнять в правильном state |
Конфигурация оси в CODESYS: чек до выезда
Экспорт axis configuration из рабочего стенда и сравнение с объектом: scaling, modulos, encoder type, limits, home mode, jerk.
Версия библиотеки SM3_Basic / PLCopen MC совпадает с установленной на ПЛК объекта.
Device tree: правильный slave, axis linked to правильному drive channel.
Тестовая программа на объекте без HMI: Power → Home → Move 10 mm → Move back - минимальный сценарий.
Логирование ActualPosition, Status, ErrorID каждый цикл в файл на первые 30 минут пуска - разбор post-factum.
HMI и операторский сценарий
Кнопка Home на экране без interlock: Home во время Move - fault. Разрешение Home только в Standstill.
Индикатор «Готов» без бита Homed - оператор запускает цикл, программа обращается к позиции, накопленный fault.
Связь с иерархией экранов и аварий HMI - fault оси должен быть в активных авариях с текстом из MC_ReadAxisError.
Пошаговый разбор на объекте без симулятора
Когда симулятор уже «зелёный», а объект падает после Home, не меняйте программу Move первым шагом. Зафиксируйте снимок Online в момент fault: ActualPosition, TargetPosition, MC_ReadStatus (все биты), MC_ReadAxisError.AxisErrorID, MC_Power.Status, биты лимитов и STO.
Шаг 1: MC_Reset, MC_Power Enable, дождаться Standstill без Error. Шаг 2: один MC_Home с логированием. При Done - снова снимок. Если Error появился на Home - читать код привода, не запускать Move.
Шаг 3: если Home чистый, MC_MoveAbsolute на малую величину (1-5 мм или 100 импульсов) в безопасном направлении от концевика. Fault на шаге 3 - лимиты, масштаб, following error, mode привода.
Шаг 4: сравнить конфиг оси на ПЛК с PDF мануала привода: pulses/rev, gear ratio, home mode. Расхождение в одном поле часто объясняет «симулятор ок».
Запишите baseline после успешного цикла на стенде: ErrorID=0, Actual после Home, время цикла EtherCAT. На объекте сравнение с baseline быстрее, чем перебор всех MC-блоков.
Кейс: линейная ось, Home OK, Fault на отъёме 200 мм
Типовой упаковочный объект: линейная ось, референс по концевику, software limit Max = 1500 мм. В симуляторе Max не мешает. На объекте после Home ноль программы совпадает с физическим упором «минус», Move +200 мм проходит, Move к координате 1600 мм - Fault limit.
Причина: Home offset в конфигурации оси сдвинул ноль на 100 мм в сторону плюса, лимит Max не пересчитали. Симулятор использовал старый offset из примера. Исправление: пересчёт Min/Max в engineering units, проверка одного полного хода вручную, обновление констант в HMI для максимальной позиции.
Урок: после любой правки Home offset пересчитывать software limits и максимальные координаты в рецепте, не только в axis config.
Типовые ошибки конфигурации
Копировать axis config из другого механизма.
Длина шага, редуктор, тип Home - другие. Симулятор не знает механику.
Не проверять Error после MC_Home.Done.
Done TRUE не гарантирует отсутствие Error на всех приводах.
Лимиты в мм, масштаб в импульсах устарел.
После замены ремня или шкива без пересчёта.
Отладка только в Simulation.
FAT с реальным приводом - обязательный этап для SoftMotion.
MC_Reset не в программе оператора.
После fault только перезагрузка ПЛК - долгий downtime.
Вопросы с объекта
Home в симуляторе обязателен перед выездом?
Для логики MC - да. Для конфигурации привода - нет, нужен стенд.
Ось Homed, но Move не стартует.
Проверьте Error, MC_Power, разрешение с ПЛК в привод, mode привода.
После MC_Reset снова Fault на Home.
Причина не сброшена - код ошибки привода, механика, лимит.
Несколько осей, fault только на одной.
Сравнить конфиг исправной и проблемной оси в Device tree.
Обновили CODESYS - fault после Home.
Версия SoftMotion, конвертация проекта, retain осей.
Обсуждение