Зовнішні зміщення осей підтримуються під час телеопераційних (світових) переміщень і скоординованих (G-код) рухів. Зсуви зовнішніх осей вмикаються для кожної осі окремо за допомогою налаштувань файлу INI і динамічно контролюються вхідними контактами INI. Інтерфейс INI схожий на той, що використовується для поступального руху колеса. Цей тип інтерфейсу зазвичай реалізується за допомогою ручного генератора імпульсів (mpg), підключеного до компонента INI енкодера, який підраховує імпульси.

1. Налаштування INI-файлу

Для кожної літери осі (L у xyzabcuvw):

[AXIS_L]OFFSET_AV_RATIO = value (керування прискоренням/швидкістю для зовнішніх зміщень)
  1. Допустимі значення: 0 <= значення <= 0,9

  2. Заборонені значення замінюються на 0.1 з повідомленням на стандартний вивід

  3. Значення за замовчуванням: 0 (вимикає зовнішнє зміщення).
    Наслідок: пропущено. [AXIS_L]OFFSET_AV_RATIO вимикає зовнішнє зміщення для осі.

  4. Якщо не дорівнює нулю, OFFSET_AV_RATIO (r) коригує звичайну (планову) максимальну швидкість та прискорення, щоб зберегти обмеження [AXIS_L]:

planning max velocity        = (1-r) * MAX_VELOCITY
external offset velocity     = (  r) * MAX_VELOCITY

planning max acceleration    = (1-r) * MAX_ACCELERATION
external offset acceleration = (  r) * MAX_ACCELERATION

2. Піни HAL

2.1. Штифти HAL для руху по осях

Для кожної літери осі (L у xyzabcuvw)

  1. axis.L.eoffset-enable Input(bit): увімкнути

  2. axis.L.eoffset-scale Input(float): коефіцієнт масштабування

  3. axis.L.eoffset-counts Вхід(s32): вхід до регістра підрахунків

  4. axis.L.eoffset-clear Input(bit): очистити запитуваний зсув

  5. axis.L.eoffset Output(float): поточне зовнішнє зміщення

  6. axis.L.eoffset-request Output(float): запитуваний зовнішній зсув

2.2. Інші контакти HAL для руху

  1. motion.eoffset-active Вихід (біт): застосовано ненульові зовнішні зміщення

  2. motion.eoffset-limited Вихід (біт): рух заборонено через програмне обмеження

3. Застосування

Вхідні контакти HAL осі (enable, scale, counts) аналогічні контактам, що використовуються для джогінгу колеса.

3.1. Обчислення зміщення

У кожному сервоперіоді контакт «axis.L.eoffset-counts» порівнюється з його значенням у попередньому періоді. Збільшення або зменшення (позитивне або негативне дельта) виводу «axis.L.eoffset-counts» множиться на поточне значення виводу «axis.L.eoffset-scale». Цей добуток накопичується у внутрішньому регістрі та експортується до виводу HAL «axis.L.eoffset-request». Регістр накопичення обнуляється при кожному ввімкненні машини.

Запитане значення зміщення використовується для планування руху для зміщення, яке застосовується до координати «L» і представлене контактом HAL «axis.L.eoffset». Запланований рух відповідає виділеним обмеженням швидкості та прискорення і може бути обмежений, якщо чистий рух (зміщення плюс телеоператорне переміщення або скоординований рух) досягає м’якого обмеження для координати «L».

Для багатьох застосувань контакт «axis.L.eoffset-scale» є постійним, а відповідь мережі «axis.L.eoffset-request» на «axis.L.eoffset-counts» еквівалентна добутку накопиченого значення «axis.L.eoffset-counts» та (постійних) значень виводу «axis.L.eoffset-scale».

3.2. Вимкнення/увімкнення машини

Коли машина вимкнена, поточна позиція із зовнішніми зміщеннями зберігається, щоб не було неочікуваного руху під час вимкнення або ввімкнення.

Під час кожного запуску (увімкнення машини) внутрішній регістр лічильників для кожного виводу HAL axis.L.eoffset-counts обнуляється, а відповідний вихідний вивод HAL axis.L.eoffset скидається до нуля.

Іншими словами, зовнішні зміщення визначаються як НУЛЬ при кожному запуску (увімкненні машини) незалежно від значення контактів «axis.L.eoffset-counts». Щоб уникнути плутанини, рекомендується встановлювати всі контакти «axis.L.eoffset-counts» на нуль, коли машина вимкнена.

3.3. М’які обмеження

Зовнішні переміщення з зміщенням осі плануються незалежно з налаштуваннями швидкості та прискорення, що вказані в [AXIS_L]OFFSET_AV_RATIO. Переміщення зі зміщенням не координується з телеоперативними імпульсами та скоординованими (G-код) переміщеннями. Під час телеопераційного переміщення та скоординованого (G-код) руху м’які обмеження осі («[AXIS_L]MIN_LIMIT,MAX_LIMIT») обмежують рух осі.

