Бібліотеки — це готові модулі Python, які надають додаткові функції QtVCP. Таким чином, ви можете вибрати потрібні функції, але вам не доведеться самостійно створювати поширені.
1. Status
Status — це бібліотека, яка надсилає повідомлення GObject на основі поточного стану LinuxCNC. Це розширення об’єкта GStat класу GladeVCP.
Він також має деякі функції для звітування про стан таких речей, як внутрішня швидкість штовхання.
Ви підключаєте виклик функції до повідомлення STATUS, яке вас цікавить, і QtVCP викличе цю функцію, коли повідомлення буде надіслано зі STATUS.
1.1. Застосування
-
Імпорт модулів
Status
Додайте цей код Python до розділу імпорту:############################ # **** РОЗДІЛ ІМПОРТ **** # ############################ з імпорту qtvcp.core Стан
-
Створення екземпляра модуля
Status
Додайте цей код Python до розділу створення екземпляра:STATUS = Status()
-
Підключення до повідомлень
STATUS
Use GObject syntax.
1.2. Приклад
Наприклад, ви можете ловити повідомлення про ввімкнення та вимкнення машини.
|
Note
|
У наведеному нижче прикладі показано два поширені способи з’єднання сигналів, один з яких використовує лямбду. lambda використовується для видалення або маніпулювання аргументами зі статусного повідомлення перед викликом функції. Ви можете побачити різницю в сигнатурі викликаної функції: та, що використовує лямбду, не приймає об’єкт статусу — лямбда не передала його функції. |
-
Помістіть ці команди в розділ
[INITIALIZE]файлу обробника Python:STATUS.connect('state-on', self.on_state_on) STATUS.connect('state-off', lambda: w, self.on_state_off())
У цьому прикладі коду, коли LinuxCNC перебуває у стані «машина увімкнена», буде викликано функцію
self.on_state_on.
Коли LinuxCNC перебуває у стані «машина вимкнена», буде викликано функціюself.on_state_off. -
Вони викликали б функції, які виглядають так:
def on_state_on(self, status_object): print('LinuxCNC machine is on') def on_state_off(self): print('LinuxCNC machine is off')
2. Info
Info — це бібліотека для збору та фільтрації даних з INI-файлу.
2.1. Доступні дані та значення за замовчуванням
LINUXCNC_IS_RUNNING
LINUXCNC_VERSION
INIPATH
INI = linuxcnc.ini(INIPATH)
MDI_HISTORY_PATH = '~/.axis_mdi_history'
QTVCP_LOG_HISTORY_PATH = '~/qtvcp.log'
MACHINE_LOG_HISTORY_PATH = '~/.machine_log_history'
PREFERENCE_PATH = '~/.Preferences'
SUB_PATH = None
SUB_PATH_LIST = []
self.MACRO_PATH = None
MACRO_PATH_LIST = []
INI_MACROS = self.INI.findall("DISPLAY", "MACRO")
IMAGE_PATH = IMAGEDIR
LIB_PATH = os.path.join(HOME, "share","qtvcp")
PROGRAM_FILTERS = None
PARAMETER_FILE = None
MACHINE_IS_LATHE = False
MACHINE_IS_METRIC = False
MACHINE_UNIT_CONVERSION = 1
MACHINE_UNIT_CONVERSION_9 = [1]*9
TRAJ_COORDINATES =
JOINT_COUNT = int(self.INI.find("KINS","JOINTS")or 0)
AVAILABLE_AXES = ['X','Y','Z']
AVAILABLE_JOINTS = [0,1,2]
GET_NAME_FROM_JOINT = {0:'X',1:'Y',2:'Z'}
GET_JOG_FROM_NAME = {'X':0,'Y':1,'Z':2}
NO_HOME_REQUIRED = False
HOME_ALL_FLAG
JOINT_TYPE = self.INI.find(section, "TYPE") or "LINEAR"
JOINT_SEQUENCE_LIST
JOINT_SYNC_LIST
JOG_INCREMENTS = None
ANGULAR_INCREMENTS = None
GRID_INCREMENTS
DEFAULT_LINEAR_JOG_VEL = 15 одиниць за хвилину
MIN_LINEAR_JOG_VEL = 60 одиниць за хвилину
MAX_LINEAR_JOG_VEL = 300 одиниць за хвилину
DEFAULT_ANGULAR_JOG_VEL =
MIN_ANGULAR_JOG_VEL =
MAX_ANGULAR_JOG_VEL =
MAX_FEED_OVERRIDE =
MAX_TRAJ_VELOCITY =
AVAILABLE_SPINDLES = int(self.INI.find("TRAJ", "SPINDLES") or 1)
DEFAULT_SPINDLE_0_SPEED = 200
MAX_SPINDLE_0_SPEED = 2500
MAX_SPINDLE_0_OVERRIDE = 100
MIN_SPINDLE_0_OVERRIDE = 50
MAX_FEED_OVERRIDE = 1.5
MAX_TRAJ_VELOCITY
2.2. Інформація про діалогове вікно повідомлення користувача
USRMESS_BOLDTEXT = self.INI.findall("DISPLAY", "MESSAGE_BOLDTEXT")
USRMESS_TEXT = self.INI.findall("DISPLAY", "MESSAGE_TEXT")
USRMESS_TYPE = self.INI.findall("DISPLAY", "MESSAGE_TYPE")
USRMESS_PINNAME = self.INI.findall("DISPLAY", "MESSAGE_PINNAME")
USRMESS_DETAILS = self.INI.findall("DISPLAY", "MESSAGE_DETAILS")
USRMESS_ICON = self.INI.findall("DISPLAY", "MESSAGE_ICON")
ZIPPED_USRMESS =
self.GLADEVCP = (self.INI.find("DISPLAY", "GLADEVCP")) or None
2.3. Інформація про вбудовану програму
TAB_NAMES = (self.INI.findall("DISPLAY", "EMBED_TAB_NAME")) or None
TAB_LOCATION = (self.INI.findall("DISPLAY", "EMBED_TAB_LOCATION")) or []
TAB_CMD = (self.INI.findall("DISPLAY", "EMBED_TAB_COMMAND")) or None
ZIPPED_TABS =
MDI_COMMAND_LIST = (heading: [MDI_COMMAND_LIST], title: MDI_COMMAND")
TOOL_FILE_PATH = (heading: [EMCIO], title:TOOL_TABLE)
POSTGUI_HALFILE_PATH = (heading: [HAL], title: POSTGUI_HALFILE)
2.4. Помічники
Є деякі допоміжні функції, які здебільшого використовуються для підтримки віджетів:
-
get_error_safe_setting(_self_, _heading_, _detail_, default=_None_) -
convert_metric_to_machine(_data_) -
convert_imperial_to_machine(_data_) -
convert_9_metric_to_machine(_data_) -
convert_9_imperial_to_machine(_data_) -
convert_units(_data_) -
convert_units_9(_data_) -
get_filter_program(_fname_) -
get_qt_filter_extensions() -
Отримати розширення фільтрів у форматі Qt.
2.5. Застосування
-
Імпорт модуля
Info
Додайте цей код Python до розділу імпорту:############################ # **** РОЗДІЛ ІМПОРТ **** # ############################ з qtvcp.core імпортувати інформацію
-
Створення екземпляра модуля
Info.
Додайте цей код Python до розділу створення екземпляра:########################################### # **** РОЗДІЛ «МІСЦЕВІ БІБЛІОТЕКИ» **** # ########################################### INFO = Info()
-
Доступ до даних
INFOВикористовуйте цей загальний синтаксис:home_state = INFO.NO_HOME_REQUIRED if INFO.MACHINE_IS_METRIC is True: print('Metric based')
3. Action
Бібліотека Action використовується для керування контролером руху LinuxCNC.
Він намагається приховати випадкові деталі та додати зручні методи для розробників.
3.1. Помічники
Є деякі допоміжні функції, які здебільшого використовуються для підтримки цієї бібліотеки:
-
get_jog_info (_num_) -
jnum_check(_num_) -
ensure_mode(_modes_) -
open_filter_program(_filename_, _filter_) -
Відкрийте програму фільтрації G-коду.
3.2. Застосування
-
Імпорт модуля
Action
Додайте цей код Python до розділу імпорту:############################ # **** РОЗДІЛ ІМПОРТ **** # ############################ Дія імпорту з qtvcp.core
-
Створення екземпляра модуля
Action
Додайте цей код Python до розділу створення екземпляра:########################################### # **** РОЗДІЛ «МІСЦЕВІ БІБЛІОТЕКИ» **** # ########################################### ACTION = Action()
-
Доступ до команд
ACTION
Використовуйте загальний синтаксис, наприклад:ACTION.SET_ESTOP_STATE(state) ACTION.SET_MACHINE_STATE(state) ACTION.SET_MACHINE_HOMING(joint) ACTION.SET_MACHINE_UNHOMED(joint) ACTION.SET_LIMITS_OVERRIDE() ACTION.SET_MDI_MODE() ACTION.SET_MANUAL_MODE() ACTION.SET_AUTO_MODE() ACTION.SET_LIMITS_OVERRIDE() ACTION.CALL_MDI(code) ACTION.CALL_MDI_WAIT(code) ACTION.CALL_INI_MDI(number) ACTION.CALL_OWORD() ACTION.OPEN_PROGRAM(filename) ACTION.SAVE_PROGRAM(text_source, fname): ACTION.SET_AXIS_ORIGIN(axis,value) ACTION.SET_TOOL_OFFSET(axis,value,fixture = False) ACTION.RUN() ACTION.ABORT() ACTION.PAUSE() # Перемикає паузу/відновлення ACTION.PAUSE_MACHINE() ACTION.RESUME() ACTION.SET_MAX_VELOCITY_RATE(rate) ACTION.SET_RAPID_RATE(rate) ACTION.SET_FEED_RATE(rate) ACTION.SET_SPINDLE_RATE(rate) ACTION.SET_JOG_RATE(rate) ACTION.SET_JOG_INCR(incr) ACTION.SET_JOG_RATE_ANGULAR(rate) ACTION.SET_JOG_INCR_ANGULAR(incr, text) ACTION.SET_SPINDLE_ROTATION(direction = 1, rpm = 100, number = 0) ACTION.SET_SPINDLE_FASTER(number = 0) ACTION.SET_SPINDLE_SLOWER(number = 0) ACTION.SET_SPINDLE_STOP(number = 0) ACTION.SET_USER_SYSTEM(система) ACTION.ZERO_G92_OFFSET() ACTION.ZERO_ROTATIONAL_OFFSET() ACTION.ZERO_G5X_OFFSET(num) ACTION.RECORD_CURRENT_MODE() ACTION.RESTORE_RECORDED_MODE() ACTION.SET_SELECTED_AXIS(номер суглоба) ACTION.DO_JOG(jointnum, direction) ACTION.JOG(jointnum, direction, rate, distance=0) ACTION.TOGGLE_FLOOD() ACTION.SET_FLOOD_ON() ACTION.SET_FLOOD_OFF() ACTION.TOGGLE_MIST() ACTION.SET_MIST_ON() ACTION.SET_MIST_OFF() ACTION.RELOAD_TOOLTABLE() ACTION.UPDATE_VAR_FILE() ACTION.TOGGLE_OPTIONAL_STOP() ACTION.SET_OPTIONAL_STOP_ON() ACTION.SET_OPTIONAL_STOP_OFF() ACTION.TOGGLE_BLOCK_DELETE() ACTION.SET_BLOCK_DELETE_ON() ACTION.SET_BLOCK_DELETE_OFF() ACTION.RELOAD_DISPLAY() ACTION.SET_GRAPHICS_VIEW(view) ACTION.UPDATE_MACHINE_LOG(text, option=None): ACTION.CALL_DIALOG(команда): ACTION.HIDE_POINTER(стан): ACTION.PLAY_SOUND(path): ACTION.PLAY_ERROR(): ACTION.PLAY_DONE(): ACTION.PLAY_READY(): ACTION.PLAY_ATTENTION(): ACTION.PLAY_LOGIN(): ACTION.PLAY_LOGOUT(): ACTION.SPEAK(speech): ACTION.BEEP(): ACTION.BEEP_RING(): ACTION.BEEP_START(): ACTION.SET_DISPLAY_MESSAGE(string) ACTION.SET_ERROR_MESSAGE(string) ACTION.TOUCHPLATE_TOUCHOFF(search_vel, probe_vel, max_probe, z_offset, retract_distance, z_safe_travel, rtn_method=None, error_rtn = None)
4. Калал
Бібліотека для взаємодії компонентів/систем HAL.
4.1. Атрибути
Ось функції, які можна викликати для об’єкта Qhal:
-
setUpdateRate(cyclerate) -
Встановити частоту циклу в мс
-
newPin(назва, константа типу виводу, константа напрямку виводу) -
повертає новий об’єкт QPin
-
getPinObject(name) -
повертає існуючий іменований об’єкт QPin
-
getValue(name) -
повертає значення іменованого виводу, сигналу або параметра, використовуйте повну назву component.pin.
-
setPin(name,value) -
встановлює значення іменованого виводу, використовуйте повну назву component.pin.
-
setSignal(name,value) -
встановлює значення іменованого сигналу, використовуйте повну назву component.pin.
-
makeUniqueName(name) -
повертає унікальний рядок назви виводу HAL, додаючи -x (число) до заданого рядка назви виводу
-
exit() -
знищує компонент
4.2. Константи
Ось доступні константи:
-
HAL_BIT
-
HAL_FLOAT
-
HAL_S32
-
HAL_U32
-
HAL_IN
-
HAL_OUT
-
HAL_IO
-
HAL_RO
-
HAL_RW
4.3. Посилання
Доступні посилання на об’єкти:
-
comp об’єкт-компонент
-
hal об’єкт бібліотеки hal
5. QPin
Клас-обгортка навколо пінів HAL
5.1. Сигнали
Існує 3 сигнали Qt, до яких можна підключити вивід QPin:
-
value_changed викличе іменовану функцію з аргументом поточного значення (амортизований)
-
pinValueChanged викличе іменовану функцію з аргументами об’єкта pin та поточним значенням
-
isDrivenChanged викличе іменовану функцію з аргументами об’єкта pin та поточного стану, коли штифт (не)з’єднаний з ведучим штифтом
5.2. Атрибути
Ось функції, які можна викликати для об’єкта QPin:
-
<Pin object>.get() повертає поточне значення об’єкта pin
-
<Pin object>.set(X) встановлює значення об’єкта pin на значення X
-
<Pin object>.text() повертає рядок назви піна
5.3. Посилання
Доступні посилання на об’єкти:
-
hal об’єкт бібліотеки hal
5.4. Приклад
з qtvcp.core імпорт Qhal QHAL = Qhal() ########################################## # Спеціальні функції, що викликаються з QtVCP ########################################## # на цьому етапі: # екземпляри віджетів створено. # піни HAL зібрано, але HAL ще не готовий def initialized__(self): self.pin_button_in = QHAL.newpin('cycle-start-in',QHAL.HAL_BIT, QHAL.HAL_IN) self.pin_button_in.pinValuechanged.connect(self.buttonChanged) self.pin_button_in.isDrivenChanged.connect(lambda p,s: self.buttonDriven(p,s)) def buttonChanged(self, pinObject, value): print('Pin name:{} changed value to {}'.format(pinObject.text(), value)) def buttonDriven(self, pinObject, state): message = 'not driven by an output pin' if state: message = 'is driven by an output pin' print('Pin name:{} is {}'.format(pinObject.text(), message))
6. Tool
Ця бібліотека обробляє зміни файлу зміщення інструменту.
|
Warning
|
LinuxCNC погано обробляє маніпуляції файлу інструменту сторонніми особами. |
6.1. Помічники
-
GET_TOOL_INFO(_toolnumber_) -
Це поверне список інформації про номер запитуваного інструменту у форматі Python.
-
GET_TOOL_ARRAY() -
Це повертає один список Python зі списками інформації про інструменти.
Це необроблений список, сформований з файлу системних інструментів.
-
ADD_TOOL(_newtool_ = [_-99, 0,'0','0','0','0','0','0','0','0','0','0','0','0', 0,'New Tool'_]) -
Це поверне кортеж із двох списків Python зі списків інформації про інструменти Python:
-
[0]буде інформацією про реальні інструменти -
[1]буде інформація про знос інструментів (номери інструментів будуть понад 10000; знос інструментів у стилі Fanuc)
За замовчуванням додає порожній запис інструмента з номером інструмента -99.
Ви можете попередньо завантажити масивnewtoolінформацією про інструмент. -
-
DELETE_TOOLS(_toolnumber_) -
Видалити пронумерований інструмент.
-
SAVE_TOOLFILE(_toolarray_) -
Це розбере
toolarrayта збереже його у файлі інструменту, зазначеному у INI-файлі як шлях інструменту.Цей масив інструментів має містити всю доступну інформацію про інструменти..
Очікується, що цей масив використовуватиме необроблений масив інструментів LinuxCNC, тобто він не містить записів про знос інструменту.
Якщо сталася помилка, повернеться значення True.
-
CONVERT_TO_WEAR_TYPE(_toolarray_) -
Ця функція перетворює масив необроблених інструментів LinuxCNC на масив інструментів QtVCP.
Масив інструментів QtVCP містить записи для зносу інструментів по осях X та Z.
LinuxCNC підтримує знос інструменту, додаючи інформацію про знос інструменту до записів інструментів вище 10000.
NoteЦе також потрібно написати код перепризначення, щоб додати зміщення зносу під час зміни інструменту. -
CONVERT_TO_STANDARD_TYPE(_toolarray_) -
Ця функція перетворює масив інструментів QtVCP на необроблений масив інструментів LinuxCNC.
Масив QtVCP містить записи для зносу інструментів по осях X та Z.
LinuxCNC підтримує знос інструменту, додаючи інформацію про знос інструменту до записів інструментів вище 10000.
NoteЦе також потрібно перепризначити код для додавання зміщень зносу t під час зміни інструменту.
7. Path
Path Модуль надає посилання на шляхи до важливих файлів.
7.1. Шляхи, на які посилаються
-
PATH.PREFS_FILENAME -
Шлях до файлу налаштувань.
-
PATH.WORKINGDIR -
Каталог, з якого було запущено QtVCP.
-
PATH.IS_SCREEN -
Це екран чи VCP?
-
PATH.CONFIGPATH -
Запущено папку конфігурації.
-
PATH.RIPCONFIGDIR -
Папка конфігурації запуску на місці для екранів QtVCP.
-
PATH.BASEDIR -
Базова папка для LinuxCNC.
-
PATH.BASENAME -
Ім’я файлу Qt Designer (без закінчення).
-
PATH.IMAGEDIR -
Папка образів QtVCP.
-
PATH.SCREENDIR -
Вбудована папка Screen у QtVCP.
-
PATH.PANELDIR -
Вбудована папка VCP QtVCP.
-
PATH.HANDLER -
Шлях до файлу обробника.
-
PATH.HANDLERDIR -
Директорія, де було знайдено файл обробника Python.
-
PATH.XML -
Шлях до файлу інтерфейсу користувача QtVCP.
-
PATH.HANDLERDIR -
Каталог, де було знайдено файл інтерфейсу користувача.
-
PATH.QSS -
Шлях до файлу QtVCP QSS.
-
PATH.PYDIR -
Бібліотека Python для LinuxCNC.
-
PATH.LIBDIR -
Папка бібліотеки QtVCP.
-
PATH.WIDGET -
Папка віджетів QtVCP.
-
PATH.PLUGIN -
Папка плагіна віджета QtVCP.
-
PATH.VISMACHDIR -
Директорія, де знаходяться попередньо зібрані файли Vismach.
Наразі не використовується:
-
PATH.LOCALEDIR -
Папка перекладу локалізації.
-
PATH.DOMAIN -
Домен перекладу.
7.2. Помічники
Є деякі допоміжні функції:
file_list = PATH.find_vismach_files() directory_list = PATH.find_screen_dirs() directory_list = PATH.find_panel_dirs()
7.3. Застосування
-
Імпорт модуля
Path
Додайте цей код Python до розділу імпорту:############################ # **** РОЗДІЛ ІМПОРТ **** # ############################ from qtvcp.core import Path
-
Створення екземпляра модуля
Path
Додайте цей код Python до розділу створення екземпляра:########################################### # **** РОЗДІЛ «МІСЦЕВІ БІБЛІОТЕКИ» **** # ########################################### PATH = Path()
8. VCPWindow
Модуль VCPWindow надає посилання на MainWindow та віджети.
Зазвичай це використовується для бібліотеки (наприклад, бібліотека панелей інструментів використовує її), оскільки віджети отримують посилання на MainWindow з функції _hal_init().
8.1. Застосування
-
Імпорт модуля
VCPWindow
Додайте цей код Python до розділу імпорту:############################ # **** РОЗДІЛ ІМПОРТ **** # ############################ from qtvcp.qt_makegui import VCPWindow
-
Створення екземпляра модуля
VCPWindow
Додайте цей код Python до розділу створення екземпляра:########################################### # **** РОЗДІЛ «МІСЦЕВІ БІБЛІОТЕКИ» **** # ########################################### WIDGETS = VCPWindow()
9. Aux_program_loader
Модуль Aux_program_loader дозволяє легко завантажувати допоміжні програми, які часто використовує LinuxCNC.
9.1. Помічники
-
load_halmeter() -
Halmeter використовується для відображення даних одного виводу HAL.
Завантажтеhalmeterза допомогою:AUX_PRGM.load_halmeter()
-
load_ladder() -
Завантаження програми PLC ClassicLadder:
AUX_PRGM.load_ladder()
-
load_status() -
Завантаження програми
statusLinuxCNC:AUX_PRGM.load_status()
-
load_halshow() -
Завантажте HALshow, налаштуйте програму відображення:
AUX_PRGM.load_halshow()
-
load_halscope() -
Завантаження програми HALscope:
AUX_PRGM.load_halscope()
-
load_tooledit() -
Завантажте програму Tooledit:
AUX_PRGM.load_tooledit(<TOOLEFILE_PATH>)
-
load_calibration() -
Завантажити програму Калібрування:
AUX_PRGM.load_calibration()
-
keyboard_onboard() -
Завантажити вбудовану/Matchbox клавіатуру
AUX_PRGM.keyboard_onboard(<ARGS>)
9.2. Застосування
-
Імпорт модуля
Aux_program_loader
Додайте цей код Python до розділу імпорту:
############################ # **** РОЗДІЛ ІМПОРТ **** # ############################ from qtvcp.lib.aux_program_loader import Aux_program_loader
-
Створення екземпляра модуля
Aux_program_loader
Додайте цей код Python до розділу створення екземпляра:
########################################### # **** РОЗДІЛ «МІСЦЕВІ БІБЛІОТЕКИ» **** # ########################################### AUX_PRGM = Aux_program_loader()
10. Keylookup
Модуль Keylookup використовується для уможливлення керування поведінкою за допомогою натискань клавіш, наприклад, біг підтюпцем.
Він використовується всередині файлу обробника для полегшення створення прив’язок клавіш, таких як переміщення клавіш по клавіатурі тощо.
10.1. Застосування
KeylookupЩоб імпортувати ці модулі, додайте цей код Python до розділу імпорту:
############################ # **** РОЗДІЛ ІМПОРТ **** # ############################ from qtvcp.lib.keybindings import Keylookup
KeylookupЩоб створити екземпляр модуля Keylookup* для використання, додайте цей код Python до розділу створення екземплярів:
########################################### # **** РОЗДІЛ «МІСЦЕВІ БІБЛІОТЕКИ» **** # ########################################### KEYBIND = Keylookup()
|
Note
|
Додати прив’язки клавіш Для виклику функції Keylookup потрібен код у функції processed_key_event.Більшість файлів обробників вже містять цей код. |
У файлі обробника, у розділі ініціалізованої функції, використовуйте цей загальний синтаксис для створення комбінацій клавіш:
KEYBIND.add_call("DEFINED_KEY","FUNCTION TO CALL", USER DATA)
Тут ми додаємо комбінацію клавіш для F10, F11 та F12:
########################################## # Спеціальні функції, що викликаються з QtVCP ########################################## # на цьому етапі: # екземпляри віджетів створено. # піни HAL зібрано, але HAL ще не готовий def initialized__(self): KEYBIND.add_call('Key_F10','on_keycall_F10',None) KEYBIND.add_call('Key_F11','on_keycall_override',10) KEYBIND.add_call('Key_F12','on_keycall_override',20)
А потім нам потрібно додати функції, які викликаються.
У файлі обробника, в розділі KEY BINDING CALLS, додайте це:
##################### # ПРИВ’ЯЗКА КЛАВІШ ВИКЛИКІВ # ##################### def on_keycall_F12(self,event,state,shift,cntrl,value): if state: print('F12 pressed') def on_keycall_override(self,event,state,shift,cntrl,value): if state: print('value = {}'.format(value))
10.2. Ключові визначення
Ось список розпізнаних ключових слів. Використовуйте цитований текст.
Літерні ключі використовують «Key_» з додаванням верхньої або нижньої літери.
Наприклад, «Key_a» та «Key_A».
keys = { Qt.Key_Escape: "Key_Escape", Qt.Key_Tab: "Key_Tab", Qt.Key_Backtab: "Key_Backtab", Qt.Key_Backspace: "Key_Backspace", Qt.Key_Return: "Key_Return", Qt.Key_Enter: "Key_Enter", Qt.Key_Insert: "Key_Insert", Qt.Key_Delete: "Key_Delete", Qt.Key_Pause: "Key_Pause", Qt.Key_Print: "Key_Print", Qt.Key_SysReq: "Key_SysReq", Qt.Key_Clear: "Key_Clear", Qt.Key_Home: "Key_Home", Qt.Key_End: "Key_End", Qt.Key_Left: "Key_Left", Qt.Key_Up: "Key_Up", Qt.Key_Right: "Key_Right", Qt.Key_Down: "Key_Down", Qt.Key_PageUp: "Key_PageUp", Qt.Key_PageDown: "Key_PageDown", Qt.Key_Shift: "Key_Shift", Qt.Key_Control: "Key_Control", Qt.Key_Meta: "Key_Meta", # Qt.Key_Alt: "Key_Alt", Qt.Key_AltGr: "Key_AltGr", Qt.Key_CapsLock: "Key_CapsLock", Qt.Key_NumLock: "Key_NumLock", Qt.Key_ScrollLock: "Key_ScrollLock", Qt.Key_F1: "Key_F1", Qt.Key_F2: "Key_F2", Qt.Key_F3: "Key_F3", Qt.Key_F4: "Key_F4", Qt.Key_F5: "Key_F5", Qt.Key_F6: "Key_F6", Qt.Key_F7: "Key_F7", Qt.Key_F8: "Key_F8", Qt.Key_F9: "Key_F9", Qt.Key_F10: "Key_F10", Qt.Key_F11: "Key_F11", Qt.Key_F12: "Key_F12", Qt.Key_F13: "Key_F13", Qt.Key_F14: "Key_F14", Qt.Key_F15: "Key_F15", Qt.Key_F16: "Key_F16", Qt.Key_F17: "Key_F17", Qt.Key_F18: "Key_F18", Qt.Key_F19: "Key_F19", Qt.Key_F20: "Key_F20", Qt.Key_F21: "Key_F21", Qt.Key_F22: "Key_F22", Qt.Key_F23: "Key_F23", Qt.Key_F24: "Key_F24", Qt.Key_F25: "Key_F25", Qt.Key_F26: "Key_F26", Qt.Key_F27: "Key_F27", Qt.Key_F28: "Key_F28", Qt.Key_F29: "Key_F29", Qt.Key_F30: "Key_F30", Qt.Key_F31: "Key_F31", Qt.Key_F32: "Key_F32", Qt.Key_F33: "Key_F33", Qt.Key_F34: "Key_F34", Qt.Key_F35: "Key_F35", Qt.Key_Super_L: "Key_Super_L", Qt.Key_Super_R: "Key_Super_R", Qt.Key_Menu: "Key_Menu", Qt.Key_Hyper_L: "Key_HYPER_L", Qt.Key_Hyper_R: "Key_Hyper_R", Qt.Key_Help: "Key_Help", Qt.Key_Direction_L: "Key_Direction_L", Qt.Key_Direction_R: "Key_Direction_R", Qt.Key_Space: "Key_Space", Qt.Key_Any: "Key_Any", Qt.Key_Exclam: "Key_Exclam", Qt.Key_QuoteDbl: "Key_QuoteDdl", Qt.Key_NumberSign: "Key_NumberSign", Qt.Key_Dollar: "Key_Dollar", Qt.Key_Percent: "Key_Percent", Qt.Key_Ampersand: "Key_Ampersand", Qt.Key_Apostrophe: "Key_Apostrophe", Qt.Key_ParenLeft: "Key_ParenLeft", Qt.Key_ParenRight: "Key_ParenRight", Qt.Key_Asterisk: "Key_Asterisk", Qt.Key_Plus: "Key_Plus", Qt.Key_Comma: "Key_Comma", Qt.Key_Minus: "Key_Minus", Qt.Key_Period: "Key_Period", Qt.Key_Slash: "Key_Slash", Qt.Key_0: "Key_0", Qt.Key_1: "Key_1", Qt.Key_2: "Key_2", Qt.Key_3: "Key_3", Qt.Key_4: "Key_4", Qt.Key_5: "Key_5", Qt.Key_6: "Key_6", Qt.Key_7: "Key_7", Qt.Key_8: "Key_8", Qt.Key_9: "Key_9", Qt.Key_Colon: "Key_Colon", Qt.Key_Semicolon: "Key_Semicolon", Qt.Key_Less: "Key_Less", Qt.Key_Equal: "Key_Equal", Qt.Key_Greater: "Key_Greater", Qt.Key_Question: "Key_Question", Qt.Key_At: "Key_At", Qt.Key_BracketLeft: "Key_BracketLeft", Qt.Key_Backslash: "Key_Backslash", Qt.Key_BracketRight: "Key_BracketRight", Qt.Key_AsciiCircum: "Key_AsciiCircum", Qt.Key_Underscore: "Key_Underscore", Qt.Key_QuoteLeft: "Key_QuoteLeft", Qt.Key_BraceLeft: "Key_BraceLeft", Qt.Key_Bar: "Key_Bar", Qt.Key_BraceRight: "Key_BraceRight", Qt.Key_AsciiTilde: "Key_AsciiTilde", }
11. Messages
Модуль Messages використовується для відображення спливаючих діалогових повідомлень на екрані.
Ці повідомлення:
-
визначено у файлі INI під заголовком
[DISPLAY], та -
керується контактами HAL.
Використовуйте цей стиль, якщо вам потрібні незалежні виводи HAL для кожного діалогового повідомлення.
11.1. Властивості
-
BOLDTEXT -
Зазвичай це титул.
-
ТЕКСТ -
Текст під заголовком, і зазвичай довший.
-
ДЕТАЛІ -
Текст прихований, якщо на нього не натиснути.
-
PINNAME -
Базова назва виводу(ів) HAL.
-
ТИП -
Визначає, чи це (може мати опції діалогового вікна та стану разом): статус – відображається в _рядку стану* та діалоговому вікні сповіщень.
Не потребує втручання користувача.-
nonedialog – спеціально не показує діалогове вікно.
okdialog - вимагає від користувача натискання кнопки «ОК» для закриття діалогового вікна.
Повідомлення «ОК» мають два контакти HAL:-
Один контакт HAL для запуску діалогового вікна та
-
один, щоб означити, що він очікує відповіді. yesnodialog - вимагає від користувача натискання кнопок «так» або «ні» для закриття діалогового вікна.
Повідомлення «Так/Ні» мають три контакти HAL: -
Один для відображення діалогу,
-
Один для очікування, і
-
один за відповідь. okcanceldialog - вимагає від користувача вибору "ОК" або "Скасувати"
Повідомлення "ОК/Скасувати" мають _три контакти HAL: -
Один для відображення діалогу,
-
Один для очікування, і
-
один за відповідь.
-
-
closepromptdialog - вимагає від користувача вибору
-
За замовчуванням повідомлення STATUS для focus_overlay та звук сповіщень надсилатимуться, коли з’явиться діалогове вікно.
Це дозволяє додавати затемнення/розмиття екрана для focus та звуки до сповіщень.
11.2. Піни HAL
Назви контактів HAL використовуватимуть такі шаблони:
- <SCREEN BASENAME>.<PINNAME>
-
виклик PIN-коду s32
- <SCREEN BASENAME>.<PINNAME>-waiting
-
Вихідний біт «Очікування відповіді користувача»
- <SCREEN BASENAME>.<PINNAME>-response
-
Вихідний біт «Відповідь користувача»
- <SCREEN BASENAME>.<PINNAME>-response-s32
-
Вивід «Відповідь користувача», контакт s32
11.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 = Це короткий текст. MESSAGE_TEXT = Це довгий текст обох типів тесту. Він може бути довшим за текст у рядку стану. MESSAGE_DETAILS = ДЕТАЛЬНІШЕ ПРО ОБИДВА ТИПИ MESSAGE_TYPE = стан okdialog MESSAGE_PINNAME = bothtest
Віджет ScreenOptions може автоматично налаштувати систему повідомлень.
12. багатоповідомлення
Модуль Messages використовується для відображення спливаючих діалогових повідомлень на екрані.
Ці повідомлення:
-
визначено у файлі INI під заголовком
[DISPLAY], та -
керується одним виводом HAL s32 на кожен визначений ідентифікатор.
-
Кожне повідомлення викликається відповідним номером на виводі s32.
Використовуйте цей стиль повідомлень користувача, наприклад, коли VFD надсилає повідомлення про помилки, закодовані у вигляді чисел.
Він використовує загальні виклики/відповіді/очікування HAL-контактів для всіх (за іменем ID) діалогових вікон з декількома повідомленнями. Імена HAL-контактів використовують такі шаблони:
- <SCREEN BASENAME>.<ID NAME>
-
виклик PIN-коду s32
- <SCREEN BASENAME>.<ID NAME>-waiting
-
Вихідний біт «Очікування відповіді користувача»
- <SCREEN BASENAME>.<ID NAME>-response
-
Вихідний біт «Відповідь користувача»
- <SCREEN BASENAME>.<ID NAME>-response-s32
-
Вивід «Відповідь користувача», контакт s32
12.1. Властивості
-
TITLE -
Це заголовок, який відображається у діалоговому вікні.
-
ТЕКСТ -
Текст під заголовком, і зазвичай довший.
-
ДЕТАЛІ -
Текст прихований, якщо на нього не натиснути.
-
ТИП -
Визначає тип повідомлення, яке бачить користувач (може мати опції діалогового вікна та стану разом): статус – відображається в _рядку стану* та діалоговому вікні сповіщень.
Не потребує втручання користувача.-
nonedialog – спеціально не показує діалогове вікно.
okdialog - вимагаючи від користувача натискання кнопки «ОК» для закриття діалогового вікна.
Повідомлення «ОК» використовують два контакти HAL:-
Один контакт HAL для запуску діалогового вікна та
-
один, щоб означати, що він очікує відповіді. yesnodialog - вимагає від користувача натискання кнопок «так» або «ні» для закриття діалогового вікна.
Повідомлення «так/ні» використовують три контакти HAL: -
Один для відображення діалогу,
-
Один для очікування, і
-
один за відповідь.
-
-
За замовчуванням повідомлення STATUS для focus_overlay та звук сповіщень надсилатимуться, коли з’явиться діалогове вікно.
Це дозволяє додавати затемнення/розмиття екрана для focus та звуки до сповіщень.
12.2. Приклади
Ось приклади блоків коду визначення INI-повідомлення, які можна знайти під заголовком [DISPLAY]:
[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'
13. Notify
Notify Модуль використовується для надсилання повідомлень, інтегрованих у робочий стіл.
Він використовує бібліотеку pynotify.
Ubuntu/Mint не дотримується стандарту, тому ви не можете встановити, як довго повідомлення буде відображатися.
Я пропоную виправити це за допомогою пакета notify-osd, доступного за адресою цей PPA (ПРИПИНЕНО через перехід Ubuntu на Gnome).
Notify зберігає список усіх повідомлень про тривогу з моменту запуску у self.alarmpage.
Якщо ви натиснете 'Показати всі повідомлення' у спливаючому вікні сповіщення, воно виведе їх на термінал.
Віджет ScreenOptions може автоматично налаштувати систему сповіщень.
Зазвичай для надсилання сповіщень використовуються повідомлення STATUS.
13.1. Властивості
Ви можете встановити:
-
title -
Текст заголовка сповіщення.
-
message -
Текст вмісту сповіщення.
-
icon -
Піктограма сповіщення.
-
timeout -
Як довго повідомлення залишається активним.
14. Preferences
Preferences Модуль дозволяє завантажувати та постійно зберігати дані про налаштування на носії інформації.
Віджет ScreenOptions може автоматично налаштувати систему налаштувань.
QtVCP спочатку шукає віджет ScreenOptions і, якщо його знаходить, викликає _pref_init().
Це створює об’єкт налаштувань і повертає його до QtVCP, щоб передати всім віджетам і додати до атрибутів об’єкта вікна.
У цьому випадку об’єкт налаштувань буде доступний з методу initialized_ файлу обробника як self.w.PREFS_.
Також усі віджети можуть мати доступ до певного файлу налаштувань під час ініціалізації.
Віджет ScreenOptions може автоматично налаштувати файл налаштувань.
15. Player
Цей модуль дозволяє відтворювати звуки за допомогою Gstreamer, beep та Espeak.
Це може:
-
play sound/music files using Gstreamer (неблокуючий),
-
відтворювати звуки за допомогою бібліотеки
beep(наразі блокується під час звукового сигналу), -
вимовляти слова, використовуючи бібліотеку
espeak(без блокування під час мовлення).
Існують звуки сповіщень за замовчуванням, що використовують звуки за замовчуванням Mint або FreeDesktop.
Ви можете відтворювати довільні звуки або навіть пісні, вказавши шлях.
STATUS містить _повідомлення для керування модулем Player.
Віджет ScreenOptions може автоматично налаштувати аудіосистему.
15.1. Звуки
На вибір є сповіщення за замовчуванням:
-
ERROR -
READY -
ATTENTION -
RING -
DONE -
LOGIN -
LOGOUT
Лунає три звукові сигнали:
-
BEEP_RING -
BEEP_START -
BEEP
15.2. Застосування
-
Імпорт модуля
Player
Додайте цей код Python до розділу імпорту:############################ # **** РОЗДІЛ ІМПОРТ **** # ############################ from qtvcp.lib.audio_player import Player
-
Створення екземпляра модуля
Player
Додайте цей код Python до вашого екземпляра розділу:########################################### # **** РОЗДІЛ «МІСЦЕВІ БІБЛІОТЕКИ» **** # ########################################### SOUND = Player() SOUND._register_messages()
Функція
_register_messages()підключає аудіоплеєр до бібліотекиSTATUS, щоб звуки можна було відтворювати за допомогою системи повідомленьSTATUS.
15.3. Приклад
Щоб відтворювати звуки після повідомлень STATUS, використовуйте такі загальні синтаксиси:
STATUS.emit('play-alert','LOGOUT') STATUS.emit('play-alert','BEEP') STATUS.emit('play-alert','SPEAK This is a test screen for Q t V C P') STATUS.emit('play-sound', 'PATH TO SOUND')
16. Віртуальна клавіатура
17. Дії панелі інструментів
Ця бібліотека надає готові підменю та дії для меню та кнопок панелі інструментів.
Кнопки інструментів, меню та меню панелі інструментів:
-
побудовано в Qt Designer та
-
призначені дії/підменю у файлі обробника.
17.1. Дії
-
estop -
power -
load -
reload -
gcode_properties -
run -
pause -
abort -
block_delete -
optional_stop -
touchoffworkplace -
touchofffixture -
runfromline -
load_calibration -
load_halmeter -
load_halshow -
load_status -
load_halscope -
about -
zoom_in -
zoom_out -
view_x -
view_y -
view_y2 -
view_z -
view_z2 -
view_p -
view_clear -
show_offsets -
quit -
system_shutdown -
tooloffsetdialog -
originoffsetdialog -
calculatordialog -
alphamode -
inhibit_selection -
show_dimensions -
Вмикає/вимикає відображення розмірів.
17.2. Підменю
-
recent_submenu -
home_submenu -
unhome_submenu -
zero_systems_submenu -
grid_size_submenu -
Меню для налаштування розміру графічної сітки
17.3. Застосування
Ось типовий код, який потрібно додати до відповідних розділів файлу handler:
############################ # **** РОЗДІЛ ІМПОРТ **** # ############################ from qtvcp.lib.toolbar_actions import ToolBarActions ########################################### # **** розділ створення екземплярів бібліотек **** # ########################################### TOOLBAR = ToolBarActions()
17.4. Приклади
-
Призначення дій інструментів кнопкам панелі інструментів
########################################## # Спеціальні функції, що викликаються з QtVCP ########################################## # На цьому етапі: # * екземпляри віджетів створено, # * піни HAL зібрано, але HAL ще не готовий. def initialized__(self): TOOLBAR.configure_submenu(self.w.menuHoming, 'home_submenu') TOOLBAR.configure_action(self.w.actionEstop, 'estop') TOOLBAR.configure_action(self.w.actionQuit, 'quit', lambda d:self.w.close()) TOOLBAR.configure_action(self.w.actionEdit, 'edit', self.edit) # Add a custom function TOOLBAR.configure_action(self.w.actionMyFunction, 'my_Function', self.my_function)
-
Додати функцію власної панелі інструментів:
##################### # ЗАГАЛЬНІ ФУНКЦІЇ # ##################### def my_function(self, widget, state): print('My function State = ()'.format(state))
18. Бібліотека машинної графіки Qt Vismach
Qt_vismach — це набір функцій Python, які можна використовувати для створення та анімації моделей машин.
Vismach:
-
відображає модель у 3D-вікні перегляду
-
анімує частини моделі, коли значення пов’язаних з ними контактів HAL змінюються.
Це версія бібліотеки на основі Qt, також доступна версія для tkinter у LinuxCNC.
Версія Qt дозволяє вбудовувати симуляцію в інші екрани.
18.1. Вбудовані зразки
У QtVCP включено зразки панелей для:
-
3-осьовий фрезерний верстат XYZ,
-
5-осьовий портальний фрезерний верстат,
-
3-осьовий фрезерний верстат з віссю/шпинделем А, та
-
масштабувати млин.
Більшість цих зразків, якщо їх завантажити після запущеної конфігурації LinuxCNC (включаючи екрани, що не базуються на QtVCP), реагуватимуть на рух верстата.
Деякі вимагають підключення контактів HAL для руху.
З терміналу (виберіть один):
qtvcp vismach_mill_xyz
qtvcp vismach_scara
qtvcp vismach_millturn
qtvcp vismach_5axis_gantry
18.2. Бібліотека примітивів
Надає основні структурні елементи змодельованої машини.
-
Колекція -
Колекція— це об’єкт окремих деталей машини.Тут міститься ієрархічний список примітивних фігур або STL-об’єктів, до яких можна застосовувати операції.
-
Перекласти -
Цей об’єкт виконає обчислення перетворення OpenGL для об’єкта Collection.
Переклад стосується переміщення об’єкта по прямій в інше положення на екрані.
-
Масштаб -
Цей об’єкт виконуватиме функцію масштабування OpenGL для об’єкта колекції.
-
HalTranslate -
Цей об’єкт виконає обчислення перетворення OpenGL для об’єкта Collection, зі зміщенням на значення виводу HAL.
Переклад означає переміщення об’єкта по прямій лінії в інше положення на екрані.
Ви можете:
-
зчитати пін-код з компонента, що належить об’єкту Vismach, або
-
безпосередньо зчитувати системний пін HAL, якщо аргумент компонента встановлено на
None.
-
-
Повернути -
Цей об’єкт виконає обчислення обертання OpenGL для об’єкта Collection.
-
HalRotate -
Цей об’єкт виконає розрахунок обертання OpenGL для об’єкта Collection, зі зміщенням на значення виводу HAL.
Ви можете:
-
зчитати пін-код з компонента, що належить об’єкту vismach, або
-
безпосередньо зчитувати системний пін HAL, якщо аргумент компонента встановлено на
None.
-
-
HalToolCylinder -
Цей об’єкт створить об’єкт CylinderZ, який змінюватиме розмір та довжину на основі завантаженого виміру інструменту (з таблиці інструментів)
Він зчитує HAL-піни
halui.tool.diameterтаmotion.tooloffset.z.Приклад із зразка mill_xyz:
toolshape = CylinderZ(0) toolshape = Color([1, .5, .5, .5], [toolshape]) tool = Collection([ Translate([HalTranslate([tooltip], None, "motion.tooloffset.z", 0, 0, -MODEL_SCALING)], 0, 0, 0), HalToolCylinder(toolshape) ])
-
Трек -
Переміщувати та обертати об’єкт, щоб він вказував з однієї системи координат
capture()в іншу.Базовий об’єкт для зберігання координат примітивних фігур.
-
CylinderX,CylinderY,CylinderZ -
Побудуйте циліндр на осі X, Y або Z, вказавши координати кінцевої точки (X, Y або Z) та радіуса.
-
Сфера -
Побудуйте сферу з координат центру та радіуса.
-
TriangleXY,TriangleXZ,TriangleYZ -
Побудуйте трикутник у задана площині, вказавши координати Z кутів для кожної сторони.
-
ArcX -
Побудуйте дугу, вказавши
-
Коробка -
Побудуйте блок, заданий 6 координатами вершин.
-
BoxCentered -
Побудуйте прямокутник з центром у початку координат, вказавши ширину по X та Y_, а також висоту по Z_.
-
BoxCenteredXY -
Побудуйте прямокутник з центром у X та Y, що починається від Z=0, вказавши ширину в X та Y, та простягаючись вгору або вниз до заданої висоти в Z.
-
Захоплення -
Захопити поточну матрицю перетворення колекції.
NoteЦе трансформується з поточної системи координат до системи області перегляду, а НЕ до світової системи. -
Хаб -
Heads Up Display малює напівпрозоре текстове поле.
Використання:
-
HUD.strsдля речей, які потрібно постійно оновлювати, -
HUD.show("stuff")для одноразових речей, таких як повідомлення про помилки.
-
-
Колір -
Застосовує колір до частин колекції.
-
AsciiSTL,AsciiOBJ -
Завантажує файл даних STL або OBJ як частину Vismach.
18.3. Застосування
Ось як можна імпортувати симуляцію XYZ_mill у файл панелі або обробника екрана QtVCP.
############################ # **** РОЗДІЛ ІМПОРТ **** # ############################ import mill_xyz as MILL
Створіть екземпляр віджета симуляції та додайте його до основного макета екрана:
########################################## # Спеціальні функції, що викликаються з QtVCP ########################################## # На цьому етапі: # * екземпляри віджетів створено, # * піни HAL зібрано, але HAL ще не готовий. def initialized__(self): machine = MILL.Window() self.w.mainLayout.addWidget(machine)
18.4. Більше інформації
Більше інформації про те, як створити власну симуляцію машини, див. у розділі Qt Vismach.