1. TWOPASS
У цьому розділі описано опцію, що дозволяє використовувати кілька команд завантаження для декількох екземплярів одного і того ж компонента в різних місцях файлу або в різних файлах. Внутрішньо це вимагає дворазового читання файлу HAL, звідси і назва TWOPASS. Підтримувана з версії LinuxCNC 2.5, обробка TWOPASS конфігураційних файлів LinuxCNC сприяє їх модуляризації та читабельності. Нагадаємо, що конфігураційні файли LinuxCNC вказуються у файлі INI LinuxCNC як [HAL]HALFILE=filename.
Зазвичай набір одного або декількох конфігураційних файлів LinuxCNC повинен використовувати єдиний рядок loadrt для завантаження компонента реального часу, який може створювати кілька екземплярів компонента. Наприклад, якщо ви використовуєте компонент AND-елемента з двома входами (and2) у трьох різних місцях вашої конфігурації, вам потрібно буде десь вказати один рядок:
and2.0, and2.1, and2.2.loadrt and2 count=3
Конфігурації легше читаються, якщо вказати опцію names= для компонентів, де вона підтримується, наприклад:
aa, ab, ac.loadrt and2 names=aa,ab,ac
Відстеження компонентів та їхніх назв може бути проблемою з точки зору обслуговування, оскільки при додаванні (або видаленні) компонента необхідно знайти та оновити єдину директиву loadrt, що застосовується до цього компонента.
[HAL], де "anystring" може бути будь-яким ненульовим рядком.[HAL] TWOPASS = anystring
З увімкненим TWOPASS ви можете мати кілька специфікацій, таких як:
loadrt and2 names=aa ... loadrt and2 names=ab,ac ... loadrt and2 names=ad
Ці команди можуть з’являтися в різних HAL-файлах. HAL-файли обробляються в порядку їх появи в INI-файлі, у кількох призначеннях HALFILE.
Опцію TWOPASS можна вказати разом із опціями для додавання виводу для налагодження (verbose) та для запобігання видаленню тимчасових файлів (nodelete). Опції розділяються комами.
[HAL] TWOPASS = on,verbose,nodelete
При обробці TWOPASS спочатку зчитуються всі файли [HAL]HALFILES і накопичуються всі входження директив loadrt для кожного модуля. Компоненти, що не працюють у режимі реального часу (loadusr), завантажуються послідовно, але в початковому проході не виконуються інші команди LinuxCNC.
|
Note
|
Компоненти, що не працюють у реальному часі, повинні використовувати параметр очікування (-W), щоб переконатися, що компонент готовий до виконання інших команд. |
Після початкового проходу модулі реального часу завантажуються (loadrt) автоматично
-
з числом, що дорівнює загальній кількості, при використанні опції count= або
-
з усіма окремими іменами, вказаними під час використання опції 'names=".
Потім виконується другий прохід для виконання всіх інших інструкцій LinuxCNC, зазначених у HALFILES. Команди addf, які пов’язують функції компонента з виконанням потоку, виконуються в порядку появи з іншими командами під час цього другого проходу.
Хоча ви можете використовувати параметри count= або names=, вони взаємовиключні — для даного модуля можна вказати лише один тип.
Обробка TWOPASS є найбільш ефективною при використанні опції «names=». Ця опція дозволяє надавати унікальні імена, які є мнемонічними або іншим чином пов’язані з конфігурацією. Наприклад, якщо ви використовуєте похідний компонент для оцінки швидкостей і прискорень на кожній координаті (x, y, z), використання методу «count=» дасть незрозумілі імена компонентів, такі як ddt.0, ddt.1, ddt.2 тощо.
Або ж можна скористатися опцією names=", наприклад:
loadrt ddt names=xvel,yvel,zvel ... loadrt ddt names=xaccel,yaccel,zaccel
призводить до компонентів із доречними назвами xvel, yvel, zvel, xaccel, yaccel, zaccel.
Багато компіляторів, що постачаються з дистрибутивом, створені за допомогою утиліти halcompile і підтримують опцію names=. До них відносяться загальні логічні компоненти, які є сполучною ланкою багатьох конфігурацій LinuxCNC.
Створені користувачами компіляції, які використовують утиліту halcompile, також автоматично підтримують опцію names=. Окрім компіляцій, створених за допомогою утиліти halcompile, опцію names= підтримують також багато інших компіляцій. До компіляцій, що підтримують опцію names=, належать: at_pid, encoder, encoder_ratio, pid, siggen та sim_encoder.
Двоступенева обробка відбувається до завантаження графічного інтерфейсу користувача. При використанні [HAL]POSTGUI_HALFILE зручно розмістити всі декларації [HAL]POSTGUI_HALFILE loadrt для необхідних компонентів у попередньо завантаженому файлі HAL.
[HAL] TWOPASS = on HALFILE = core_sim.hal HALFILE = sim_spindle_encoder.hal HALFILE = axis_manualtoolchange.hal HALFILE = simulated_home.hal HALFILE = load_for_postgui.hal <- рядки loadrt для компонентів у postgui.hal POSTGUI_HALFILE = postgui.hal HALUI = halui
2. Графічний інтерфейс користувача після публікації
Деякі графічні інтерфейси підтримують файли HAL, які обробляються після запуску графічного інтерфейсу для підключення контактів LinuxCNC, створених графічним інтерфейсом. При використанні файлу HAL postgui з обробкою TWOPASS включіть всі елементи loadrt для компонентів, доданих файлами HAL postgui, в окремий файл HAL, який обробляється перед графічним інтерфейсом. Команди addf також можуть бути включені в файл.
[HAL] TWOPASS = on HALFILE = file_1.hal ... HALFILE = file_n.hal HALFILE = file_with_all_loads_for_postgui.hal ... POSTGUI_HALFILE = the_postgui_file.hal
3. Виключення файлів .hal
Обробка TWOPASS перетворює файли «.hal» в еквівалентні файли «.tcl» і використовує haltcl для пошуку команд loadrt і addf з метою накопичення та консолідації їх використання. Очікуються параметри Loadrt, які відповідають простим параметрам «names=» (або «count=»), що приймаються генератором компонентів HAL («halcompile»). Більш складні параметри, що містяться в спеціалізованих компонентах LinuxCNC, можуть оброблятися некоректно.
Файл «.hal» можна виключити з обробки TWOPASS, включивши магічну коментарну рядок в будь-якому місці файлу «.hal». Магічна коментарна рядок повинна починатися з рядка: #NOTWOPASS. Файли, вказані з цією магічною коментарною рядком, обробляються halcmd з використанням опцій -k (продовжувати при помилці) і -v (детальний вивід).
Це положення про виключення може бути використане для ізоляції проблем або для завантаження будь-якого спеціального компонента LinuxCNC, який не потребує або не отримує переваг від обробки TWOPASS.
Зазвичай, порядок loadrt компонентів реального часу не є критичним, але порядок loadrt для спеціальних компонентів можна забезпечити, помістивши такі директиви loadrt у виключений файл.
|
Note
|
Хоча порядок директив loadrt зазвичай не є критичним, порядок директив addf часто дуже важливий для належної роботи компонентів сервоциклу. |
$ cat twopass_excluded.hal
# Наступний магічний коментар призводить до того, що цей файл
# буде виключено з двопрохідної обробки:
# NOTWOPASS
# компонент налагодження зі складними опціями:
loadrt mycomponent parm1="abc def" parm2=ghi
show pin mycomponent
# замовлення спеціальних компонентів
loadrt component_1
loadrt component_2
|
Note
|
Регістр та пробіли в магічному коментарі ігноруються. Завантаження компонентів, які використовують параметри names= або count= (зазвичай створюються за допомогою halcompile), не повинно використовуватися у виключених файлах, оскільки це усуне переваги обробки TWOPASS. Команди LinuxCNC, які створюють сигнали (net), та команди, які встановлюють порядок виконання (addf), не повинні розміщуватися у виключених файлах. Це особливо стосується команд addf, оскільки їх порядок може бути важливим. |
4. Приклади
Приклади використання TWOPASS для симулятора наведено в каталогах:
configs/sim/axis/twopass/
configs/sim/axis/simtcl/