Коли застосовуються зовнішні зміщення і рух досягає м’якого обмеження (завдяки збільшенню зовнішнього зміщення, телеоперативному переміщенню або скоординованому руху), виводиться сигнал HAL-виводу «motion.eoffset-limited», і значення осі утримується номінально до м’якого обмеження. Цей HAL-вивід може використовуватися пов’язаною логікою HAL для обрізання додаткових значень eoffset або для зупинки машини (наприклад, підключення до «halui.machine.off»). Якщо вісь переміщується в межах м’якої межі, контакт «motion.eoffset-limited» скидається.

При роботі з м’яким обмеженням під час скоординованого руху, який продовжує змінювати заплановане значення осі, вихідний контакт HAL «axis.L.eoffset» буде вказувати поточне зміщення — відстань, необхідну для досягнення обмеження, замість обчисленого запиту на зміщення. Це вказане значення буде змінюватися у міру зміни запланованого значення осі.

Контакт HAL «axis.L.eoffset-request» вказує поточне запитуване зміщення, яке є добутком внутрішнього регістра підрахунку та масштабу eoffset. Як правило, значення виводу «axis.L.eoffset» відстає від значення «axis.L.eoffset-request», оскільки зовнішнє зміщення підлягає обмеженню прискорення. При роботі в режимі м’якого обмеження додаткові оновлення «axis.L.eoffset-counts» продовжуватимуть впливати на запитуване зовнішнє зміщення, що відображається у виводі HAL «axis.L.eoffset-request».

При телеуправлінні з увімкненими зовнішніми зміщеннями та застосованими ненульовими значеннями, досягнення м’якого обмеження зупинить рух у відповідній осі без інтервалу уповільнення. Аналогічно, під час скоординованого руху з увімкненими зовнішніми зміщеннями, досягнення м’якого обмеження зупинить рух без фази уповільнення. У цьому випадку не має значення, чи зміщення дорівнюють нулю.

Коли рух зупиняється без фази уповільнення, можуть бути порушені обмеження прискорення системи, що може призвести до: 1) помилки слідування (та/або удару) для системи сервомотора, 2) втрати кроків для системи крокового двигуна. Загалом рекомендується застосовувати зовнішні зміщення таким чином, щоб уникнути наближення до м’яких обмежень.

3.4. Нотатки

Зовнішні зміщення застосовуються до літер координат осей (xyzabcuvw). Усі з’єднання мають бути виведені в початкове положення, перш ніж будуть враховані зовнішні зміщення осей.

Якщо вивід HAL «axis.L.eoffset-enable» скидається, коли його зміщення не дорівнює нулю, зміщення зберігається. Зміщення можна очистити за допомогою:

  1. перемикач «Вимкнено/Увімкнено машину»

  2. повторна активація виводу ввімкнення та збільшення/зменшення значення виводу HAL axis.L.eoffset-counts для повернення зміщення до нуля.

  3. імпульсація виводу HAL axis.L.eoffset-clear

Зовнішні зміщення призначені для використання з «малими» зміщеннями, що застосовуються в межах м’яких меж.

М’які обмеження дотримуються як для телеопераційного переміщення, так і для скоординованого руху, коли застосовуються зовнішні зміщення. Однак, коли під час скоординованого руху досягається м’яке обмеження, зменшення зовнішнього зміщення, що порушує обмеження, може не віддалити від м’якого обмеження, якщо запланований рух продовжується в тому ж напрямку. Така ситуація може виникнути, оскільки швидкість виправлення зміщення (встановлена параметром «[AXIS_L]OFFSET_AV_RATIO») може бути меншою за протилежну заплановану швидкість руху. У таких випадках призупинення (або зупинка) запланованого скоординованого руху дозволить відійти від м’якого обмеження, коли будуть внесені виправлення у зовнішнє зміщення, що спричиняє порушення.

3.5. УВАГА

Використання зовнішніх зміщень може істотно вплинути на рух машини. Управління зовнішніми зміщеннями за допомогою компонентів і з’єднань HAL, а також будь-яких пов’язаних з ними користувацьких інтерфейсів, повинно бути ретельно розроблено і протестовано перед впровадженням.

4. Пов’язані компоненти HAL

4.1. eoffset_per_angle.comp

Компонент для обчислення зовнішнього зміщення від функції на основі виміряного кута (поворотна координата або шпиндель). Див. сторінку довідки для отримання детальної інформації ($ man eoffset_per_angle).

5. Тестування

Можливість зміщення зовнішньої осі вмикається шляхом додавання налаштування [AXIS_L] для кожної осі-кандидата. Наприклад:

[AXIS_Z]
OFFSET_AV_RATIO = 0.2

Для тестування зручно імітувати інтерфейс джог-колеса за допомогою графічного інтерфейсу sim_pin. Наприклад, у терміналі:

$ sim_pin axis.z.eoffset-enable axis.z.eoffset-scale axis.z.eoffset-counts

