images/ngcgui.png
Figure 1. NGCGUI вбудований в AXIS

1. Огляд

  • «NGCGUI» — це програма Tcl для роботи з підпрограмами. Вона дозволяє вам мати діалоговий інтерфейс з LinuxCNC. Ви можете організувати підпрограми в порядку, в якому вони повинні виконуватися, і об’єднати підпрограми в один файл для повної програми обробки деталі.

  • «NGCGUI» може працювати як окремий додаток або бути вбудованим у кілька вкладок графічного інтерфейсу AXIS.

  • «PyNGCGUI» — це альтернативна реалізація NGCGUI на Python.

  • «PyNGCGUI» може працювати як самостійна програма або бути вбудованою як вкладка (з власним набором підвкладок) в будь-який графічний інтерфейс, що підтримує вбудовування програм GladeVCP AXIS, Touchy, Gscreen і GMOCCAPY.

Використання NGCGUI або PyNGCGUI:

  • Для кожної підпрограми, зазначеної у файлі INI, надаються сторінки вкладок.

  • Нові вкладки підпрограм можна додавати на льоту за допомогою custom tab.

  • Кожна вкладка підпрограми містить поля введення для всіх параметрів підпрограми.

  • Поля введення можуть мати значення за замовчуванням та мітку, які позначаються спеціальними коментарями у файлі підпрограми.

  • Виклики підпрограм можна об’єднати, утворюючи програму з кількох кроків.

  • Можна використовувати будь-яку однофайлову підпрограму G-коду, яка відповідає домовленостям NGCGUI.

  • Можна використовувати будь-яку програму gcmc (G-code-meta-compiler), яка відповідає конвенціям NGCGUI щодо тегування змінних. (Виконуваний файл gcmc необхідно встановити окремо, див.: https://www.vagrearg.org/content/gcmc)

Note

NGCGUI та PyNGCGUI реалізують однакові функції та обробляють файли .ngc та .gcmc, які відповідають декільком специфічним для NGCGUI конвенціям. У цьому документі термін «NGCGUI» загалом стосується обох програм.

2. Демонстраційні конфігурації

Декілька демонстраційних конфігурацій знаходяться в каталозі sim зразків конфігурацій, що пропонуються конфігуратором LinuxCNC. Конфігуратор знаходиться в головному меню системи: Програми > CNC > LinuxCNC

Наведено приклади для AXIS, Touchy, gscreen та GMOCCAPY. Ці приклади демонструють як 3-осьові (XYZ) декартові конфігурації (наприклад, фрезерні верстати), так і токарні (XZ) установки. Деякі приклади показують використання спливаючої клавіатури для систем з сенсорним екраном, а інші приклади демонструють використання файлів, створених для програми gcmc (G-code Meta Compiler). Приклади Touchy також демонструють інтеграцію програми перегляду графіків GladeVCP (gremlin_view).

Найпростіше застосування можна знайти так:

Зразок Configurations/sim/axis/ngcgui/ngcgui_simple

Повний приклад, що демонструє сумісність з gcmc, знаходиться за посиланням:

Зразок Configurations/sim/axis/ngcgui/ngcgui_gcmc

Повний приклад вбудованого застосунку GladeVCP з використанням gcmc знаходиться за адресою:

Зразок Configurations/sim/gscreen/ngcgui/pyngcgui_gcmc

У прикладах конфігурацій симулятора використовуються бібліотечні файли, що містять файли підпрограм G-коду (.ngc) та файли метакомпілятора G-коду (.gcmc):

  • nc_files/ngcgui_lib

    • ngcgui.ngc - Легкий для розуміння приклад використання підпрограм

    • arc1.ngc - базова дуга з використанням компенсації радіуса різця

    • arc2.ngc - дуга, що визначається центром, зміщенням, шириною, кутом (викликає arc1)

    • backlash.ngc - процедура вимірювання люфту осі за допомогою індикатора годинникового типу

    • db25.ngc - створює виріз для штекера DB25

    • gosper.ngc – демонстрація рекурсії (flowsnake)

    • helix.ngc - різання спіралі або D-подібного отвору

    • helix_rtheta.ngc - спіраль або D-подібний отвір, розташовані за радіусом та кутом

    • hole_circle.ngc - рівновіддалені отвори по колу

    • ihex.ngc - внутрішній шестигранник

    • iquad.ngc - внутрішній чотирикутник

    • ohex.ngc - зовнішній шестикутник

    • oquad.ngc - зовнішній чотирикутник

    • qpex_mm.ngc - Демонстрація qpockets (на основі мм)

    • qpex.ngc - Демонстрація qpockets (дюймова)

    • qpocket.ngc - чотиристороння кишеня

    • rectangle_probe.ngc - зондувати прямокутну область

    • simp.ngc - простий приклад підпрограми, яка створює два кола

    • slot.ngc - слот від з’єднання двох кінцевих точок

    • xyz.ngc - тренажер обмежений формою коробки

    • Custom - Створює власні вкладки

    • ttt - True Type Tracer, для створення текстів для гравіювання

  • nc_files/ngcgui_lib/lathe

    • ngcgui-lathe - Приклад підпрограми токарного верстата

    • g76base.ngc - Графічний інтерфейс користувача для нарізання різьби G76

    • g76diam.ngc - Специфікація різьблення за основним та основним діаметрами

    • id.ngc - розточує внутрішній діаметр

    • od.ngc - повертає зовнішній діаметр

    • taper-od.ngc - конусність на зовнішньому діаметрі

    • Custom - Створює власні вкладки

  • nc_files/gcmc_lib

    • drill.gcmc - свердліть отвори у формі прямокутника

    • square.gcmc - проста демонстрація змінних тегів для файлів gcmc

    • star.gcmc - Демонстрація gcmc, що ілюструє функції та масиви

    • wheels.gcmc - Демонстрація складних шаблонів у GCMC

Щоб спробувати демонстрацію, виберіть конфігурацію симулятора та запустіть програму LinuxCNC.

Якщо ви використовуєте графічний інтерфейс AXIS, натисніть кнопку E-Stop images/tool_estop.png потім «Потужність машини» images/tool_power.png потім «Головна сторінка Все». Виберіть вкладку NGCGUI, заповніть усі порожні поля розумними значеннями та натисніть «Створити функцію», а потім «Завершити». Нарешті натисніть кнопку «Виконати» images/tool_run.png кнопку, щоб спостерігати за її роботою. Експериментуйте, створюючи кілька функцій та функцій з різних вкладок.

Щоб створити кілька підпрограм, об’єднаних в один файл, перейдіть на кожну вкладку, заповніть поля, натисніть «Створити функцію», а потім за допомогою клавіш зі стрілками перемістіть необхідні вкладки, щоб розташувати їх у потрібному порядку. Тепер натисніть «Завершити» і дайте відповідь на запит, щоб створити

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

Note

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

Щоб переглянути спеціальні комбінації клавіш, клацніть всередині вкладки NGCGUI, щоб отримати фокус, а потім натисніть Control-k.

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

3. Розташування бібліотек

У інсталяціях LinuxCNC, встановлених з deb-пакетів, конфігурації симуляції для NGCGUI використовують символічні посилання на бібліотеки LinuxCNC, які не можуть бути записані користувачем, для:

  • nc_files/ngcgui_lib Підфайли, сумісні з NGCGUI

  • nc_files/ngcgui_lib/lathe, підфайли токарного верстата, сумісні з NGCGUI

  • nc_files/gcmc_lib Програми, сумісні з NGCGUI-gcmc

  • nc_files/ngcgui_lib/utilitysubs Допоміжні підпрограми

  • nc_files/ngcgui_lib/mfiles Користувацькі M-файли

Ці бібліотеки розташовані за допомогою елементів INI-файлу, які вказують шляхи пошуку, що використовуються LinuxCNC (та NGCGUI):

[RS274NGC]
SUBROUTINE_PATH = ../../nc_files/ngcgui_lib:../../nc_files/gcmc_lib:../../nc_files/ngcgui_lib/utilitysubs
USER_M_PATH     = ../../nc_files/ngcgui_lib/mfiles
Note

Це довгі рядки (не продовжуються на декількох рядках), які вказують каталоги, що використовуються в патчі пошуку. Імена каталогів розділяються двокрапками (:). Між іменами каталогів не повинно бути пробілів.

Користувач може створювати нові каталоги для власних підпрограм та M-файлів і додавати їх до шляху(ів) пошуку.

Наприклад, користувач може створювати каталоги з терміналу за допомогою команд:

mkdir /home/myusername/mysubs
mkdir /home/myusername/mymfiles

А потім створіть або скопіюйте файли, надані системою, до цих каталогів, доступних для запису користувачем. Наприклад, користувач може створити сумісний з NGCGUI підфайл з назвою:

/home/myusername/mysubs/example.ngc

Щоб використовувати файли в нових каталогах, файл INI необхідно відредагувати, включивши нові підфайли та розширивши шлях(и) пошуку. Для цього прикладу:

[RS274NGC]
...
SUBROUTINE_PATH = /home/myusername/mysubs:../../nc_files/ngcgui_lib:../../nc_files/gcmc_lib:../../nc_files/ngcgui_lib/utilitysubs
USER_M_PATH     = /home/myusername/mymfiles:../../nc_files/ngcgui_lib/mfiles

[DISPLAY]
...
NGCGUI_SUBFILE = example.ngc
...

LinuxCNC (та NGCGUI) використовують перший файл, знайдений під час пошуку в каталогах у шляху пошуку. Завдяки такій поведінці ви можете замінити підфайл ngcgui_lib, розмістивши підфайл з ідентичною назвою в каталозі, який знаходиться раніше в шляху пошуку. Більш детальну інформацію можна знайти в розділі INI посібника для інтеграторів.

4. Автономне використання

4.1. Автономний NGCGUI

Для використання введіть у терміналі:

ngcgui --help
Використання:
  ngcgui --help | -?
  ngcgui [Options] -D <nc files directory name>
  ngcgui [Options] -i <LinuxCNC INI file name>
  ngcgui [Options]

Опції:
  [-S subroutine_file]
  [-p preamble_file]
  [-P postamble_file]
  [-o output_file]
  [-a autosend_file]            (autosend to AXIS default:auto.ngc)
  [--noauto]                    (no autosend to AXIS)
  [-N | --nom2]                 (no m2 terminator (use %))
  [--font [big|small|fontspec]] (default: "Helvetica -10 normal")
  [--horiz|--vert]              (default: --horiz)
  [--cwidth comment_width]      (width of comment field)
  [--vwidth varname_width]      (width of varname field)
  [--quiet]                     (fewer comments in outfile)
  [--noiframe]                  (default: frame displays image)
Note

Як окремий застосунок, NGCGUI обробляє один файл підпрограми, який можна викликати кілька разів. Кілька окремих застосунків NGCGUI можна запускати незалежно один від одного.

4.2. Автономний PyNGCGUI

Для використання введіть у терміналі:

pyngcgui --help
Використання:
pyngcgui [Options] [<sub_filename>]
Options requiring values:
    [-d | --demo] [0|1|2] (0: DEMO standalone toplevel)
                          (1: DEMO embed new notebook)
                          (2: DEMO embed within existing notebook)
    [-S | --subfile       <sub file name>]
    [-p | --preamble      <preamble file name>]
    [-P | --postamble     <postamble file name>]
    [-i | --ini           <INI file name>]
    [-a | --autofile      <auto file name>]
    [-t | --test          <testno>]
    [-K | --keyboardfile  <glade_file>] (use custom popupkeyboard glade file)
Solo Options:
    [-v | --verbose]
    [-D | --debug]
    [-N | --nom2]         (no m2 terminator (use %))
    [-n | --noauto]       (save but do not automatically send result)
    [-k | --keyboard]     (use default popupkeybaord)
    [-s | --sendtoaxis]   (send generated NGC file to AXIS GUI)
Notes:
      A set of files is comprised of a preamble, subfile, postamble.
      The preamble and postamble are optional.
      One set of files can be specified from cmdline.
      Multiple sets of files can be specified from an INI file.
      If --ini is NOT specified:
         search for a running LinuxCNC and use its INI file.
Note

Як окремий застосунок, PyNGCGUI може зчитувати INI-файл (або запущений застосунок LinuxCNC) для створення вкладок для кількох підфайлів.

5. Вбудовування NGCGUI

5.1. Вбудовування NGCGUI в AXIS

Наступні елементи INI-файлу розміщуються в розділі [DISPLAY]. (Див. додаткові розділи нижче щодо необхідних додаткових елементів)

  • TKPKG = Ngcgui 1.0 - пакет NGCGUI

  • TKPKG = Ngcguittt 1.0 - пакет True Type Tracer для генерації тексту для гравіювання (необов’язково, має відповідати TKPKG = Ngcgui).

  • NGCGUI_FONT = Helvetica -12 normal - Встановлює шрифт, що використовується

  • NGCGUI_PREAMBLE = in_std.ngc - Файл преамбули, який буде додано на початок підпрограми. Коли об’єднуються кілька підпрограм, він додається лише один раз.

  • NGCGUI_SUBFILE = simp.ngc - Створює вкладку з іменованої підпрограми.

  • NGCGUI_SUBFILE = "" - Створює власну вкладку

  • #NGCGUI_OPTIONS = opt1 opt2 … - Варіанти NGCGUI:

    • nonew — Забороняє створення нової користувацької вкладки

    • noremove — Забороняє видалення сторінки вкладки

    • noauto — Не запускати автоматично (makeFile, потім ручний запуск)

    • noiframe — Немає внутрішнього зображення, зображення на окремому верхньому рівні

  • TTT = truetype-tracer - назва програми трасування TrueType (вона має бути в користувацькому PATH)

  • TTT_PREAMBLE = in_std.ngc - Необов’язково, вказує ім’я файлу для преамбули, що використовується для підфайлів, створених ttt. (альтернатива: mm_std.ngc)

Note

Додаткові елементи truetype tracer використовуються для визначення сумісної з NGCGUI вкладки, яка використовує програму truetype-tracer. Програма truetype-tracer повинна бути встановлена окремо і знаходитися в PATH користувача.

5.2. Вбудовування PyNGCGUI як вкладки GladeVCP у графічний інтерфейс

Наступні елементи INI-файлу розміщуються в розділі [DISPLAY] для використання з графічними інтерфейсами AXIS, Gscreen або Touchy. (Додаткові необхідні елементи дивіться в розділах нижче)

EMBED_ Items
  • EMBED_TAB_NAME = PyNGCGUI - ім’я, яке відображатиметься на вбудованій вкладці

  • EMBED_TAB_COMMAND = gladevcp -x {XID} pyngcgui_axis.ui - викликає GladeVCP

  • EMBED_TAB_LOCATION = name_of_location - де розташована вбудована сторінка

Note

Специфікатор EMBED_TAB_LOCATION не використовується для графічного інтерфейсу AXIS. Хоча PyNGCGUI може бути вбудований в AXIS, інтеграція є більш повною при використанні NGCGUI (з використанням TKPKG = Ngcgui 1.0). Щоб вказати EMBED_TAB_LOCATION для інших графічних інтерфейсів, див. розділ DISPLAY Section глави «Конфігурація INI».

Note

Графічний інтерфейс трасувальника Truetype наразі недоступний для програм GladeVCP.

5.3. Додаткові елементи INI-файлу, необхідні для NCGUI або PyNGCGUI

Наступні елементи INI-файлу розміщуються в розділі [DISPLAY] для будь-якого графічного інтерфейсу, який вбудовує NGCGUI або PyNGCGUI.

  • NGCGUI_FONT = Helvetica -12 normal - визначає назву шрифту, розмір, звичайний|жирний

  • NGCGUI_PREAMBLE = in_std.ngc - файл преамбули, який буде додано перед підпрограмами. Під час об’єднання кількох спільних викликів підпрограм ця преамбула додається лише один раз. Для машин на базі mm використовуйте mm_std.ngc

  • NGCGUI_SUBFILE = filename1.ngc - створює вкладку з підпрограми filename1

  • NGCGUI_SUBFILE = filename2.ngc - створює вкладку з підпрограми filename2

  • … etc.

  • NGCGUI_SUBFILE = gcmcname1.gcmc - створює вкладку з файлу gcmcname1

  • NGCGUI_SUBFILE = gcmcname2.gcmc - створює вкладку з файлу gcmcname2

  • … etc.

  • NGCGUI_SUBFILE = "" - створює власну вкладку, яка може відкривати будь-яку підпрограму в шляху пошуку

  • NGCGUI_OPTIONS = opt1 opt2 … - Параметри NGCGUI

    • nonew - заборонити створення нової власної вкладки

    • noremove - заборонити вилучення будь-якої вкладки

    • noauto - без автоматичного надсилання (використовуйте makeFile, а потім збережіть або надішліть вручну)

    • noiframe - немає внутрішнього зображення, відображати зображення на окремому віджеті верхнього рівня

    • nom2 - Не завершуйте на m2, використовуйте термінатор %. Цей параметр усуває всі побічні ефекти завершення на m2

  • GCMC_INCLUDE_PATH = dirname1:dirname2 - пошук каталогів для файлів включення gcmc

Це приклад вбудовування NGCGUI в AXIS. Підпрограми повинні знаходитися в каталозі, вказаному в [RS274NGC]SUBROUTINE_PATH. Деякі приклади підпрограм використовують інші підпрограми, тому переконайтеся, що у каталозі SUBROUTINE_PATH є всі необхідні залежності, якщо такі є. Деякі підпрограми можуть використовувати власні M-файли, які повинні знаходитися в каталозі, вказаному в [RS274NGC]USER_M_PATH.

Метакомпілятор G-коду (gcmc) може містити такі оператори, як:

include("filename.inc.gcmc");

За замовчуванням gcmc включає поточний каталог, який для LinuxCNC буде каталогом, що містить файл INI LinuxCNC. Додаткові каталоги можна додати до порядку пошуку gcmc за допомогою елемента GCMC_INCLUDE_PATH.

Зразок INI-файлу на основі графічного інтерфейсу AXIS
[RS274NGC]
...
SUBROUTINE_PATH   = ../../nc_files/ngcgui_lib:../../ngcgui_lib/utilitysubs
USER_M_PATH       = ../../nc_files/ngcgui_lib/mfiles

[DISPLAY]
TKPKG             = Ngcgui    1.0
TKPKG             = Ngcguittt 1.0
# Ngcgui має передувати Ngcguittt

NGCGUI_FONT       = Helvetica -12 normal
# вказуйте лише імена файлів, файли повинні бути в [RS274NGC]SUBROUTINE_PATH
NGCGUI_PREAMBLE   = in_std.ngc
NGCGUI_SUBFILE    = simp.ngc
NGCGUI_SUBFILE    = xyz.ngc
NGCGUI_SUBFILE    = iquad.ngc
NGCGUI_SUBFILE    = db25.ngc
NGCGUI_SUBFILE    = ihex.ngc
NGCGUI_SUBFILE    = gosper.ngc
# specify "" for a custom tab page
NGCGUI_SUBFILE    = ""
#NGCGUI_SUBFILE   = "" use when image frame is specified if
#                      opening other files is required
#                      images will be put in a top level window
NGCGUI_OPTIONS    =
#NGCGUI_OPTIONS   = opt1 opt2 ...
# opt items:
#   nonew      -- disallow making a new custom tab
#   noremove   -- disallow removing any tab page
#   noauto     -- no auto send (makeFile, then manually send)
#   noiframe   -- no internal image, image on separate top level
GCMC_INCLUDE_PATH = /home/myname/gcmc_includes

TTT               = truetype-tracer
TTT_PREAMBLE      = in_std.ngc

PROGRAM_PREFIX    = ../../nc_files
Note

Вищезазначене не є повним INI-файлом графічного інтерфейсу AXIS – показані елементи використовуються NGCGUI. Для повного INI-файлу LinuxCNC потрібно багато додаткових елементів.

5.4. Трасер Truetype

Ngcgui_ttt забезпечує підтримку truetype-tracer (v4). Він створює вкладку AXIS, яка дозволяє користувачеві створити нову вкладку NGCGUI після введення тексту та вибору шрифту та інших параметрів. (Truetype-tracer повинен бути встановлений окремо).

Щоб вбудувати ngcgui_ttt в AXIS, вкажіть наступні елементи на додаток до елементів NGCGUI:

Item:    [DISPLAY]TKPKG = Ngcgui_ttt version_number
Example: [DISPLAY]TKPKG = Ngcgui_ttt 1.0
Примітка:    Обов'язковий, вказує на завантаження ngcgui_ttt на вкладці AXIS з назвою ttt.
         Must follow the TKPKG = Ngcgui item.

Елемент:    [DISPLAY]TTT = шлях_до_truetype-tracer
Приклад: [DISPLAY]TTT = truetype-tracer
Примітка:    Необов'язково, якщо не вказано, спробуйте використовувати /usr/local/bin/truetype-tracer.
         Вкажіть абсолютний шлях або просте ім'я виконуваного файлу,
         у цьому випадку для пошуку програми буде використано середовище PATH користувача.

Елемент: [DISPLAY]TTT_PREAMBLE = preambule_filename
Приклад: [DISPLAY]TTT_PREAMBLE = in_std.ngc
Примітка: Необов'язково, вказує ім'я файлу для преамбули, що використовується для створених ttt підфайлів.

5.5. Специфікації шляху до INI-файлу

NGCGUI використовує шлях пошуку LinuxCNC для пошуку файлів. Шлях пошуку починається зі стандартного каталогу, визначеного за допомогою:

[DISPLAY]PROGRAM_PREFIX = directory_name

а потім кілька каталогів, визначених за допомогою:

[RS274NGC]SUBROUTINE_PATH = directory1_name:directory1_name:directory3_name ...
Довідники

Каталоги можуть бути вказані як абсолютні або відносні шляхи.

  • Приклад: [DISPLAY]PROGRAM_PREFIX = /home/myname/linuxcnc/nc_files

  • Приклад: [DISPLAY]PROGRAM_PREFIX = ~/linuxcnc/nc_files

  • Приклад: [DISPLAY]PROGRAM_PREFIX = ../../nc_files

Абсолютні шляхи

Абсолютний шлях, що починається з "/", вказує повне розташування файлової системи. Шлях, що починається з "~/", вказує шлях, що починається з домашнього каталогу користувача. Шлях, що починається з "~username/", вказує шлях, що починається з домашнього каталогу користувача username.

Відносні шляхи

Відносні шляхи базуються на стартовому каталозі, який є каталогом, що містить файл INI. Використання відносних шляхів може полегшити переміщення конфігурацій, але вимагає хорошого розуміння специфікаторів шляхів Linux.

  • ./d0 те саме, що й d0, наприклад, каталог з іменем d0 у каталозі автозавантаження

  • ../d1 посилається на каталог d1 у батьківському каталозі

  • ../../d2 посилається на каталог d2 у батьківському елементі батьківського каталогу

  • ../../../d3 etc.

За допомогою [RS274NGC]SUBROUTINE_PATH можна вказати кілька каталогів, розділивши їх двокрапкою. Наступний приклад ілюструє формат для декількох каталогів і показує використання відносних та абсолютних шляхів.

Приклад кількох каталогів:
[RS274NGC]SUBROUTINE_PATH = ../../nc_files/ngcgui_lib:../../nc_files/ngcgui_lib/utilitysubs:/tmp/tmpngc

Це один довгий рядок, не продовжуйте на кількох рядках. Коли LinuxCNC та/або NGCGUI шукають файли, використовується перший знайдений файл.

LinuxCNC (та NGCGUI) повинні мати можливість знаходити всі підпрограми, включаючи допоміжні підпрограми, які викликаються з підфайлів NGCGUI. Зручно розміщувати підпрограми утиліт в окремому каталозі, як показано у прикладі вище.

Дистрибутив містить каталог ngcgui_lib та демонстраційні файли для преамбул, підфайлів, пост-амбул та допоміжних файлів. Щоб змінити поведінку файлів, ви можете скопіювати будь-який файл і розмістити його в попередній частині шляху пошуку. Першим каталогом, який шукається, є [DISPLAY]PROGRAM_PREFIX. Ви можете використовувати цей каталог, але краще створити спеціальні каталоги та розмістити їх на початку [RS274NGC]SUBROUTINE_PATH.

У наступному прикладі файли з /home/myname/linuxcnc/mysubs будуть знайдені раніше за файли з ../../nc_files/ngcgui_lib.

Приклад додавання каталогу користувачів:
[RS274NGC]SUBROUTINE_PATH = /home/myname/linuxcnc/mysubs:../../nc_files/ngcgui_lib:../../nc_files/ngcgui_lib/utilitysubs`

Нові користувачі можуть ненавмисно спробувати використовувати файли, які не відповідають вимогам NGCGUI. NGCGUI, ймовірно, повідомить про численні помилки, якщо файли не кодовані відповідно до його конвенцій. Згідно з передовою практикою, підфайли, сумісні з NGCGUI, слід розміщувати в спеціальному каталозі, а преамбули, пост-амбули та допоміжні файли — в окремому каталозі (каталогах), щоб уникнути спроб використовувати їх як підфайли. Файли, не призначені для використання як підфайли, можуть містити спеціальний коментар: «(not_a_subfile)», щоб NGCGUI автоматично відхиляв їх із відповідним повідомленням.

5.6. Зведена інформація про елементи INI-файлу для використання NGCGUI

[RS274NGC]SUBROUTINE_PATH = dirname1:dirname2:dirname3 …

Приклад: [RS274NGC]SUBROUTINE_PATH = ../../nc_files/ngcgui_lib:../../nc_files/ngcgui_lib/utilitysubs
Примітка: Необов’язково, але дуже корисно для впорядкування підфайлів та файлів утиліт.

[RS274NGC]USER_M_PATH = dirname1:dirname2:dirname3 …

Приклад: [RS274NGC]USER_M_PATH = ../../nc_files/ngcgui_lib/mfiles
Примітка: Необов’язково, потрібно для пошуку власних M-файлів користувача.

[DISPLAY]EMBED_TAB_NAME = ім’я для відображення на вбудованій вкладці

Приклад: [DISPLAY]EMBED_TAB_NAME = Pyngcgui
Примітка: Записи: EMBED_TAB_NAME, EMBED_TAB_COMMAND, EMBED_TAB_LOCATION визначають вбудовану програму для кількох графічних інтерфейсів LinuxCNC.

[DISPLAY]EMBED_TAB_COMMAND = назва програми, а потім аргументи

Приклад: [DISPLAY]EMBED_TAB_COMMAND = gladevcp -x {XID} pyngcgui_axis.ui
Примітка: Щодо програм GladeVCP див. Розділ GladeVCP.

[DISPLAY]EMBED_TAB_LOCATION = name_of_location

Приклад: [DISPLAY]EMBED_TAB_LOCATION = notebook_main
Примітка: Див. приклади INI-файлів для можливих розташувань.
Не потрібно для графічного інтерфейсу AXIS.

[DISPLAY]PROGRAM_PREFIX = dirname

Приклад: [DISPLAY]PROGRAM_PREFIX = ../../nc_files
Примітка: Обов’язковий та необхідний для численних функцій LinuxCNC.
Це перший каталог, який використовується під час пошуку файлів.

[DISPLAY]TKPKG = NGCGUI version_number

Приклад: [DISPLAY]TKPKG = Ngcgui 1.0
Примітка: Потрібно лише для вбудовування графічного інтерфейсу AXIS.
Визначає завантаження вкладок NGCGUI AXIS.

[DISPLAY]NGCGUI_FONT = font_descriptor

Приклад: [DISPLAY]NGCGUI_FONT = Helvetica -12 normal
Примітка: Опціонально, font_descriptor є tcl-сумісним специфікатором шрифту з елементами для fonttype -fontsize fontweight.
За замовчуванням: Helvetica -10 normal.
Менші розміри шрифту можуть бути корисними для невеликих екранів.
Більші розміри шрифту можуть бути корисними для додатків з сенсорним екраном.

[DISPLAY]NGCGUI_SUBFILE = subfile_filename

Приклад: [DISPLAY]NGCGUI_SUBFILE = simp.ngc
Приклад: [DISPLAY]NGCGUI_SUBFILE = square.gcmc
Приклад: [DISPLAY]NGCGUI_SUBFILE = ""
Примітка: Використовуйте один або кілька елементів, щоб вказати сумісні з NGCGUI підфайли або програми gcmc, які вимагають вкладки під час запуску.
Вкладка «Custom» буде створена, якщо ім’я файлу «».
Користувач може використовувати вкладку «Custom», щоб переглянути файлову систему та визначити файли преамбули, підфайли та пост-амбули.

[DISPLAY]NGCGUI_PREAMBLE = preamble_filename

Приклад: [DISPLAY]NGCGUI_PREAMBLE = in_std.ngc
Примітка: Необов’язково, якщо вказано, файл додається до підфайлу.
Файли, створені за допомогою вкладок «Custom», використовують преамбулу, вказану на сторінці.

[DISPLAY]NGCGUI_POSTAMBLE = postamble_filename

Приклад: [DISPLAY]NGCGUI_POSTAMBLE = bye.ngc
Примітка: Необов’язково, якщо вказано, файл додається до підфайлів.
Файли, створені за допомогою вкладок «Custom», використовують пост-амбле, вказаний на сторінці.

[DISPLAY]NGCGUI_OPTIONS = opt1 opt2 …

Приклад: [DISPLAY]NGCGUI_OPTIONS = nonew noremove
Примітка: Кілька опцій розділяються пробілами.
За замовчуванням NGCGUI налаштовує вкладки таким чином, щоб:
1) користувач може створювати нові вкладки;
2) користувач може вилучати вкладки (окрім останньої, що залишилася);
3) фіналізовані файли автоматично надсилаються до LinuxCNC;
4) Для відображення зображення для підфайлу (якщо зображення надано) надається фрейм зображення (iframe);
5) Файл результатів NGCGUI, надісланий до LinuxCNC, завершується кодом M2 (і спричиняє побічні ефекти M2).

Опції nonew, noremove, noauto, noiframe, nom2 відповідно вимикають ці типові поведінки.

За замовчуванням, якщо файл зображення (.png,.gif,jpg,pgm) знаходиться в тому ж каталозі, що і підфайл, зображення відображається в iframe. Вказавши опцію noiframe, ви отримаєте доступ до додаткових кнопок для вибору преамбули, підфайлу та пост-амбули, а також до додаткових прапорців. Вибір прапорців завжди доступний за допомогою спеціальних клавіш:
Ctrl-R Перемикання «Зберегти значення при читанні підфайлу»,
Ctrl-E Перемикання «Розгорнути підпрограму»,
Ctrl-a Перемикання «Автовідправлення»,
Ctrl-k Перелік усіх клавіш і функцій.

Якщо вказано noiframe і знайдено файл зображення, зображення відображається в окремому вікні, а всі функції доступні на вкладці. Параметри NGCGUI_OPTIONS застосовуються до всіх вкладок NGCGUI, за винятком того, що параметри nonew, noremove та noiframe не застосовуються до вкладок «Custom». Не використовуйте вкладки «Custom», якщо ви хочете обмежити можливість користувача вибирати підфайли або створювати додаткові вкладки.

[DISPLAY]GCMC_INCLUDE_PATH = dirname1:dirname2:…

Приклад: [DISPLAY]GCMC_INCLUDE_PATH = /home/myname/gcmc_includes:/home/myname/gcmc_includes2
Примітка: Необов’язково, кожен каталог буде включено при виклику gcmc з використанням опції: --include dirname.

FIXME Keyboard shortcuts do not work in version _fr.

6. Вимоги до файлів для сумісності з NGCGUI

6.1. Вимоги до підпрограми однофайлового G-коду (.ngc)

Субфайл, сумісний з NGCGUI, містить одне визначення підпрограми. Ім’я підпрограми повинно збігатися з іменем файлу (без суфікса .ngc). LinuxCNC підтримує іменовані або пронумеровані підпрограми, але тільки іменовані підпрограми сумісні з NGCGUI. Для отримання додаткової інформації див. розділ O-Codes.

Перший рядок без коментарів має бути оператором sub.
Останній рядок без коментарів має бути оператором endsub.

examp.ngc:
(info: info_text_to_appear_at_top_of_tab_page)
; коментар, що починається з крапки з комою
( коментар, що використовує дужки)
o<examp> sub
  BODY_OF_SUBROUTINE
o<examp> endsub
; коментар, що починається з крапки з комою
( коментар, що використовує дужки)

Тіло підпрограми повинно починатися з набору операторів, що визначають локальні іменовані параметри для кожного позиційного параметра, очікуваного для виклику підпрограми. Ці визначення повинні бути послідовними, починаючи з № 1 і закінчуючи останнім використаним номером параметра. Визначення повинні бути надані для кожного з цих параметрів (без пропусків).

Нумерація параметрів
#<xparm> = #1
#<yparm> = #2
#<zparm> = #3

LinuxCNC вважає всі пронумеровані параметри в діапазоні від #1 до #30 параметрами виклику, тому NGCGUI надає поля введення для будь-якого входження параметрів у цьому діапазоні. Рекомендується уникати використання пронумерованих параметрів від #1 до #30 в будь-якому іншому місці підпрограми. Для всіх внутрішніх змінних рекомендується використовувати локальні іменовані параметри.

Кожен визначальний оператор може за бажанням містити спеціальний коментар та значення за замовчуванням для параметра.

Прототип заяви
#<vname> = #n (=default_value)
or
#<vname> = #n (comment_text)
or
#<vname> = #n (=default_value comment_text)
Приклади параметрів
#<xparm> = #1 (=0.0)
#<yparm> = #2 (Ystart)
#<zparm> = #3 (=0.0 Z start setting)

Якщо вказано значення_за_замовчуванням, воно буде введено в поле введення параметра під час запуску. Якщо включено текст_коментара, він буде використано для ідентифікації вхідних даних замість назви параметра.

Глобальні іменовані параметри

Примітки щодо глобальних іменованих параметрів та NGCGUI:

(Глобальні іменовані параметри мають початкове підкреслення в назві, наприклад #<_someglobalname>)

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

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

FIXME are input global named parameters supported or not ?

NGCGUI підтримує деякі глобальні іменовані параметри введення, але їх використання застаріло та тут не задокументовано.

Хоча введення глобальних іменованих параметрів не рекомендується, підпрограми LinuxCNC повинні використовувати глобальні іменовані параметри для повернення результатів. Оскільки підфайли, сумісні з NGCGUI, призначені для використання в графічному інтерфейсі, значення повернення не є загальною вимогою. Однак NGCGUI корисний як інструмент тестування підпрограм, які повертають глобальні іменовані параметри, і підфайли, сумісні з NGCGUI, зазвичай викликають файли підпрограм утиліт, які повертають результати з глобальними іменованими параметрами.

Для підтримки цих випадків використання NGCGUI ігнорує глобальні іменовані параметри, що містять у своїй назві символ двокрапки (:). Використання двокрапки (:) у назві заважає NGCGUI створювати поля введення для цих параметрів.

Приклад глобальних іменованих параметрів
o<examp> sub
...
#<_examp:result> = #5410       (повернути поточний діаметр інструменту)
...
o<helper> call [#<x1>] [#<x2>] (call a subroutine)
#<xresult> = #<_helper:answer> (негайно локалізувати глобальний результат допоміжної функції)
#<_helper:answer> = 0.0        (обнулити глобальний іменований параметр, який використовується підпрограмою)
...
o<examp> endsub

У наведеному вище прикладі підпрограма утиліти буде знаходитися в окремому файлі з назвою helper.ngc. Допоміжна процедура повертає результат у глобальному іменованому параметрі з назвою #<_helper:answer.

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

NGCGUI підтримує створення та об’єднання декількох функцій для підфайлу та для декількох підфайлів. Іноді для підфайлів корисно визначати їх порядок під час виконання, тому NGCGUI вставляє спеціальний глобальний параметр, який можна перевірити в підпрограмах. Параметр має назву #<_feature:>. Його значення починається з 0 і збільшується для кожної доданої функції.

Додаткові функції

Спеціальний коментар «info» можна включити будь-де в підфайл, сумісний з NGCGUI. Формат такий:

(info: info_text)

Інформаційний текст (info_text) відображається у верхній частині вкладки NGCGUI в AXIS.

Файли, не призначені для використання як підфайли, можуть містити спеціальний коментар, щоб NGCGUI автоматично відхиляв їх відповідним повідомленням.

(not_a_subfile)

До підфайлу можна додати додатковий файл зображення (.png, .gif, .jpg, .pgm). Файл зображення може допомогти уточнити параметри, що використовуються підфайлом. Файл зображення повинен знаходитися в тому ж каталозі, що і підфайл, і мати те ж ім’я з відповідним розширенням для зображень, наприклад, підфайл example.ngc може супроводжуватися файлом зображення examp.png. NGCGUI намагається змінити розмір великих зображень шляхом під вибірки до розміру з максимальною шириною 320 і максимальною висотою 240 пікселів.

Жодна з умовних домовленостей, необхідних для створення підфайлу, сумісного з NGCGUI, не виключає його використання як файлу підпрограм загального призначення для LinuxCNC.

Дистрибутив LinuxCNC містить бібліотеку (каталог ngcgui_lib), яка включає як приклади підфайлів, сумісних з NGCGUI, так і файли утиліт для ілюстрації можливостей підпрограм LinuxCNC та використання NGCGUI. Інша бібліотека (gcmc_lib) містить приклади файлів підпрограм для метакомпілятора G-коду (gcmc).

Додаткові підпрограми, створені користувачем, можна знайти на форумі в розділі «Підпрограми».

6.2. Вимоги до файлу G-code-meta-compiler (.gcmc)

Файли для Gcode-meta-compiler (gcmc) зчитуються NGCGUI, який створює поля введення для змінних, позначених у файлі. Коли функція для файлу завершена, NGCGUI передає файл як вхідні дані до компілятора gcmc, і, якщо компіляція проходить успішно, отриманий файл G-коду надсилається до LinuxCNC для виконання. Результуючий файл форматується як підпрограма з одним файлом; файли .gcmc і .ngc можуть бути змішані NGCGUI.

Змінні, визначені для включення до NGCGUI, позначені рядками, які відображатимуться як коментарі для компілятора gcmc.

Формати змінних тегів
//ngcgui: varname1 =
//ngcgui: varname2 = value2
//ngcgui: varname3 = value3, label3;
Приклади змінних тегів
//ngcgui: zsafe =
//ngcgui: feedrate = 10
//ngcgui: xl = 0, x limit

У цих прикладах поле введення для varname1 не матиме значення за замовчуванням, поле введення для varname2 матиме значення за замовчуванням value2, а поле введення для varname 3 матиме значення за замовчуванням value 3 і мітку label3 (замість varname3). Значення за замовчуванням повинні бути числами.

Щоб полегшити модифікацію дійсних рядків у файлі gcmc, допускаються альтернативні формати тегів. Альтернативні формати ігнорують кінцеві крапки з комою (;) та кінцеві маркери коментарів (//). Завдяки цьому часто можна просто додати тег //ngcgui: до існуючих рядків у файлі .gcmc.

Альтернативні формати змінних тегів
//ngcgui: varname2 = value2;
//ngcgui: varname3 = value3; //, label3;
Приклади альтернативних змінних тегів
//ngcgui: feedrate = 10;
//ngcgui: xl = 0; //, x limit

Інформаційний рядок, який відображатиметься у верхній частині сторінки вкладки, може бути додатково позначений рядком з таким тегом:

Інформаційний день
//ngcgui: info: text_to_appear_at_top_of_tab_page

За потреби, опції можна передати компілятору gcmc за допомогою рядка з тегом:

Формат тегу рядка опції
//ngcgui: -option_name [ [=] option_value]
Приклади тегів рядка опцій
//ngcgui: -I
//ngcgui: --imperial
//ngcgui: --precision 5
//ngcgui: --precision=6

Параметри для gcmc доступні за допомогою команди терміналу:

gcmc --help

Програма gcmc за замовчуванням використовує метричний режим. Режим можна встановити в дюймах за допомогою налаштування опції:

//ngcgui: --imperial

Файл преамбули, якщо він використовується, може встановити режим (g20 або g21), який конфліктує з режимом, що використовується файлом gcmc. Щоб переконатися, що режим програми gcmc діє, включіть наступну інструкцію у файл .gcmc:

include("ensure_mode.gcmc")

та вкажіть правильний шлях для gcmc include_files у INI-файлі, наприклад:

[DISPLAY]
GCMC_INCLUDE_PATH = ../../nc_files/gcmc_lib

7. Приклад DB25

Далі показано підпрограму DB25. На першому фото ви бачите, де потрібно заповнити пробіли для кожної змінної.

images/ngcgui-db25-1.png

На цьому фото показано задню схему підпрограми DB25.

images/ngcgui-db25-2.png

На цьому фото показано використання нової кнопки та вкладки "Налаштування" для створення трьох вирізів DB25 в одній програмі.

images/ngcgui-db25-3.png

8. Створення підпрограми

  • Для створення підпрограми для використання з NGCGUI ім’я файлу та ім’я підпрограми мають збігатися.

  • Файл має бути поміщений у підкаталог, на який вказує INI-файл.

  • У першому рядку може бути коментар типу info:

  • Підпрограма має бути оточена тегами sub та endsub.

  • Використані змінні повинні бути пронумерованими змінними та не повинні пропускати номер.

  • Можуть бути включені коментарі та пресети.

Приклад скелета підпрограми
(info: simp -- simple exemple de sous-programme -- Ctrl-U pour éditer)
o<simp> sub
  #<ra>       = #1 (=.6 Rayon A) ;Приклад параметра з коментарем
  #<radius_b> = #2 (=0.4)         ;Приклад параметра без коментарів
  #<feedrate> = #3 (Feedrate)     ;Приклад параметра без попереднього налаштування
  g0x0y0z1
  g3 i#<ra> f#<feedrate>
  g3 i[0-#<radius_b>]
o<simp> endsub

vim: set syntax=asciidoc: