HCFA Integration KUKA ПОЛНАЯ ИНСТРУКЦИЯ ПО ИНТЕГРАЦИИ HCFA SV-X5 + KUKA KRC4 (EtherCAT) На основе 3-х технических логов проекта СОДЕРЖАНИЕ Электрическое подключение (Hardware) Настройка драйвера HCFA (Параметры) Распайка кабеля энкодера Настройка EtherCAT в WorkVisual Модификация XML (PDO Mapping) Программирование KRL Решение типовых проблем 1. ЭЛЕКТРИЧЕСКОЕ ПОДКЛЮЧЕНИЕ (Hardware) 1.1. Организация питания (КРИТИЧНО!) Раздельное питание силовой и управляющей части: L1C / L2C (Control Power): Подключить к 220В (Фаза + Ноль) напрямую от автомата питания (ДО контакторов безопасности) Обеспечивает работу логики и связи EtherCAT при E-Stop L1 / L2 (Main Power): Подключить к 220В через контактор безопасности робота ⚠️ ВАЖНО: Драйвер рассчитан только на 220В, НЕ подключать к 3-фазной сети 400В! 1.2. Подключение тормоза ⚠️ ЗАПРЕЩЕНО подключать тормоз напрямую в выход DO драйвера (сгорит транзистор, макс. 50мА)! Правильная схема: Выход DO1 (CN6: Pin 1 DO+ / Pin 6 DO-) → Катушка реле 24В → Контакты реле → Тормоз Настройка драйвера: P04.21 = 6 (Функция Brake Release) 1.3. STO (Safe Torque Off) На разъеме CN2 установить перемычки для деактивации аппаратной блокировки (временное решение для пусконаладки). 2. НАСТРОЙКА ДРАЙВЕРА HCFA (Параметры) 2.1. Программное обеспечение Использовать: HCS-Studio(Cn) V2.13 или HCServoWorks 1.2.9 ⚠️ Новые версии (Sysctrl Studio) этот привод НЕ ВИДЯТ! 2.2. ОБЯЗАТЕЛЬНЫЕ параметры для EtherCAT Базовая конфигурация: P00.01 = 7 // Режим EtherCAT P06.28 = 1 // Отключить концевики P-OT/N-OT (КРИТИЧНО!) P09.13 = H0015 // Единицы: RPM (скорость), ms (ускорение) // или H0005 в зависимости от версии прошивки P00.19 = 0 // Отключить контроль рассогласования (при пусконаладке) ⚠️ КРИТИЧНО - Настройка цифровых входов: Для работы через EtherCAT ОБЯЗАТЕЛЬНО убрать назначение функций концевиков: P04.01 = 0 или другая функция (не 14, не 15) P04.02 = 0 или другая функция (не 14, не 15) P04.03 = 0 или другая функция (не 14, не 15) P04.04 = 0 или другая функция (не 14, не 15) P04.05 = 0 или другая функция (не 14, не 15) P04.06 = 0 или другая функция (не 14, не 15) P04.07 = 0 или другая функция (не 14, не 15) P04.08 = 0 или другая функция (не 14, не 15) Где: 14 = P_OT (положительный концевик) 15 = N_OT (отрицательный концевик) Причина: Если оставить функции 14 или 15, драйвер будет ждать сигналы концевиков и останется в состоянии Switch On Disabled (StatusWord = 592), игнорируя команды включения. 2.3. "Взлом" защиты для стороннего мотора Если используется неродной мотор (например, GSK 150SJTRE): Строго по порядку: P07.21 = 1 (Снятие защиты от записи) Выключить/Включить питание P18.00 = 0000FFFF (HEX) или 65535 (DEC) — код "Универсальный двигатель" Выключить/Включить питание 2.4. Параметры мотора (P18 Group) Заполнить с шильдика мотора: P18.05 = 13.00 // Номинальный ток (A) P18.06 = 10.00 // Номинальный момент (Nm) P18.08 = 2000 // Номинальная скорость (rpm) P18.11 = 4 // Количество пар полюсов (КРИТИЧНО!) // Для моторов 150-й серии = 4 (8 полюсов) // При неправильном значении: рывки, Err.047 P18.19 = 0, 1 или 2 // Протокол энкодера (подбирать) После изменения P18.11 ОБЯЗАТЕЛЬНО: P20.03 = 5 // Поиск начального электрического угла 2.5. Настройка инерции и жесткости Автоматический замер инерции: P20.03 = 1 или 2 // Автоопределение инерции нагрузки После замера система установит значение в P00.04 (обычно 5-15). Жесткость регулятора: P00.02 = 2 // Режим автонастройки (рекомендуется) P00.03 = 10-12 // Жесткость (для высокой скорости) // Низкое значение (5) = мягко, отставание // Высокое значение (10-12) = жестко, точно Скоростное упреждение (если есть отставание): P01.12 = 30-50 // Feedforward (%) 2.6. Обнуление абсолютного энкодера Если нужно установить текущую позицию как "0": Выключить Servo OFF (мотор свободен) Убедиться: P06.47 = 1 (Абсолютный режим) P20.06 = 7 (Команда сброса) Перезагрузить питание Если не работает (Hард-ресет): Выключить привод Вынуть батарейку на 1 минуту Включить → Получить ошибку Err.012 В состоянии ошибки: P20.06 = 7 Перезагрузить питание 3. РАСПАЙКА КАБЕЛЯ ЭНКОДЕРА 3.1. Проблема разъемов Мотор: D-Sub (DB15) Драйвер CN7: IEEE 1394 (FireWire 6-pin) Решение: Кастомный кабель с перепайкой. 3.2. Правильная распиновка Сигнал Пин на CN7 (IEEE1394) Пин на моторе (D-Sub) Цвет (проверить!) +5V 1 2 Красный GND 2 3 Черный Data+ 5 4 Белый Data- 6 5 Желтый Экран Корпус (Shell) Корпус/9 Оплетка 3.3. КРИТИЧЕСКИЕ требования к монтажу 1. НИКАКИХ СКРУТОК! Линии данных работают на частоте 2.5 МГц Скрутка = отражение сигнала + помехи (Err.013) Только пайка, минимальная разделка 2. Экранирование: Экран припаять к металлическому корпусу CN7 вкруговую Или зажать хомутом "Свиной хвостик" = антенна для помех 3. Диагностика энкодера: Замерить ток по линии +5В: норма 30-80 мА 0 мА = обрыв 200 мА = КЗ 3.4. Борьба с помехами (Err.013) Если при включении или вращении вылетает Err.013: Аппаратные меры: Надеть ферритовое кольцо на силовой кабель UVW возле привода Заземлить корпус мотора отдельным проводом на PE привода Программный фильтр (крайняя мера): P06.40 = 10-39 // Фильтр помех энкодера // Заводское: 0 // Увеличивать при Err.013 // ⚠️ Высокое значение = задержка = хуже динамика 4. НАСТРОЙКА ETHERCAT В WORKVISUAL 4.1. Топология сети Драйвер подключить в порт X44 контроллера KRC4: KRC4 (X44) → Beckhoff EK1100 (Coupler) → HCFA SV-X5E Порядок устройств в дереве WorkVisual = физическое подключение. 4.2. ESI-файл (XML) Использовать оригинальный XML от производителя: HCFA_X5B_Servo_Driver2.1.27.1.xml 4.3. Первичная диагностика Через WorkVisual → Диагностика входов: Код 0x7305 = Ошибка связи с энкодером (проверить кабель) После правильной пайки ошибка должна исчезнуть 5. МОДИФИКАЦИЯ XML (PDO MAPPING) 5.1. Проблема В стандартном XML отсутствуют объекты для передачи скорости и ускорения: 0x6081 (Profile Velocity) 0x6083 (Profile Acceleration) 0x6084 (Profile Deceleration) Без них драйвер получает команду на движение со скоростью 0 → мотор стоит. 5.2. Решение — Модификация 1st RxPdo Анализ: 1st RxPdo (#x1600) имеет rw Нет флага Fixed="true" → Драйвер поддерживает динамическую реконфигурацию Правки в XML: Найти секцию и добавить: xml #x6081 0 32 Profile Velocity UDINT #x6083 0 32 Profile Acceleration UDINT #x6084 0 32 Profile Deceleration UDINT Найти секцию и добавить соответствующие Entry. После импорта нового XML и компиляции → переменные появятся в WorkVisual. 5.3. ⚠️ Что НЕ работает Попытка 1 (Неудачная) — 5th PDO: 5-й набор помечен Fixed="true" (жестко зашит) Изменение размера → потеря связи Попытка 2 (Неудачная) — Target Velocity: Существует в 5-м наборе Работает только в режиме скорости (Mode 3) В режиме позиционирования (Mode 1) игнорируется 6. ПРОГРАММИРОВАНИЕ KRL 6.1. Конфигурация ($CONFIG.DAT) Создать SIGNAL для объединения битов: krl SIGNAL do_HCFA_ControlWord $OUT[1] TO $OUT[16] ; UINT SIGNAL do_HCFA_TargetPos $OUT[17] TO $OUT[48] ; DINT SIGNAL do_HCFA_ProfileVel $OUT[49] TO $OUT[80] ; UDINT SIGNAL do_HCFA_ProfileAcc $OUT[81] TO $OUT[112] ; UDINT SIGNAL di_HCFA_StatusWord $IN[1] TO $IN[16] ; UINT SIGNAL di_HCFA_ActPos $IN[17] TO $IN[48] ; DINT SIGNAL di_HCFA_OpMode $IN[49] TO $IN[56] ; INT 6.2. Алгоритм включения (Servo ON) Автомат состояний CiA 402: krl DEF HCFA_ServoON() ; Проверка текущего статуса INT status status = di_HCFA_StatusWord ; Если есть ошибка (Bit 3 = 1) IF (status B_AND 'H0008') == 'H0008' THEN ; Fault Reset do_HCFA_ControlWord = 128 ; Бит 7 WAIT SEC 0.2 do_HCFA_ControlWord = 0 WAIT SEC 0.2 ENDIF ; State Machine: Shutdown → Switch On → Enable Operation ; 1. Shutdown (если не в Ready to Switch On) IF (status B_AND 'H006F') <> 'H0021' THEN do_HCFA_ControlWord = 6 WAIT FOR (di_HCFA_StatusWord B_AND 'H006F') == 'H0021' ; Ready to Switch On ENDIF ; 2. Switch On do_HCFA_ControlWord = 7 WAIT FOR (di_HCFA_StatusWord B_AND 'H006F') == 'H0023' ; Switched On ; 3. Enable Operation do_HCFA_ControlWord = 15 WAIT FOR (di_HCFA_StatusWord B_AND 'H006F') == 'H0027' ; Operation Enabled END DEF HCFA_ServoOFF() do_HCFA_ControlWord = 6 ; Shutdown (отключает момент) END 6.3. Функция движения (Move) Режим: Profile Position (Mode 1) — Абсолютное позиционирование krl DEF HCFA_MoveToAngle(angle :REAL) ; Константы INT encoder_resolution = 131072 ; 17-bit энкодер REAL gear_ratio = 100.0 ; Редуктор 1:100 ; Расчет импульсов INT target_pulses target_pulses = (angle / 360.0) * encoder_resolution * gear_ratio ; === SMART CHECK & AUTO RECOVERY === INT status status = di_HCFA_StatusWord ; 1. Проверка на ошибку IF (status B_AND 'H0008') == 'H0008' THEN ; Fault Reset + Включение do_HCFA_ControlWord = 128 WAIT SEC 0.2 do_HCFA_ControlWord = 0 WAIT SEC 0.2 HCFA_ServoON() ENDIF ; 2. Проверка включения IF (status B_AND 'H006F') <> 'H0027' THEN HCFA_ServoON() ENDIF ; 3. Проверка режима (OpMode должен быть 1) IF di_HCFA_OpMode <> 1 THEN do_HCFA_OpMode = 0 ; Сброс WAIT SEC 0.1 do_HCFA_OpMode = 1 ; Установка Profile Position WAIT SEC 0.1 ENDIF ; 4. Сброс зависшего бита подтверждения (Bit 12) IF (status B_AND 'H1000') == 'H1000' THEN do_HCFA_ControlWord = 15 ; Сброс в базовое состояние WAIT SEC 0.1 ENDIF ; === ЗАПИСЬ ПАРАМЕТРОВ ДВИЖЕНИЯ === do_HCFA_ProfileVel = 500 ; Скорость: 500 rpm do_HCFA_ProfileAcc = 100 ; Ускорение: 100 ms do_HCFA_TargetPos = target_pulses ; === HANDSHAKE (Двухступенчатый старт) === ; Шаг 1: Подготовка (Absolute, New Set-point) do_HCFA_ControlWord = 47 ; Биты: 0,1,2,3,4,5 (без Change Immediately) WAIT SEC 0.05 ; Шаг 2: Старт (Rising Edge бита 4) do_HCFA_ControlWord = 63 ; Биты: 0,1,2,3,4,5,6 (с Change Immediately) ; Ждем подтверждения (Bit 12 = Set-point Acknowledge) WAIT FOR (di_HCFA_StatusWord B_AND 'H1000') == 'H1000' TIMEOUT 2 ; Сброс бита New Set-point do_HCFA_ControlWord = 15 ; Ждем начала движения (Bit 10 = Target Reached сбросится) WAIT FOR (di_HCFA_StatusWord B_AND 'H0400') == 'H0000' TIMEOUT 2 ; Ждем завершения (Bit 10 = Target Reached установится) WAIT FOR (di_HCFA_StatusWord B_AND 'H0400') == 'H0400' ; Финиш: Отключение момента do_HCFA_ControlWord = 6 ; Shutdown END 6.4. Расшифровка ControlWord Значение Биты Команда 6 0110 Shutdown (переход в Ready to Switch On) 7 0111 Switch On 15 1111 Enable Operation (базовое рабочее состояние) 47 0010 1111 Absolute + New Set-point (подготовка) 63 0011 1111 + Change Immediately (старт по Rising Edge) 128 1000 0000 Fault Reset (сброс ошибки) 6.5. Расшифровка StatusWord (ключевые биты) Бит Маска Значение 3 0x0008 Fault (есть ошибка) 5 0x0020 Quick Stop (0 = активна блокировка) 10 0x0400 Target Reached 12 0x1000 Set-point Acknowledge Состояния (биты 0-6): 0x0021 (33): Ready to Switch On 0x0023 (35): Switched On 0x0027 (39): Operation Enabled 0x0250 (592): Switch On Disabled (блокировка) 0x0637 (1591): Operation Enabled + Ready + Target Reached 7. РЕШЕНИЕ ТИПОВЫХ ПРОБЛЕМ 7.1. Драйвер не включается (StatusWord = 592) Симптомы: Команды включения игнорируются. Причины: Не сняты функции концевиков (P04.01...P04.08 содержат 14 или 15) Не установлен P06.28 = 1 Решение: См. раздел 2.2 (обязательные параметры). 7.2. Err.007 (Нет связи с энкодером) Причины: Неправильная распайка кабеля Обрыв/КЗ в линиях Data+/Data- Не подключен +5V или GND Неправильный протокол (P18.19) Диагностика: Замерить ток по +5V: должен быть 30-80 мА Проверить распайку по таблице из раздела 3.2 7.3. Err.013 (Помехи энкодера) Причины: Скрутки в линиях Data+/Data- Плохое экранирование Помехи от силового кабеля Решение: Перепаять кабель (без скруток) Экран припаять к корпусу CN7 вкруговую Ферритовое кольцо на силовой кабель UVW Заземлить корпус мотора Крайняя мера: P06.40 = 10-39 7.4. Err.043 (Position Deviation Too Large) Причины: Низкая жесткость регулятора (P00.03) Неправильная инерция (P00.04) Слишком жесткий допуск (P00.19) Решение: Выполнить автозамер инерции: P20.03 = 1 Увеличить жесткость: P00.03 = 10-12 На этапе пусконаладки: P00.19 = 0 При отставании: P01.12 = 30-50 (Feedforward) 7.5. Err.047 (Перегрузка) Причины: Неправильное количество пар полюсов (P18.11) Неправильный ток/момент мотора Механическая перегрузка Решение: Проверить P18.11 = 4 (для моторов 150-й серии) После изменения: P20.03 = 5 Проверить параметры мотора (P18.05, P18.06, P18.08) 7.6. Мотор стоит на месте (нет движения) Причины: Отсутствуют объекты 0x6081/0x6083 в PDO Неправильные единицы измерения (P09.13) Скорость = 0 Решение: Модифицировать XML (раздел 5) Установить P09.13 = H0015 (RPM/ms) В коде задать ProfileVel > 0 (например, 500) 7.7. Зависание на WAIT FOR Bit 12 Причины: Бит подтверждения завис с прошлого раза Драйвер не в режиме позиционирования (Mode <> 1) Решение: Перед движением: сброс OpMode = 0 → OpMode = 1 Если Bit 12 == 1 перед стартом → сброс ControlWord = 15 7.8. Очень медленное движение (незаметное глазу) Причина: P09.13 = H1115 (единицы измерения = импульсы/сек) Решение: P09.13 = H0015 (RPM/ms) 7.9. Поворот на неправильный угол Причины: Не учтен редуктор Неправильное разрешение энкодера Решение: Определить передаточное число экспериментально В формуле расчета: pulses = (angle / 360) * encoder_resolution * gear_ratio ФИНАЛЬНЫЙ ЧЕКЛИСТ ПЕРЕД ЗАПУСКОМ Раздельное питание L1C/L2C (220В напрямую) и L1/L2 (220В через контактор) Кабель энкодера: пайка по таблице, экран к корпусу, без скруток Диагностика энкодера: ток 30-80 мА P00.01 = 7 (EtherCAT) P06.28 = 1 (Игнорировать концевики) P04.01...P04.08: Все значения ≠ 14 и ≠ 15 P09.13 = H0015 (RPM/ms) P18.11 = 4 (Пары полюсов для 150-й серии) P20.03 = 5 (Поиск угла) после изменения полюсов P20.03 = 1 (Автозамер инерции) P00.03 = 10-12 (Жесткость) XML модифицирован (объекты 0x6081, 0x6083 добавлены в 1st RxPdo) Топология EtherCAT в WorkVisual = физическое подключение Код KRL: включение через Shutdown → Switch On → Enable Operation Код KRL: движение с ProfileVel > 0 и двухступенчатым стартом (47 → 63) Тестовое движение на малой скорости (50-100 rpm) СИСТЕМА ГОТОВА К РАБОТЕ! Эта инструкция основана на реальном опыте пусконаладки и содержит все критические нюансы для успешной интеграции HCFA + KUKA через EtherCAT.