1. Вступ

Gscreen — це інфраструктура для відображення спеціального екрана для керування LinuxCNC. Gscreen багато запозичує з GladeVCP. GladeVCP використовує редактор віджетів GTK GLADE для створення віртуальних панелей керування (VCP) за допомогою миші. Gscreen поєднує це з програмуванням на Python для створення графічного інтерфейсу користувача для керування верстатом з CNC.

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

Gscreen Mill на основі екрану
Figure 1. Стандартний екран Gscreen
Екран Silverdragon Gscreen
Figure 2. Екран Silverdragon Gscreen
Gscreen Spartan Screen
Figure 3. Gscreen Spartan Screen
Екран Gscreen Gaxis
Figure 4. Екран Gscreen Gaxis
Промисловий екран Gscreen
Figure 5. Промисловий екран Gscreen

Gscreen базується на «Glade» (редакторі), «PyGTK» (наборі інструментів для створення віджетів) та «GladeVCP» (з’єднанні LinuxCNC з Glade та PyGTK). GladeVCP має кілька спеціальних віджетів та дій, доданих спеціально для LinuxCNC. Віджет — це загальна назва, яка використовується для кнопок, повзунків, міток тощо набору інструментів PyGTK.

1.1. Щасливий файл

Файл Glade — це текстовий файл, організований за стандартом XML, який описує макет і віджети екрана. PyGTK використовує цей файл для фактичного відображення та реагування на ці віджети. Редактор Glade дозволяє відносно легко створювати та редагувати цей файл. Ви повинні використовувати редактор Glade 3.38.2, який використовує віджети GTK3.

1.2. PyGTK

PyGTK — це зв’язування Python з GTK. GTK — це «інструментарій» візуальних віджетів, він запрограмований на C. PyGTK використовує Python для «зв’язування» з GTK.

2. GladeVCP

GladeVCP об’єднує LinuxCNC, HAL, PyGTK і Glade. LinuxCNC потребує деяких спеціальних віджетів, тому GladeVCP їх надає. Багато з них є просто розширеннями HAL для існуючих віджетів PyGTK. GladeVCP створює контакти HAL для спеціальних віджетів, описаних у файлі Glade. GladeVCP також дозволяє додавати команди Python для взаємодії з віджетами, щоб вони виконували дії, недоступні в їх стандартній формі. Якщо ви можете створити панель GladeVCP, ви можете налаштувати Gscreen!

2.1. Огляд

Існує два файли, які можна використовувати окремо або в поєднанні для додавання налаштувань. Локальні файли Glade та файли обробників. Зазвичай Gscreen використовує стандартний файл Glade та, можливо, файл обробника (якщо використовується зразок «шкіри»). Ви можете вказати Gscreen використовувати «локальні» файли Glade та обробників. Gscreen шукає в папці, яка містить усі файли конфігурації для вибраної вами конфігурації.

Локальні файли Glade

Якщо вони присутні, замість стандартних файлів Glade будуть завантажені локальні файли Glade з папки конфігурації. Локальні файли Glade дозволяють використовувати власні дизайни замість стандартних екранів. В INI-файлі є перемикач для встановлення базового імені: -c name, щоб Gscreen шукав MYNAME.glade та MYNAME_handler.py.

Ви можете вказати Gscreen просто завантажити файл Glade і не підключати до нього внутрішні сигнали. Це дозволяє gscreen завантажувати будь-який файл Glade, збережений GTK builder. Це означає, що ви можете відображати повністю налаштований екран, але для цього потрібно використовувати файл обробника. Gscreen використовує файл Glade для визначення віджетів, щоб відображати їх і взаємодіяти з ними. Багато з них мають конкретні імена, інші мають загальні імена, надані Glade. Якщо віджет буде відображатися, але ніколи не змінюватиметься, то загальне ім’я підійде. Якщо потрібно керувати віджетом або взаємодіяти з ним, то йому надається, сподіваємося, цілеспрямоване ім’я (усі імена повинні бути унікальними). Віджети також можуть мати сигнали, визначені для них у редакторі GLADE. Він визначає, який сигнал подається і який метод викликати.

Зміна стандартних скінів

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

Файли обробників

Файл обробника — це файл, що містить код Python, який Gscreen додає до своїх стандартних процедур. Файл обробника дозволяє змінювати стандартні налаштування або додавати логіку до оболонки Gscreen без необхідності змінювати сам Gscreen. Ви можете комбінувати нові функції з функціями Gscreen, щоб змінювати поведінку на свій розсуд. Ви можете повністю обійти всі функції Gscreen і змусити його працювати зовсім по-іншому. Якщо присутній файл обробника з назвою gscreen_handler.py (або MYNAME_handler.py, якщо використовується перемикач INI), він буде завантажений і зареєстрований. Допускається лише один файл. Gscreen шукає файл обробника, і якщо його знаходить, то шукає конкретні імена функцій і викликає їх замість стандартних. Якщо ви додаєте віджети, ви можете налаштувати виклики сигналів з редактора Glade для виклику процедур, які ви написали у файлі обробника. Таким чином ви можете отримати налаштовану поведінку. Процедури обробника можуть викликати процедури Gscreen за замовчуванням, як до, так і після виконання власного коду. Таким чином ви можете додати додаткову поведінку, наприклад додавання звуку. Дивіться розділ GladeVCP для ознайомлення з основами файлів обробника GladeVCP. Gscreen використовує дуже схожу техніку.

Теми

Gscreen використовує інструментарій PyGTK для відображення екрану. PyGTK — це зв’язок мови Python із GTK. GTK підтримує «теми». Теми — це спосіб змінити зовнішній вигляд і відчуття від віджетів на екрані. Наприклад, за допомогою тем можна змінити колір або розмір кнопок і повзунків. В Інтернеті доступно багато тем GTK. Теми також можна налаштовувати для зміни зовнішнього вигляду певних віджетів. Це тісніше пов’язує файл теми з файлом Glade. Деякі зразки оболонок екрану дозволяють користувачеві вибирати будь-яку з тем у системі. Зразок «gscreen» є прикладом. Деякі завантажують тему з такою ж назвою у файлі конфігурації. Зразок «gscreen-gaxis» є прикладом. Це робиться шляхом розміщення папки теми в папці конфігурації, яка містить файли INI та HAL, і присвоєння їй імені: SCREENNAME_theme (SCREENNAME — це базова назва файлів, наприклад gaxis_theme). Усередині цієї папки є інша папка під назвою gtk-2.0, всередині якої знаходяться файли теми. Якщо ви додасте цей файл, Gscreen за замовчуванням буде використовувати цю тему при запуску. gscreen-gaxis має зразок настроюваної теми, яка шукає певні віджети з іменами та змінює візуальну поведінку цих конкретних віджетів. Кнопки Estop та machine-on використовують інші кольори, ніж решта кнопок, щоб вони виділялися. Це робиться у файлі обробника, надаючи їм конкретні імена та додаючи конкретні команди у файл gtkrc теми. Детальнішу інформацію про теми GTK (зразкова тема використовує механізм тем pixmap) див.: GTK Themes, Pixmap Theme Engine.

2.2. Створіть панель GladeVCP

Gscreen — це просто велика складна панель GladeVCP з кодом на Python для керування нею. Щоб налаштувати її, нам потрібно завантажити файл Glade в редактор Glade.

Встановлено LinuxCNC

Якщо у вас встановлено LinuxCNC 2.6+ на Ubuntu 10.04, просто запустіть редактор Glade з меню програм або з терміналу. Новіші версії Linux вимагатимуть встановлення Glade 3.8.0 - 3.8.6 (можливо, вам доведеться самостійно скомпілювати його).

Команди, скомпільовані RIP

Використовуючи скомпільовану з вихідного коду версію LinuxCNC, відкрийте термінал і cd у верхній частині папки LinuxCNC. Налаштуйте середовище, ввівши . ./scripts/rip-environment, а тепер введіть glade. У терміналі з’явиться низка попереджень, які можна проігнорувати, і редактор має відкритися. Стандартний файл Gscreen Glade знаходиться в: src/emc/usr_intf/gscreen/, зразки скінів знаходяться в /share/gscreen/skins/. Його слід скопіювати в папку конфігурації. Або ви можете створити чистий файл Glade, збереживши його в папці конфігурації.

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

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

Gscreen максимально використовує віджети GladeVCP, щоб уникнути додавання коду Python. Необхідно ознайомитися з віджетами GladeVCP. Якщо існуючі віджети надають вам потрібні функції, то додавати код Python не потрібно, просто збережіть файл Glade у вашій папці конфігурації. Якщо вам потрібно щось більш індивідуальне, то вам доведеться написати код Python. Ім’я батьківського вікна має бути window1. Gscreen використовує це ім’я.

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

3. Створення простого користувацького екрану з чистого аркуша

простий у використанні екран Gscreen

Давайте створимо простий зручний екран. Зробіть це в редакторі Glade (якщо використовуєте пакет RIP, запустіть його з терміналу після використання .scripts/rip-environment).

Що слід зазначити:
  • Вікно верхнього рівня має мати ім’я за замовчуванням, «window1» — Gscreen покладається на це.

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

  • Після додавання дій нам потрібно пов’язати кнопки з діями, щоб вони працювали (див. нижче).

  • Віджет gremlin не має розміру за замовчуванням, тому встановлення запитуваного розміру корисне (див. нижче).

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

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

  • Типи кнопок, які слід використовувати, залежать від використовуваної VCP_action – наприклад, vcp_toggle_action зазвичай вимагає кнопок-перемикачів (поки що дотримуйтесь прикладу).

  • Кнопки в цьому прикладі звичайні, а не кнопки HAL. Нам не потрібні контакти HAL.

Тестер редактора Glade.glade

На цьому екрані ми використовуємо VCP_actions для передачі LinuxCNC необхідних нам дій. Це дозволяє нам використовувати стандартні функції без додавання коду Python у файл обробника. Давайте пов’яжемо кнопку перемикання estop з дією estop Виберіть кнопку перемикання estop і на вкладці «Загальні» знайдіть «Пов’язана дія» та натисніть кнопку поруч із нею. Тепер виберіть дію перемикання estop. Тепер кнопка буде вмикати та вимикати estop при натисканні. На вкладці «Загальні» ви можете змінити текст мітки кнопки, щоб описати її функцію. Зробіть це для всіх кнопок.

Виберіть віджет gremlin, перейдіть на вкладку «Загальні» та встановіть потрібну висоту на 100, а потім поставте прапорець поруч із ним.

Клацніть горизонтальний блок, який містить кнопки. Перейдіть на вкладку упаковки та натисніть «розгорнути» на «Ні».

Збережіть його як tester.glade і збережіть у папці sim/gscreen/gscreen_custom/. Тепер запустіть LinuxCNC, натисніть sim/gscreen/gscreen_custom/tester і запустіть його. Якщо все йде добре, з’явиться наш екран і кнопки будуть працювати. Це працює, тому що tester.ini вказує gscreen шукати і завантажувати tester.glade і tester_handler.py. Файл tester_handler.py знаходиться в цій папці і кодований так, щоб просто показувати екран і не більше того. Оскільки спеціальні віджети безпосередньо спілкуються з LinuxCNC, ви все ще можете робити корисні речі. Якщо ваші потреби в екрані покриваються доступними спеціальними віджетами, то це все, що вам потрібно для створення екрану. Якщо ви хочете чогось більше, є ще багато хитрощів, починаючи від простого додавання «викликів функцій» для отримання стандартної поведінки. До написання власного коду Python для налаштування саме того, що ви хочете. Але це означає вивчення файлів обробників.

4. Приклад файлу обробника

