Усі ці приклади передбачають, що ви починаєте з конфігурації на основі StepConf і маєте два потоки «base-thread» та «servo-thread». Майстер StepConf створить порожні файли custom.hal та custom_postgui.hal. Файл custom.hal буде завантажено після файлу HAL конфігурації, а файл custom_postgui.hal — після завантаження графічного інтерфейсу користувача.

1. Підключення двох виходів

Щоб підключити два виходи до входу, можна використовувати компонент or2. Компонент or2 працює таким чином: якщо один із входів or2 увімкнений, то вихід or2 увімкнений. Якщо жоден із входів or2 не увімкнений, вихід or2 вимкнений.

Наприклад, щоб дві кнопки PyVCP були підключені до одного світлодіода.

Файл .xml для вказівки PyVCP підготувати графічний інтерфейс користувача з двома кнопками (з назвами "button-1" та "button-2") та світлодіодом (з назвою "led-1").
<pyvcp>
  <button>
    <halpin>"button-1"</halpin>
    <text>"Button 1"</text>
  </button>

  <button>
    <halpin>"button-2"</halpin>
    <text>"Button 2"</text>
  </button>

  <led>
    <halpin>"led-1"</halpin>
    <size>50</size>
    <on_color>"green"</on_color>
    <off_color>"red"</off_color>
  </led>
</pyvcp>
Файл postgui.hal, який зчитується після налаштування графічного інтерфейсу та готовності портів до прийняття логіки, описаної в HAL.
loadrt or2
addf or2.0 servo-thread
net button-1 or2.0.in0 <= pyvcp.button-1
net button-2 or2.0.in1 <= pyvcp.button-2
net led-1 pyvcp.led-1 <= or2.0.out

Коли ви запускаєте цей приклад у симуляторі осей, створеному за допомогою майстра StepConf, ви можете відкрити термінал і переглянути контакти, створені за допомогою loadrt or2, ввівши halcmd show pin or2 у терміналі.

Запуск halcmd у командному рядку UNIX для показу виводів, створених за допомогою модуля or2.
$ halcmd show pin or2
Виводи компонентів:
Owner   Type  Dir         Value  Name
    22  bit   IN          FALSE  or2.0.in0 <== button-1
    22  bit   IN          FALSE  or2.0.in1 <== button-2
    22  bit   OUT         FALSE  or2.0.out ==> led-1

З команди HAL show pin or2 видно, що контакт button-1 підключений до контакту or2.0.in0. Зі стрілки напрямку видно, що кнопка є виходом, а or2.0.in0 — входом. Вихід з or2 підключений до входу світлодіода.

2. Ручна зміна інструменту

У цьому прикладі передбачається, що ви створюєте власну конфігурацію і бажаєте додати вікно HAL Manual Toolchange (Ручна зміна інструменту HAL). HAL Manual Toolchange в першу чергу корисний, якщо у вас є попередньо налаштовані інструменти і ви зберігаєте зміщення в таблиці інструментів. Якщо вам потрібно торкатися кожного інструменту при зміні, то найкраще просто розділити ваш G-код. Щоб використовувати вікно HAL Manual Toolchange, вам в основному потрібно

  1. завантажити компонент hal_manualtoolchange,

  2. потім надішліть iocontrol tool change до hal_manualtoolchange change та

  3. надішліть hal_manualtoolchange changed назад до iocontrol tool changed.

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

Це приклад ручної зміни інструменту «за допомогою» компонента HAL Manual Toolchange:

loadusr -W hal_manualtoolchange
net tool-change iocontrol.0.tool-change => hal_manualtoolchange.change
net tool-changed iocontrol.0.tool-changed <= hal_manualtoolchange.changed
net external-tool-changed hal_manualtoolchange.change_button <= parport.0.pin-12-in
net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared

Це приклад ручної зміни інструменту «без» компонента ручної зміни інструменту HAL:

net tool-number <= iocontrol.0.tool-prep-number
net tool-change-loopback iocontrol.0.tool-change => iocontrol.0.tool-changed
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared

3. Обчисліть швидкість

This example uses ddt, mult2 and abs to compute the velocity of a single axis. For more information on the real time components see the man pages or the HAL Components List ([sec:hal-components]).

Перше, що потрібно зробити, це перевірити конфігурацію, щоб переконатися, що ви не використовуєте жодних компонентів реального часу. Для цього відкрийте вікно HAL Configuration (Конфігурація HAL) і знайдіть компоненти в розділі pin (контакти). Потім знайдіть файл HAL, в який вони завантажуються, збільште кількість і налаштуйте екземпляр на правильне значення. Додайте наступне до файлу custom.hal.

Завантажте компоненти реального часу.

loadrt ddt count=1
loadrt mult2 count=1
loadrt abs count=1

Додайте функції до потоку, щоб він оновлювався.

addf ddt.0 servo-thread
addf mult2.0 servo-thread
addf abs.0 servo-thread

Встановіть зв’язки.

setp mult2.in1 60
net xpos-cmd ddt.0.in
net X-IPS mult2.0.in0 <= ddt.0.out
net X-ABS abs.0.in <= mult2.0.out
net X-IPM abs.0.out

В цьому останньому розділі ми встановлюємо mult2.0.in1 на 60, щоб конвертувати дюйми за секунду в дюйми за хвилину (IPM), які ми отримуємо з ddt.0.out.

xpos-cmd надсилає задану позицію до ddt.0.in. ddt обчислює похідну зміни вхідних даних.

