1. Огляд

Метою QtVCP є надання інфраструктури для підтримки створення екранів та панелей VCP для LinuxCNC.

Надаючи різноманітний набір віджетів та підтримуючи власне кодування, QtVCP сподівається, що енергія розробки буде витрачена на один інструментарій, а не на постійне перевинаходження.

Використовуючи один і той самий набір інструментів на багатьох екранах/панелях, користувачам має бути легше налаштовувати/створювати їх, а розробникам – легше допомагати у вирішенні проблем з меншими зусиллями.

QtVCP використовує файл .ui, створений у Qt Designer, та файл обробника Python

  • завантажувати та керувати екраном/панеллю, яка відображає віджети Qt та

  • керувати контролером руху LinuxCNC або контактами HAL.

Є вбудовані екрани та панелі, які користувач легко завантажує, або ж користувачі можуть створювати/змінювати свої власні.

QtVCP використовує бібліотеки та користувацькі віджети, щоб приховати деякі складнощі взаємодії з LinuxCNC. Використовуючи бібліотеку QtVCP замість LinuxCNC, ми можемо зменшити незначні зміни коду LinuxCNC.

2. Вбудовані місця розташування

Вбудовані екрани та панелі зберігаються в окремих папках:

  • Screens в share/qtvcp/screens

  • Panels в share/qtvcp/panels

  • Стокові зображення у share/qtvcp/images

Екрани та панелі сортуються за назвою папки, яка також є назвою, що використовується для їх завантаження.

Усередині папки буде:

  • the .ui file,

  • файл обробника, та

  • можливо, файл теми .qss.

3. Запуск QtVCP для вимкнення

Вихідний код QtVCP знаходиться в папці +src/emc/usr_intf/qtvcp+ дерева вихідних кодів LinuxCNC.

3.1. Запуск QtVCP

Під час першого запуску QtVCP:

  1. Він повинен вирішити, чи є цей об’єкт екраном чи панеллю.

  2. Він шукає та збирає інформацію про шляхи до потрібних файлів та корисних папок.

  3. Тоді:

    1. Збирає компонент HAL,

    2. Завантажує екземпляр вікна,

    3. Додає розширення обробників,

    4. Встановлює фільтр подій.

Тепер вікна/віджети створено, піни HAL зібрано. Це також ініціює функцію +_init_hal()+ віджетів. . Викликається функція-обробник +initialized__()+ . Бібліотеку STATUS примусово оновлено. . На цьому етапі компонент HAL готовий. . Встановлюється різноманітні додаткові аргументи switch, включаючи виклик HAL-файлу POSTGUI (якщо це екран). . Сигнали завершення перехоплюються, і QtVCP тепер опитує події.

3.2. Вимкнення QtVCP

Зрештою, коли QtVCP запитується про вимкнення:

  1. Він викликає функції вимкнення у файлі обробника,

  2. STATUS моніторинг вимкнено

  3. Компонент HAL вимикається

4. Інформація про шлях

Коли QtVCP завантажується, він збирає інформацію про шляхи.

Це доступно у функції +__init__()+ файлу обробника як path:

IMAGEDIR

Шлях вбудованих зображень

SCREENDIR

Шлях вбудованих екранів контролера руху

PANELDIR

Шлях вбудованих допоміжних панелей

WORKINGDIR

Шлях, з якого було запущено QtVCP

CONFIGPATH

Шлях запущеної конфігурації

BASEDIR

Загальний шлях, що використовується для виведення всіх шляхів

BASENAME

Загальна назва, що використовується для виведення всіх шляхів

LIBDIR

Шлях до бібліотеки Python QtVCP

HANDLER

Шлях до файлу обробника

XML

Шлях до файлу .ui

DOMAIN

Шлях перекладу

IS_SCREEN

Перемикач екрана/панелі

5. Ідіосинкразії

Вони намагаються охопити неочевидні ситуації.

5.1. Збір кодів помилок

Коди помилок LinuxCNC можна зчитувати лише з одного місця.

Під час читання воно споживається, тобто жоден інший об’єкт не може його прочитати.

На екранах QtVCP рекомендується використовувати віджет ScreenOptions для налаштування читання помилок.

Потім помилки надсилаються іншим об’єктам через STATUS сигнали.

5.2. Швидкість поштовху

LinuxCNC не має внутрішнього запису швидкості поштовхового переміщення: ви повинні вказати його під час поштовхового переміщення.

QtVCP використовує бібліотеку STATUS для відстеження останніх лінійних та кутових швидкостей поштовхового переміщення.

Він завжди вказується в одиницях машини за хвилину і повинен бути перетворений, якщо ви перебуваєте в режимі не машинні одиниці.
Отже, якщо ваша машина працює в імперській системі, але ви перебуваєте в метричному режимі, зміни швидкості поштовху, що надсилаються до функцій ACTION, повинні бути перетворені в імперські одиниці.
Аналогічно, якщо машина працює в метричній системі, а ви перебуваєте в імперському режимі, зміни швидкості переміщення повинні надсилатися до функцій ACTION у метричних одиницях.
Для кутових швидкостей переміщення одиниці виміру не змінюються в метричному/імперському режимі, тому ви можете надсилати їх до функцій ACTION без перетворення.

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

5.3. Прив’язка клавіш

Warning
Прив’язка клавіш завжди є справою, яку важко-підібрати-правильно-у-всіх-випадках.

Функції користувацького призначення клавіш мають бути визначені у файлі обробника.

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

5.4. Файл налаштувань

Деякі віджети QtVCP використовують файл налаштувань для запису важливої інформації.

Це вимагає налаштування файлу налаштувань на ранній стадії процесу ініціалізації віджета.
Найпростіший спосіб зробити це – використати віджет ScreenOptions.

5.5. Функції спеціального налаштування віджета

QtVCP шукає та викликає функцію +_hal_init()+ коли віджет вперше завантажується.

Він не викликається під час використання редактора Qt Designer.

Після виклику цієї функції віджет має доступ до деяких спеціальних змінних:

self.HAL_GCOMP

Екземпляр компонента HAL

self.HAL_NAME

Назва цього віджета у вигляді рядка

self.QT_OBJECT_

Екземпляр об’єкта PyQt цього віджета

self.QTVCP_INSTANCE_

Найвищий рівень батьківського елемента екрана

self.PATHS_

Екземпляр бібліотеки path у QtVCP

self.PREFS_

Екземпляр додаткового файлу налаштувань

self.SETTINGS_

Об’єкт Qsettings

Під час створення власного віджета, _import та підклас _the +_HalWidgetBase+ для цієї поведінки.

5.6. Діалоги

Діалогові вікна (також відомі як «спливаючі вікна») найкраще завантажувати за допомогою віджета ScreenOptions, але їх можна розмістити на екрані в Qt Designer.

Неважливо, де саме на макеті вони розташовані, але щоб зробити їх прихованими, потрібно циклічно змінювати властивість state на true, а потім на false.

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

5.7. Стилі (теми)

Хоча стилі можна встановлювати в Qt Designer, зручніше змінювати їх пізніше, якщо вони всі встановлені в окремому файлі .qss. Файл слід розмістити в тому ж місці, що й файл обробника.