Існують спеціальні функції, на наявність яких Gscreen перевіряє файл обробника. Якщо ви додасте їх до свого файлу обробника, Gscreen викликатиме їх замість внутрішніх однойменних функцій gscreen.

  • initialize_preferences(self): Ви можете встановити нові процедури налаштувань.

  • initialize_keybindings(self) Ви можете встановити нові процедури прив’язки клавіш. У більшості випадків вам не потрібно це робити, ви захочете замінити окремі виклики прив’язки клавіш. Ви також можете додати більше прив’язок клавіш, які будуть викликати довільну функцію.

  • initialize_pins(self): створює / ініціалізує піни HAL

  • connect_signals(self,handlers): Якщо ви використовуєте екран, який повністю відрізняється від стандартного Gscreen, ви повинні додати це, інакше gscreen буде намагатися підключити сигнали до віджетів, яких немає. Стандартна функція Gscreen викликається за допомогою self.gscreen.connect_signals(handlers). Якщо ви хочете просто додати додаткові сигнали до свого екрану, але все одно хочете використовувати стандартні, спочатку викличте цю функцію, а потім додайте більше сигналів. Якщо ваші сигнали прості (не передаються дані користувача), ви також можете використовувати вибір сигналів Glade в редакторі Glade.

  • initialize_widgets(self): Ви можете використовувати це для налаштування будь-яких віджетів. Gscreen зазвичай викликає self.gscreen.initialize_widgets(), що фактично викликає багато окремих функцій. Якщо ви бажаєте включити деякі з цих віджетів, просто викличте ці функції безпосередньо. Або додайте self.gscreen.init_show_windows(), щоб віджети просто відображалися. Потім, якщо бажаєте, ініціалізуйте/налаштуйте свої нові віджети.

  • initialize_manual_toolchange(self): дозволяє повністю оновити систему ручної зміни інструменту.

  • set_restart_line(self.line):

  • timer_interrupt(self): дозволяє повністю перевизначити процедуру переривання. Це використовується для виклику periodic() та перевірки на наявність помилок з linuxcnc.status.

  • check_mode(self): використовується для перевірки режиму роботи екрана. Повертає список[] 0 - ручний режим 1 - mdi 2 - автоматичний режим 3 - повільний режим.

  • on_tool_change(self,widget): Ви можете використовувати це для перевизначення діалогового вікна ручної зміни інструменту — воно викликається, коли gscreen.tool-change змінює стан.

  • dialog_return(self,dialog_widget,displaytype,pinname): Використовуйте це для перевизначення будь-якого повідомлення користувача або діалогового вікна ручної зміни інструменту. Викликається, коли діалогове вікно закрито.

  • periodic(self): Викликається кожні (за замовчуванням 100) мілісекунд. Використовуйте його для оновлення ваших віджетів/контактів HAL. Ви також можете викликати Gscreen regular periodic після цього, self.gscreen.update_position() або просто додати pass, щоб нічого не оновлювати. Функція update_position() Gscreen насправді викликає багато окремих функцій. Якщо ви хочете включити деякі з цих віджетів, просто викличте ці функції безпосередньо.

Ви також можете додати власні функції для виклику в цьому файлі. Зазвичай ви додаєте сигнал до віджета для виклику вашої функції.

4.1. Додавання функцій комбінацій клавіш

Наш приклад тестувальника був би кориснішим, якби він реагував на команди клавіатури. Існує функція keybindings(), яка намагається це налаштувати. Хоча ви можете повністю її замінити, ми цього не зробили, але вона передбачає деякі речі:

  • Припускається, що кнопка перемикання estop називається button_estop, і що нею керує клавіша F1.

  • Припускається, що кнопка живлення називається «button_machine_on», і нею керує клавіша F2.

Це легко виправити, перейменувавши кнопки в редакторі Glade відповідно. Але замість цього ми перевизначимо стандартні виклики та додамо свої власні.

Додайте ці команди до файлу обробника:

# перевизначення функцій Gscreen
# виклики комбінацій клавіш
def on_keycall_ESTOP(self,state,SHIFT,CNTRL,ALT):
  if state: # only if pressed, not released
    self.widgets.togglebutton1.emit('activate')
    self.gscreen.audio.set_sound(self.data.alert_sound)
    self.gscreen.audio.run()
    return True # stop progression of signal to other widgets
def on_keycall_POWER(self,state,SHIFT,CNTRL,ALT):
  if state:
    self.widgets.togglebutton2.emit('activate')
    return True
def on_keycall_ABORT(self,state,SHIFT,CNTRL,ALT):
  if state:
    self.widgets.button3.emit('activate')
    return True

Тепер ми перезаписали виклики функцій Gscreen з однаковою назвою і обробляємо їх у нашому файлі обробника. Тепер ми посилаємося на віджети за назвою, яку використовували в редакторі Glade. Ми також додали вбудовану функцію gscreen, щоб видавати звук при зміні Estop. Зверніть увагу, що для виклику вбудованих функцій Gscreen ми повинні використовувати self.gscreen.[FUNCTION NAME](). Якщо ми використали self.[FUNCTION NAME](), це викликало б функцію в нашому файлі обробника.

Додамо ще одне призначення клавіші, яке завантажує Halmeter при натисканні F4.