Значення ddt2.0.out множиться на 60, щоб отримати IPM.

mult2.0.out надсилається до abs для отримання абсолютного значення.

На наступному рисунку показано результат, коли вісь X рухається зі швидкістю 15 дюймів за хвилину в мінусовому напрямку. Зверніть увагу, що ми можемо отримати абсолютне значення або з виводу abs.0.out, або з сигналу X-IPM.

HAL: Приклад швидкості
Figure 1. HAL: Приклад швидкості

4. Деталі плавного запуску

У цьому прикладі показано, як компоненти HAL «lowpass», «limit2» або «limit3» можна використовувати для обмеження швидкості зміни сигналу.

У цьому прикладі ми маємо сервомотор, що приводить в рух шпиндель токарного верстата. Якщо ми просто використаємо задані швидкості шпинделя на сервоприводі, він спробує перейти від поточної швидкості до заданої швидкості якомога швидше. Це може спричинити проблему або пошкодити привід. Щоб уповільнити швидкість зміни, ми можемо надіслати spindle.N.speed-out через обмежувач перед PID, щоб значення команди PID повільніше змінювалося на нові налаштування.

Три вбудовані компоненти, що обмежують сигнал:

  • limit2 обмежує діапазон та першу похідну сигналу.

  • «limit3» обмежує діапазон, першу та другу похідні сигналу.

  • «Низькочастотний» використовує експоненціально зважену ковзну середню для відстеження вхідного сигналу.

Щоб знайти більше інформації про ці компоненти HAL, перегляньте сторінки довідки (man).

Помістіть наступний код у текстовий файл під назвою softstart.hal. Якщо ви не знайомі з Linux, помістіть файл у свій домашній каталог.

loadrt threads period1=1000000 name1=thread
loadrt siggen
loadrt lowpass
loadrt limit2
loadrt limit3
net square siggen.0.square => lowpass.0.in limit2.0.in limit3.0.in
net lowpass <= lowpass.0.out
net limit2 <= limit2.0.out
net limit3 <= limit3.0.out
setp siggen.0.frequency .1
setp lowpass.0.gain .01
setp limit2.0.maxv 2
setp limit3.0.maxv 2
setp limit3.0.maxa 10
addf siggen.0.update thread
addf lowpass.0 thread
addf limit2.0 thread
addf limit3.0 thread
start
loadusr halscope

Відкрийте вікно терміналу та запустіть файл за допомогою наступної команди.

halrun -I softstart.hal

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

Далі потрібно додати сигнали до каналів. Клацніть на каналі 1, потім виберіть «квадрат» на вкладці «Сигнали». Повторіть для каналів 2-4 та додайте низькочастотний сигнал, limit2 та limit3.

Далі, щоб налаштувати сигнал запуску, натисніть кнопку «Джерело немає» та виберіть квадрат. Кнопка зміниться на «Джерело каналу 1».

Далі натисніть кнопку «Одинарний» у полі «Режим виконання». Це розпочне виконання, і після його завершення ви побачите свої траси.

Щоб розділити сигнали для кращого бачення, клацніть на каналі, а потім скористайтеся повзунком «Позиція» у полі «Вертикальна», щоб встановити положення.

Знімок екрана м’якого запуску

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

setp lowpass.0.gain *.01

Після зміни налаштування знову запустіть осцилограф, щоб побачити зміни.

Коли ви закінчите, введіть «exit» у вікні терміналу, щоб закрити halrun і закрити halscope. Не закривайте вікно терміналу, коли halrun працює, оскільки це може залишити в пам’яті деякі елементи, які можуть перешкоджати завантаженню LinuxCNC.

Для отримання додаткової інформації про Halscope дивіться посібник з HAL та навчальний посібник.

5. Автономний HAL

У деяких випадках може знадобитися запустити екран GladeVCP тільки з HAL. Наприклад, уявіть, що у вас є пристрій з кроковим приводом, для якого потрібно тільки запустити кроковий двигун. Для вашої програми достатньо простого інтерфейсу «Пуск/Стоп», тому немає необхідності завантажувати та налаштовувати повноцінну програму CNC.

У наступному прикладі ми створили просту панель GladeVCP з одним кроковим механізмом.

Базовий синтаксис
# завантажте графічний інтерфейс winder.glade та назвіть його winder
loadusr -Wn winder gladevcp -c winder -u handler.py winder.glade

# завантаження компонентів реального часу
loadrt threads name1=fast period1=50000 fp1=0 name2=slow period2=1000000
loadrt stepgen step_type=0 ctrl_type=v
loadrt hal_parport cfg="0x378 out"

# додавати функції до потоків
addf stepgen.make-pulses fast
addf stepgen.update-freq slow
addf stepgen.capture-position slow
addf parport.0.read fast
addf parport.0.write fast

# створювати HAL-з'єднання
net winder-step parport.0.pin-02-out <= stepgen.0.step
net winder-dir parport.0.pin-03-out <= stepgen.0.dir
net run-stepgen stepgen.0.enable <= winder.start_button

# почати теми
start

# закоментуйте наступні рядки під час тестування та використовуйте інтерактивну
# опцію halrun -I -f start.hal, щоб мати змогу показувати піни тощо.

# зачекайте, поки завершиться робота графічного інтерфейсу GladeVCP з назвою winder
waitusr winder

# зупинити потоки HAL
stop

# вивантажити всі компоненти HAL перед виходом
unloadrt all