Усі ці приклади передбачають, що ви починаєте з конфігурації на основі 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 були підключені до одного світлодіода.
<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>
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, вам в основному потрібно
-
завантажити компонент hal_manualtoolchange,
-
потім надішліть iocontrol tool change до hal_manualtoolchange change та
-
надішліть 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. Обчисліть швидкість
У цьому прикладі використовуються функції «ddt», «mult2» та «abs» для обчислення швидкості однієї осі. Докладнішу інформацію про компоненти реального часу див. у довідкових сторінках або списку компонентів HAL (Компоненти HAL).
Перше, що потрібно зробити, це перевірити конфігурацію, щоб переконатися, що ви не використовуєте жодних компонентів реального часу. Для цього відкрийте вікно 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.
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