У файлі обробника в розділі def initialize_widgets(self): змініть на:

  def initialize_widgets(self):
    self.gscreen.init_show_windows()
    self.gscreen.keylookup.add_conversion('F4','TEST','on_keycall_HALMETER')

Потім додайте ці функції до класу HandlerClass:

  def on_keycall_HALMETER(self,state,SHIFT,CNTRL,ALT):
    if state:
      self.gscreen.on_halmeter()
      return True

Це додає перетворення комбінації клавіш, яке наказує gscreen викликати on_keycall_HALMETER при натисканні F4. Потім ми додаємо функцію до файлу дескрипторів, щоб викликати вбудовану функцію Gscreen для запуску halmeter.

4.2. Стан Linuxcnc

Модуль «Gstat» опитує стан LinuxCNC кожні 100 мс і надсилає повідомлення зворотного виклику до функцій користувача, коли стан змінюється. Ви можете зареєструвати повідомлення, щоб діяти при певних змінах стану. Як приклад, ми зареєструємося, щоб отримувати повідомлення «file-loaded», коли LinuxCNC завантажує новий файл. Спочатку ми повинні імпортувати модуль і створити його екземпляр: У розділі імпорту файлу обробника додайте:

from hal_glib import GStat
GSTAT = GStat()

У файлі обробника в розділі def __init__(self): додайте:

GSTAT.connect('file-loaded', self.update_filepath)

Потім у HandlerClass додайте функцію:

self.update_filepath(self, obj, path):
    self.widgets.my_path_label.set_text(path)

Коли LinuxCNC завантажує новий файл, Gstat надсилає повідомлення зворотного виклику до функції «update_filepath». У цьому прикладі ми оновлюємо мітку з цим іменем шляху (припускаючи, що у файлі GLADE є мітка з іменем «my_path_label»).

4.3. Клавіші для бігу

Немає спеціальних віджетів для керування кнопками на екрані, тому нам доведеться робити це за допомогою коду Python. У функції connect_signals додайте цей код:

        for i in('x','y','z'):
            self.widgets[i+'neg'].connect("pressed", self['jog_'+i],0,True)
            self.widgets[i+'neg'].connect("released", self['jog_'+i],0,False)
            self.widgets[i+'pos'].connect("pressed", self['jog_'+i],1,True)
            self.widgets[i+'pos'].connect("released", self['jog_'+i],1,False)
        self.widgets.jog_speed.connect("value_changed",self.jog_speed_changed)

Додайте ці функції до класу HandlerClass:

    def jog_x(self,widget,direction,state):
        self.gscreen.do_key_jog(_X,direction,state)
    def jog_y(self,widget,direction,state):
        self.gscreen.do_key_jog(_Y,direction,state)
    def jog_z(self,widget,direction,state):
        self.gscreen.do_key_jog(_Z,direction,state)
    def jog_speed_changed(self,widget,value):
        self.gscreen.set_jog_rate(absolute = value)

Нарешті, додайте до файлу GLADE дві кнопки для кожної осі — одну для позитивного, одну для негативного напрямку переміщення. Назвіть ці кнопки відповідно xneg, xpos, yneg, ypos zneg, zpos. Додайте до файлу GLADE віджет SpeedControl і назвіть його jog_speed.

5. Запуск Gscreen

