Skip to main content

HCFA Integration KUKA

ПОЛНАЯ ИНСТРУКЦИЯ ПО ИНТЕГРАЦИИ HCFA SV-X5 + KUKA KRC4 (EtherCAT)

На основе 3-х технических логов проекта


СОДЕРЖАНИЕ

  1. Электрическое подключение (Hardware)
  2. Настройка драйвера HCFA (Параметры)
  3. Распайка кабеля энкодера
  4. Настройка EtherCAT в WorkVisual
  5. Модификация XML (PDO Mapping)
  6. Программирование KRL
  7. Решение типовых проблем

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):

Строго по порядку:

  1. P07.21 = 1 (Снятие защиты от записи)
  2. Выключить/Включить питание
  3. P18.00 = 0000FFFF (HEX) или 65535 (DEC) — код "Универсальный двигатель"
  4. Выключить/Включить питание

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":

  1. Выключить Servo OFF (мотор свободен)
  2. Убедиться: P06.47 = 1 (Абсолютный режим)
  3. P20.06 = 7 (Команда сброса)
  4. Перезагрузить питание

Если не работает (Hард-ресет):

  1. Выключить привод
  2. Вынуть батарейку на 1 минуту
  3. Включить → Получить ошибку Err.012
  4. В состоянии ошибки: P20.06 = 7
  5. Перезагрузить питание

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:

Аппаратные меры:

  1. Надеть ферритовое кольцо на силовой кабель UVW возле привода
  2. Заземлить корпус мотора отдельным проводом на 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) имеет <Access>rw</Access>
  • Нет флага Fixed="true"
  • → Драйвер поддерживает динамическую реконфигурацию

Правки в XML:

Найти секцию <Object Index="1600"> и добавить:



xml
<Entry>
  <Index>#x6081</Index>
  <SubIndex>0</SubIndex>
  <BitLen>32</BitLen>
  <Name>Profile Velocity</Name>
  <DataType>UDINT</DataType>
</Entry>
<Entry>
  <Index>#x6083</Index>
  <SubIndex>0</SubIndex>
  <BitLen>32</BitLen>
  <Name>Profile Acceleration</Name>
  <DataType>UDINT</DataType>
</Entry>
<Entry>
  <Index>#x6084</Index>
  <SubIndex>0</SubIndex>
  <BitLen>32</BitLen>
  <Name>Profile Deceleration</Name>
  <DataType>UDINT</DataType>
</Entry>

Найти секцию <RxPdo Index="#x1600"> и добавить соответствующие 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)

Симптомы: Команды включения игнорируются.

Причины:

  1. Не сняты функции концевиков (P04.01...P04.08 содержат 14 или 15)
  2. Не установлен P06.28 = 1

Решение: См. раздел 2.2 (обязательные параметры).

7.2. Err.007 (Нет связи с энкодером)

Причины:

  1. Неправильная распайка кабеля
  2. Обрыв/КЗ в линиях Data+/Data-
  3. Не подключен +5V или GND
  4. Неправильный протокол (P18.19)

Диагностика:

  • Замерить ток по +5V: должен быть 30-80 мА
  • Проверить распайку по таблице из раздела 3.2

7.3. Err.013 (Помехи энкодера)

Причины:

  1. Скрутки в линиях Data+/Data-
  2. Плохое экранирование
  3. Помехи от силового кабеля

Решение:

  1. Перепаять кабель (без скруток)
  2. Экран припаять к корпусу CN7 вкруговую
  3. Ферритовое кольцо на силовой кабель UVW
  4. Заземлить корпус мотора
  5. Крайняя мера: P06.40 = 10-39

7.4. Err.043 (Position Deviation Too Large)

Причины:

  1. Низкая жесткость регулятора (P00.03)
  2. Неправильная инерция (P00.04)
  3. Слишком жесткий допуск (P00.19)

Решение:

  1. Выполнить автозамер инерции: P20.03 = 1
  2. Увеличить жесткость: P00.03 = 10-12
  3. На этапе пусконаладки: P00.19 = 0
  4. При отставании: P01.12 = 30-50 (Feedforward)

7.5. Err.047 (Перегрузка)

Причины:

  1. Неправильное количество пар полюсов (P18.11)
  2. Неправильный ток/момент мотора
  3. Механическая перегрузка

Решение:

  1. Проверить P18.11 = 4 (для моторов 150-й серии)
  2. После изменения: P20.03 = 5
  3. Проверить параметры мотора (P18.05, P18.06, P18.08)

7.6. Мотор стоит на месте (нет движения)

Причины:

  1. Отсутствуют объекты 0x6081/0x6083 в PDO
  2. Неправильные единицы измерения (P09.13)
  3. Скорость = 0

Решение:

  1. Модифицировать XML (раздел 5)
  2. Установить P09.13 = H0015 (RPM/ms)
  3. В коде задать ProfileVel > 0 (например, 500)

7.7. Зависание на WAIT FOR Bit 12

Причины:

  1. Бит подтверждения завис с прошлого раза
  2. Драйвер не в режиме позиционирования (Mode <> 1)

Решение:

  1. Перед движением: сброс OpMode = 0 → OpMode = 1
  2. Если Bit 12 == 1 перед стартом → сброс ControlWord = 15

7.8. Очень медленное движение (незаметное глазу)

Причина: P09.13 = H1115 (единицы измерения = импульсы/сек)

Решение: P09.13 = H0015 (RPM/ms)

7.9. Поворот на неправильный угол

Причины:

  1. Не учтен редуктор
  2. Неправильное разрешение энкодера

Решение:

  1. Определить передаточное число экспериментально
  2. В формуле расчета: 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.