Цей документ є довідником «найкращих практик» для загального використання при розробці екранів.
Хоча з LinuxCNC можна програмувати практично все, використання загальної структури, мови та вимог до конфігурації полегшує перехід між екранами та дозволяє більшій кількості розробників підтримувати їх.
Тим не менш, ніщо в цьому документі не є остаточним.

1. Мова

Python є на даний момент переважною мовою коду екрану LinuxCNC.
Python має низький поріг входу для нових користувачів, які можуть модифікувати екрани відповідно до своїх потреб.
Python має багатий набір документації, підручників та бібліотек, з яких можна черпати інформацію.
Він вже використовується та інтегрований у системні вимоги LinuxCNC.
Хоча можна використовувати C або C, це суттєво обмежує коло осіб, які можуть їх підтримувати та розвивати.
Краще було б розширити Python модулями C/C
для будь-яких функцій, які цього потребують.

2. Локалізація чисел з плаваючою комою в графічних інтерфейсах

Різні локалі використовують різні роздільники десяткових знаків і тисяч. Слід уникати використання функцій перетворення рядка в число з плаваючою комою, специфічних для локалі, оскільки вони можуть давати несподівані результати. (Наприклад, текстовий рядок «1.58» в de_DE буде перетворено в 158 за допомогою atof()). Наступні рекомендації (засновані на уникненні двозначності, а не на «правильності» в будь-якій конкретній локалі) рекомендуються при перетворенні числа з плаваючою комою в рядок і навпаки:

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

  • У випадку відображення використовуйте або крапку (.) послідовно, або послідовно використовуйте поточний формат локалізації. Акцент тут робиться на слові «послідовно».

3. Базова конфігурація

В даний час більшість екранів використовують комбінацію записів INI-файлу та файлу налаштувань для конфігурації своїх функцій.
Текстові INI-файли зазвичай використовуються для загальних налаштувань контролера машини, тоді як текстові файли налаштувань використовуються для властивостей, пов’язаних з графічним інтерфейсом користувача (таких як звуки, розмір, кольори).
Можуть бути й інші файли, що використовуються для перекладів, стилізації та налаштування функцій. Вони значною мірою залежать від базового набору інструментів віджетів.

3.1. INI [DISPLAY]

Розділ [DISPLAY] INI-файлу призначений для визначення налаштувань, пов’язаних з екраном.

3.1.1. Дисплей

Найважливішим є вказання імені екрану, який скрипт LinuxCNC буде використовувати для завантаження.
Програма екрану зазвичай розпізнає перемикачі, такі як для встановлення повноекранного режиму.
Title призначений для назви вікна, а icon використовується для іконок вікна.

[DISPLAY]
DISPLAY = axis
TITLE = XYZA Rotational Axis'
ICON = silver_dragon.png

3.1.2. Час циклу

Якщо можна налаштувати, ось як встановити час циклу графічного інтерфейсу дисплея.
Часто це швидкість оновлення, а не час очікування між оновленнями.
Значення 100 мс (0,1 с) є типовим налаштуванням, хоча діапазон 50–200 мс також є прийнятним.

[DISPLAY]
CYCLE_TIME = 100

3.1.3. Шляхи до файлів

Якщо ці функції доступні на екрані, ось як вказати шлях, який потрібно використовувати.
Вони повинні посилатися на поточний файл INI, або дозволяти використання символу «~» для домашньої папки, або дозволяти використання абсолютних шляхів.

MDI_HISTORY_FILE = mdi_history.txt
PREFERENCE_FILE_PATH = gui.pref
LOG_FILE = gui-log.txt

3.1.4. Приріст поштовху

Для вибору кроку зазвичай використовуються перемикачі або комбіновані поля.
Лінійний крок може бути виражений в дюймах або міліметрах.
Крок кута вказується в градусах.
Слово «continuous» використовується для позначення безперервного переміщення і, ймовірно, слід додавати навіть якщо воно відсутнє в рядку INI.

INCREMENTS = continuous, 10 mm, 1.0 mm, 0.10 mm, 0.01 mm, 1.0 inch, 0.1 inch, 0.01 inch
ANGULAR_INCREMENTS = continuous, .5, 1, 45, 90, 360

3.1.5. Підказка щодо типу машини

Екран часто потрібно налаштовувати відповідно до типу верстата. Токарні верстати мають різні елементи керування та по-різному відображають DRO. Пінопластові верстати відображають графік по-іншому.
Раніше для цього додавали перемикачі LATHE = 1, FOAM = 1 тощо.

MACHINE_TYPE_HINT = LATHE

3.1.6. Перевизначення

Функція «Перевірка» дозволяє користувачеві регулювати швидкість подачі або швидкість шпинделя на льоту. Зазвичай використовується повзунок або циферблат.
Ці налаштування вказані у відсотках.

MAX_FEED_OVERRIDE       = 120
MIN_SPINDLE_0_OVERRIDE    = 50
MAX_SPINDLE_0_OVERRIDE    = 120

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

Більшість екранів мають повзунки для регулювання лінійної та кутової швидкості переміщення.
Ці налаштування слід вказувати в одиницях машини на хвилину для лінійної швидкості та в градусах на хвилину для кутової швидкості.
«За замовчуванням» означає початкову швидкість при першому завантаженні екрана.

DEFAULT_LINEAR_VELOCITY =
MIN_LINEAR_VELOCITY =
MAX_LINEAR_VELOCITY =