Gscreen — це насправді просто інфраструктура для завантаження власного файлу GladeVCP та взаємодії з ним.

  1. Gscreen зчитує параметри, з якими його було запущено.

  2. Gscreen встановлює режим налагодження та встановлює додаткову назву скіна.

  3. Gscreen перевіряє, чи є в папці конфігурації «локальні» XML-файли, файли обробників та/або файли локалізації. Він буде використовувати їх замість файлів за замовчуванням (у папці share/gscreen/skins/) (можуть відображатися два окремі екрани).

  4. Головний екран завантажується, і переклади налаштовуються. Якщо присутній, буде завантажено другий екран і переклади налаштовано.

  5. Додатковий звук ініціалізується, якщо він доступний.

  6. Він зчитує частину INI-файлу для ініціалізації одиниць вимірювання та кількості/типу осей.

  7. Ініціалізує прив’язку Python до HAL для створення компонента, що не працює в реальному часі, з назвою Gscreen.

  8. Викликається функція makepins GladeVCP для розбору XML-файлу з метою створення HAL-пінів для віджетів HAL та реєстрації підключених віджетів LinuxCNC.

  9. Перевіряє наявність «локального» файлу обробника в папці конфігурації або використовує стандартний файл з папки скіна.

  10. Якщо є файл-обробник, gscreen аналізує його та реєструє виклики функцій у просторі імен Gscreen.

  11. Glade зіставляє/реєструє всі виклики сигналів з функціями в gscreen та файлі обробника.

  12. Gscreen перевіряє INI-файл на наявність назви файлу налаштувань опцій, інакше використовується .gscreen_preferences =.

  13. Gscreen перевіряє, чи є виклик функції налаштувань (initialize_preferences(self)) у файлі обробника, інакше він використовує стандартну функцію Gscreen.

  14. Gscreen перевіряє наявність компонента ClassicLadder у реальному часі.

  15. Gscreen перевіряє наявність загальносистемної теми GTK.

  16. Gscreen збирає прирости бігової швидкості з INI-файлу.

  17. Gscreen збирає значення кутового приросту штовхання з INI-файлу.

  18. Gscreen збирає значення за замовчуванням та максимальну швидкість поштовху з INI.

  19. Gscreen збирає дані про максимальну швидкість будь-яких осей з розділу TRAJ INI.

  20. Gscreen перевіряє наявність кутових осей, а потім збирає значення швидкості за замовчуванням та максимальної швидкості з INI-файлу.

  21. Gscreen збирає всі налаштування перевизначення з INI.

  22. Gscreen перевіряє, чи це конфігурація токарного верстата з INI-файлу.

  23. Gscreen знаходить назву tool_table, tool editor та param файлу з INI.

  24. Gscreen перевіряє файл обробника на наявність функції прив’язок клавіш (initialize_keybindings(self)) або ж використовує стандартну функцію Gscreen.

  25. Gscreen перевіряє файл обробника на наявність функції пінів (initialize_pins(self)) або використовує стандартну Gscreen.

  26. Gscreen перевіряє файл обробника на наявність функції manual_toolchange (initialize_manual_toolchange(self)) або використовує стандартну версію Gscreen.

  27. Gscreen перевіряє файл обробника на наявність функції connect_signals (initialize_connect_signals(self)) або ж використовує стандартну версію Gscreen.

  28. Gscreen перевіряє файл обробника для функції віджетів (initialize_widgets(self)) або ж використовує стандартну версію Gscreen.

  29. Gscreen налаштовує повідомлення, зазначені у файлі INI.

  30. Gscreen повідомляє HAL, що компонент HAL Gscreen завершив створення пінів і готовий до роботи. Якщо на екрані є віджет терміналу, він виведе на нього всі піни Gscreen.

  31. Gscreen встановлює час циклу відображення на основі INI-файлу.

  32. Gscreen перевіряє файл обробника на наявність виклику функції timer_interupt(self), інакше використовується виклик функції Gscreen за замовчуванням.

6. Налаштування INI

Під заголовком [DISPLAY]:

DISPLAY = gscreen -c tester
  options:
   -d debugging on
   -v verbose debugging on

Перемикач -c дозволяє вибрати «шкіру». Gscreen припускає, що файл Glade і файл обробника мають однакову назву. Опціональний другий екран матиме таку саму назву з додаванням цифри 2 (наприклад, tester2.glade). Другий файл обробника не допускається. Він буде завантажений тільки в тому випадку, якщо він присутній. Gscreen шукатиме файли спочатку у файлі конфігурації LinuxCNC, який був запущений першим, а потім у системній папці скінів.

7. Повідомлення діалогового вікна користувача

Ця функція використовується для відображення спливаючих діалогових повідомлень на екрані. Вони визначені у файлі INI та контролюються контактами HAL:

MESSAGE_BOLDTEXT

зазвичай це титул.

MESSAGE_TEXT

нижче цього і зазвичай довше.

MESSAGE_DETAILS

приховано, якщо на нього не натиснути.

MESSAGE_PINNAME

– це базова назва контактів HAL.

MESSAGE_TYPE