Використання зовнішніх зміщень полегшується завдяки відображенню інформації, пов’язаної з поточними зміщеннями: поточне значення eoffset і запитуване значення eoffset, pos-cmd осі та (для машини з ідентичною кінематикою) відповідне pos-cmd з’єднання двигуна і зміщення двигуна. Надана конфігурація sim (див. нижче) демонструє приклад панелі PyVCP для графічного інтерфейсу AXIS.

За відсутності власного дисплея, halshow можна запустити як допоміжну програму з власним списком спостереження.

Приклад налаштувань INI-файлу для імітації з’єднань eoffset контактів HAL та відображення інформації про eoffset для осі z (для тотожної кінематики з z==joint2):

[APPLICATIONS]
APP = sim_pin \
      axis.z.eoffset-enable \
      axis.z.eoffset-scale \
      axis.z.eoffset-counts \
      axis.z.eoffset-clear

APP = halshow --fformat "%0.5f" ./z.halshow

Де знаходиться файл z.halshow (у каталозі конфігурації):

pin+joint.2.motor-pos-cmd
pin+joint.2.motor-offset
pin+axis.z.pos-cmd
pin+axis.z.eoffset
pin+axis.z.eoffset-request
pin+motion.eoffset-limited

6. Приклади

Надані конфігурації моделювання демонструють використання зовнішніх зміщень, щоб забезпечити відправну точку для налаштування користувачем реального обладнання.

Конфігурації симулятора використовують налаштування INI «[HAL]HALFILE = LIB:basic_sim.tcl» для конфігурації всіх стандартних підключень HAL для осей, зазначених у налаштуванні INI «[TRAJ]COORDINATES=». Логіка HAL, необхідна для демонстрації функціональності зовнішнього зміщення, та підключення виводів GUI HAL для панелі PyVCP виконані в окремих файлах HAL. Конфігурація, що не є симуляцією, повинна замінити елемент «LIB:basic_sim.tcl» HALFILEs, відповідний для машини. Надані файли PyVCP (.hal та .xml) можуть бути відправною точкою для інтерфейсів GUI, специфічних для конкретних додатків.

6.1. eoffsets.ini

Конфігурація sim, sim/configs/axis/external_offsets/eoffsets.ini демонструє декартову систему координат XYZ з елементами керування для ввімкнення зовнішніх зміщень на будь-якій осі.

Передбачено дисплеї для відображення всіх важливих значень положення та зміщення.

Графічний інтерфейс sim_pin надає елементи керування для виводів зміщення осей: eoffset-scale та eoffset-counts (через сигнал e:<L>counts), eoffset-clear (через сигнал e:clearall)

Скрипт (eoffsets_monitor.tcl) використовується для встановлення виводів axis.L.counts у нуль під час вимкнення машини.

6.2. jwp_z.ini

Конфігурація симулятора sim/configs/axis/external_offsets/jwp_z.ini демонструє можливість поетапного переміщення під час паузи для однієї координати (Z):

На панелі передбачені світлодіодні індикатори для відображення важливих елементів стану.

Передбачено елементи керування для встановлення коефіцієнта масштабування eoffset та для збільшення/зменшення/очистки лічильників eoffset.

6.3. dynamic_offsets.ini

Цей конфігураційний файл симулятора sim/configs/axis/external_offsets/dynamic_offsets.ini демонструє динамічно застосовувані зміщення шляхом підключення синусоїдальної форми хвилі до входів зовнішнього зміщення координати z.

На панелі передбачені світлодіодні індикатори для відображення важливих елементів стану.

Передбачено елементи керування для зміни налаштувань INI-файлу для максимальної швидкості та максимального прискорення осі Z.

Передбачено елементи керування для налаштування параметрів генератора сигналів.

Запускається застосунок halscope для відображення застосованої форми хвилі, реакції зміщення та реакції на команду двигуна.

Note
Зміни максимального прискорення та максимальної швидкості координати z не підтверджуються під час виконання програми.

6.4. opa.ini (eoffset_per_angle)

Конфігурація opa.ini використовує INI-компонент eoffset_per_angle ($ man eoffset_per_angle) для демонстрації машини XZC з функціональними зміщеннями, обчисленими з координати C (кут) і застосованими до поперечної координати (X). Обчислення зміщення базуються на заданому опорному радіусі, який зазвичай встановлюється програмою (або MDI) командою M68 для керування виводом motion.analog-out-NN.

На панелі передбачені світлодіодні індикатори для відображення важливих елементів стану.

Надаються функції для внутрішніх і зовнішніх багатокутників (nsides >= 3), синусоїдальних і прямокутних хвиль. Частоту функцій можна помножити за допомогою виводу fmul, а амплітуду змінити за допомогою виводу rfrac (частка опорного радіуса).

Передбачено елементи керування для запуску/зупинки зміщених осцилограм та для встановлення типу функції та її параметрів.