DEFAULT_ANGULAR_VELOCITY =
MIN_ANGULAR_VELOCITY =
MAX_ANGULAR_VELOCITY =

3.1.8. Ручне керування шпинделем

Ручне управління шпинделем може здійснюватися за допомогою кнопок, повзунків або регуляторів (або їх комбінацій).
Ви можете встановити обмеження, які є меншими за ті, що може використовувати контролер верстата, шляхом налаштування цих параметрів.
Якщо ваш екран підтримує роботу декількох шпинделів, то він повинен приймати значення, більші за показане «0».

SPINDLE_INCREMENT = 100
DEFAULT_SPINDLE_0_SPEED = 500
MIN_SPINDLE_0_SPEED = 50
MAX_SPINDLE_0_SPEED = 1000

3.2. INI [MDI_COMMAND]

Деякі екрани використовують кнопки для запуску команд «Macro» NGC.
Їх можна вказати, як показано в цих компактних прикладах.
Команди NGC, розділені двокрапками, виконуються до кінця перед наступною.
Опціональна кома відокремлює текст для кнопки від коду NGC.

[MDI_COMMAND_LIST]
MDI_COMMAND_MACRO0 = G0 Z25;X0 Y0;Z0, Goto\nUser\nZero
MDI_COMMAND_MACRO1 = G53 G0 Z0;G53 G0 X0 Y0,Goto\nMachn\nZero'

3.3. INI [FILTER]

Цей розділ дозволяє налаштувати, які файли відображаються у вікні вибору файлів та які програми-фільтри будуть попередньо обробляти їх вихідні дані перед надсиланням до LinuxCNC.
Розширення мають такий вигляд:
PROGRAM_EXTENSION = .extension,.extension2[пробіл]Опис розширень
Визначення програм-фільтрів мають такий вигляд:
filter extension = програма для запуску

[FILTER]
# Керує тим, які програми відображаються у файловому менеджері:
PROGRAM_EXTENSION = .ngc,.nc,.tap G-Code File (*.ngc,*.nc,*.tap)
PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image
PROGRAM_EXTENSION = .py Python Script

# Зіставляє розширення файлів даних/вихідного коду зі спеціальною програмою-«фільтром» для відображення/виконання:
png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
py = python3

3.4. INI [HAL]

Більшість екранів потребують кількох HAL-пінів. Їх потрібно підключити після того, як екран їх створить.

3.4.1. Постгі Хаффіл

Ці файли слід запускати один за одним по порядку, після того, як усі виводи графічного інтерфейсу HAL будуть створені.

[HAL]
POSTGUI_HALFILE = keypad_postgui.hal
POSTGUI_HALFILE = vfd_postgui.hal

3.4.2. Постгуй Халкомд

Ці файли слід запускати один за одним по порядку, після того, як будуть запущені всі файли POSTGUI.

[HAL]
POSTGUI_HALCMD = show pin qt
POSTGUI_HALCMD = loadusr halmeter

4. Розширена конфігурація

4.1. Вбудовування елементів графічного інтерфейсу

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

EMBED_TAB_NAME=Vismach demo
EMBED_TAB_COMMAND=qtvcp vismach_mill_xyz
EMBED_TAB_LOCATION=tabWidget_utilities

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

Діалогові вікна користувача використовуються для відображення інформації про імпорт (зазвичай про помилки), яку користувач вважає важливою.
Деякі залишаються відкритими до вирішення проблеми, деякі вимагають підтвердження, інші — вибору «так/ні».
Контакт HAL I/O викликає діалогове вікно, яке скидає контакт I/O і встановлює будь-які контакти виходу відповіді.

[DISPLAY]
MESSAGE_BOLDTEXT = This is an information message
MESSAGE_TEXT = This is low priority
MESSAGE_DETAILS = press ok to clear
MESSAGE_TYPE = okdialog status
MESSAGE_PINNAME = bothtest
MESSAGE_ICON = INFO'

Цей стиль видає кілька повідомлень, визначених числом.
У цьому прикладі показано 3 можливі повідомлення на основі номера помилки частотного перетворювача.

[DISPLAY]
MULTIMESSAGE_ID = VFD

MULTIMESSAGE_VFD_NUMBER = 1
MULTIMESSAGE_VFD_TYPE = okdialog status
MULTIMESSAGE_VFD_TITLE = VFD Error: 1
MULTIMESSAGE_VFD_TEXT = This is the longer text FOR MESSAGE NUMBER 1
MULTIMESSAGE_VFD_DETAILS = DETAILS for VFD error 1
MULTIMESSAGE_VFD_ICON = WARNING'

MULTIMESSAGE_VFD_NUMBER = 2
MULTIMESSAGE_VFD_TYPE = nonedialog status
MULTIMESSAGE_VFD_TITLE = VFD Error: 2
MULTIMESSAGE_VFD_TEXT = This is the longer text FOR MESSAGE NUMBER 2
MULTIMESSAGE_VFD_DETAILS = DETAILS for VFD error 2
MULTIMESSAGE_VFD_ICON = INFO'

MULTIMESSAGE_VFD_NUMBER = 3
MULTIMESSAGE_VFD_TYPE = status
MULTIMESSAGE_VFD_TITLE = VFD Error: 3
MULTIMESSAGE_VFD_TEXT = This is the longer text FOR Error MESSAGE NUMBER 3.
MULTIMESSAGE_VFD_DETAILS = We should do something about this message.
MULTIMESSAGE_VFD_ICON = WARNING'