вказує, чи це повідомлення «так/ні», «добре» чи статусне повідомлення

  • Повідомлення про стан

    • буде відображатися в рядку стану та діалоговому вікні сповіщень,

    • не потребують втручання користувача.

  • повідомлення

    • вимагати від користувача натискання кнопки «ОК», щоб закрити діалогове вікно.

    • мати один контакт HAL для запуску діалогу та один для позначення очікування відповіді.

  • повідомлення «так/ні»

    • вимагати від користувача натискання кнопок «так» або «ні» для закриття діалогового вікна.

    • мають три виводи HAL:

      1. один для відображення діалогу,

      2. один для очікування, і

      3. один за відповідь.

Ось приклад INI-коду. Він буде під заголовком [DISPLAY].

# Це просто відображається в рядку стану та спливаючому вікні сповіщень на робочому столі.
MESSAGE_BOLDTEXT = NONE
MESSAGE_TEXT = This is a statusbar test
MESSAGE_DETAILS = STATUS DETAILS
MESSAGE_TYPE = status
MESSAGE_PINNAME = statustest

# З'явиться діалогове вікно з питанням «так і ні»
MESSAGE_BOLDTEXT = NONE
MESSAGE_TEXT = This is a yes no dialog test
MESSAGE_DETAILS = Y/N DETAILS
MESSAGE_TYPE = yesnodialog
MESSAGE_PINNAME = yndialogtest

# Це з’явить діалогове вікно, яке вимагає відповіді «ОК», і воно відобразиться в рядку стану та
# у спливаючому вікні сповіщень на робочому столі.
MESSAGE_BOLDTEXT = Це короткий текст
TEXT_MESSAGE = Це довший текст тесту обох типів. Він може бути довшим за текст у рядку стану
MESSAGE_DETAILS = BOTH DETAILS
MESSAGE_TYPE = okdialog status
MESSAGE_PINNAME = bothtest

7.1. Скопіюйте файл обробника Stock/Glade для модифікації

Якщо ви хочете використовувати стандартний екран, але змінити його файл обробки, вам потрібно скопіювати стандартний файл у папку конфігураційних файлів. Gscreen побачить це і буде використовувати скопійований файл. Але де знаходиться оригінальний файл? Якщо ви використовуєте RIP LinuxCNC, зразки скінів знаходяться в /share/gscreen/skins/SCREENNAME. Встановлені версії LinuxCNC мають їх у дещо інших місцях, залежно від використовуваної дистрибуції. Простий спосіб знайти розташування — відкрити термінал і запустити екран sim, який ви хочете використовувати. У терміналі буде надруковано розташування файлів. Може бути корисно додати перемикач -d до рядка завантаження gscreen в INI.

Ось зразок:

chris@chris-ThinkPad-T500 ~/emc-dev/src $ linuxcnc
LINUXCNC - 2.7.14
Machine configuration directory is '/home/chris/emc-dev/configs/sim/gscreen/gscreen_custom'
Machine configuration file is 'industrial_lathe.ini'
Starting LinuxCNC...
Found file(lib): /home/chris/emc-dev/lib/hallib/core_sim.hal
Note: Using POSIX non-realtime
Found file(lib): /home/chris/emc-dev/lib/hallib/sim_spindle_encoder.hal
Found file(lib): /home/chris/emc-dev/lib/hallib/axis_manualtoolchange.hal
Found file(lib): /home/chris/emc-dev/lib/hallib/simulated_home.hal
**** GSCREEN WARNING: no audio alerts available - Is python-gst0.10 library installed?
**** GSCREEN INFO ini: /home/chris/emc-dev/configs/sim/gscreen/gscreen_custom/industrial_lathe.ini
**** GSCREEN INFO: Skin name = industrial

**** GSCREEN INFO:  Using SKIN glade file from /home/chris/emc-dev/share/gscreen/skins/industrial/industrial.glade ****

**** GSCREEN INFO:  No Screen 2 glade file present
**** GSCREEN INFO: handler file path: ['/home/chris/emc-dev/share/gscreen/skins/industrial/industrial_handler.py']

Лінія:

**** GSCREEN INFO: шлях до файлу обробника: ['/home/chris/emc-dev/share/gscreen/skins/industrial/industrial_handler.py']

показує, де знаходиться файл зі стандартними файлами. Скопіюйте цей файл у папку конфігурації. Це працює так само для файлу Glade.