Бібліотеки — це готові модулі Python, які надають додаткові функції QtVCP. Таким чином, ви можете вибрати потрібні функції, але вам не доведеться самостійно створювати поширені.
1. Status
Status is a library that sends GObject messages based on LinuxCNC’s current state.
It is an extension of GladeVCP’s GStat object.
Він також має деякі функції для звітування про стан таких речей, як внутрішня швидкість штовхання.
Ви підключаєте виклик функції до повідомлення STATUS, яке вас цікавить, і QtVCP викличе цю функцію, коли повідомлення буде надіслано зі STATUS.
1.1. Застосування
-
Import
Statusmodules
Add this Python code to your import section:############################ # **** РОЗДІЛ ІМПОРТ **** # ############################ з імпорту qtvcp.core Стан -
Instantiate
Statusmodule
Add this Python code to your instantiate section:STATUS = Status() -
Connect to
STATUSmessages
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 is a library to collect and filter data from the INI file.
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 = self.INI.getint("KINS","JOINTS", fallback=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.getstring(section, "TYPE", fallback="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 = self.INI.getint("TRAJ", "SPINDLES", fallback=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")
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. Застосування
-
Import
Infomodule
Add this Python code to your import section:############################ # **** РОЗДІЛ ІМПОРТ **** # ############################ з qtvcp.core імпортувати інформацію -
Instantiate
Infomodule.
Add this Python code to your instantiate section:########################################### # **** РОЗДІЛ «МІСЦЕВІ БІБЛІОТЕКИ» **** # ########################################### INFO = Info() -
Access
INFOdata Use this general syntax:home_state = INFO.NO_HOME_REQUIRED if INFO.MACHINE_IS_METRIC is True: print('Metric based')
3. Action
Action library is used to command LinuxCNC’s motion controller.
Він намагається приховати випадкові деталі та додати зручні методи для розробників.
3.1. Помічники
Є деякі допоміжні функції, які здебільшого використовуються для підтримки цієї бібліотеки:
get_jog_info (_num_)jnum_check(_num_)ensure_mode(_modes_)open_filter_program(_filename_, _filter_)-
Відкрийте програму фільтрації G-коду.
3.2. Застосування
-
Import
Actionmodule
Add this Python code to your import section:############################ # **** РОЗДІЛ ІМПОРТ **** # ############################ Дія імпорту з qtvcp.core -
Instantiate
Actionmodule
Add this Python code to your instantiate section:########################################### # **** РОЗДІЛ «МІСЦЕВІ БІБЛІОТЕКИ» **** # ########################################### ACTION = Action() -
Access
ACTIONcommands
Use general syntax such as these: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 the component object
-
hal the hal library object
5. QPin
Клас-обгортка навколо пінів HAL
5.1. Сигнали
Існує 3 сигнали Qt, до яких можна підключити вивід QPin:
-
value_changed will call a named function with an argument of the current value (depreciated)
-
pinValueChanged will call a named function with arguments of the pin object and the current value
-
isDrivenChanged will call a named function with arguments of the pin object and current state when the pin is (un)connected to a driving pin
5.2. Атрибути
Ось функції, які можна викликати для об’єкта QPin:
-
<Pin object>.get() returns the current value of the pin object
-
<Pin object>.set(X) sets the value of the pin object to the value X
-
<Pin object>.text() returns the pin name string
5.3. Посилання
Доступні посилання на об’єкти:
-
hal the hal library object
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 doesn’t handle third party manipulation of the tool file well. |
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]will be real tools information -
[1]will be wear tools information (tool numbers will be over 10000; Fanuc style tool wear)
За замовчуванням додає порожній запис інструмента з номером інструмента -99.
Ви можете попередньо завантажити масивnewtoolінформацією про інструмент. -
DELETE_TOOLS(_toolnumber_)-
Delete the numbered tool.
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 module gives reference to important files paths.
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. Застосування
-
Import
Pathmodule
Add this Python code to your import section:############################ # **** РОЗДІЛ ІМПОРТ **** # ############################ from qtvcp.core import Path -
Instantiate
Pathmodule
Add this Python code to your instantiate section:########################################### # **** РОЗДІЛ «МІСЦЕВІ БІБЛІОТЕКИ» **** # ########################################### PATH = Path()
8. VCPWindow
VCPWindow module gives reference to the MainWindow and widgets.
Зазвичай це використовується для бібліотеки (наприклад, бібліотека панелей інструментів використовує її), оскільки віджети отримують посилання на MainWindow з функції _hal_init().
8.1. Застосування
-
Import
VCPWindowmodule
Add this Python code to your import section:############################ # **** РОЗДІЛ ІМПОРТ **** # ############################ from qtvcp.qt_makegui import VCPWindow -
Instantiate
VCPWindowmodule
Add this Python code to your instantiate section:########################################### # **** РОЗДІЛ «МІСЦЕВІ БІБЛІОТЕКИ» **** # ########################################### WIDGETS = VCPWindow()
9. Aux_program_loader
Aux_program_loader module allows an easy way to load auxiliary programs LinuxCNC often uses.
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. Застосування
-
Import
Aux_program_loadermodule
Add this Python code to your import section:
############################
# **** РОЗДІЛ ІМПОРТ **** #
############################
from qtvcp.lib.aux_program_loader import Aux_program_loader
-
Instantiate
Aux_program_loadermodule
Add this Python code to your instantiate section:
###########################################
# **** РОЗДІЛ «МІСЦЕВІ БІБЛІОТЕКИ» **** #
###########################################
AUX_PRGM = Aux_program_loader()
10. Keylookup
Keylookup module is used to allow keypresses to control behaviors such as jogging.
Він використовується всередині файлу обробника для полегшення створення прив’язок клавіш, таких як переміщення клавіш по клавіатурі тощо.
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 module is used to display pop up dialog messages on the screen.
Ці повідомлення:
-
визначено у файлі INI під заголовком `[DISPLAY]`, та
-
керується контактами HAL.
Використовуйте цей стиль, якщо вам потрібні незалежні виводи HAL для кожного діалогового повідомлення.
11.1. Властивості
BOLDTEXT-
Зазвичай це титул.
ТЕКСТ-
Текст під заголовком, і зазвичай довший.
ДЕТАЛІ-
Текст прихований, якщо на нього не натиснути.
PINNAME-
Базова назва виводу(ів) HAL.
ТИП-
Визначає, чи це (може мати опції діалогового вікна та стану разом): status - shown in the status bar and the notify dialog.
Requires no user intervention.-
nonedialog - specifically does not show a dialog.
okdialog - requiring the user to click OK to close the dialog.
OK messages have two HAL pins:-
One HAL pin to launch the dialog, and
-
one to signify it is waiting for a response. yesnodialog - requiring the user to select yes or no buttons to close the dialog.
Yes/No messages have three HAL pins: -
One to show the dialog,
-
One for waiting, and
-
one for the answer. okcanceldialog - requiring the user to select ok or cancel
Ok/Cancel messages have _three HAL pins: -
One to show the dialog,
-
One for waiting, and
-
one for the answer.
-
-
closepromptdialog - requiring the user to select
-
За замовчуванням повідомлення 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 module is used to display pop up dialog messages on the screen.
Ці повідомлення:
-
визначено у файлі 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-
Це заголовок, який відображається у діалоговому вікні.
ТЕКСТ-
Текст під заголовком, і зазвичай довший.
ДЕТАЛІ-
Текст прихований, якщо на нього не натиснути.
ТИП-
Визначає тип повідомлення, яке бачить користувач (може мати опції діалогового вікна та стану разом): status - shown in the status bar and the notify dialog.
Requires no user intervention.-
nonedialog - specifically does not show a dialog.
okdialog - requiring the user to click OK to close the dialog.
OK messages use two HAL pins:-
One HAL pin to launch the dialog, and
-
one to signify it’s waiting for response. yesnodialog - requiring the user to select yes or no buttons to close the dialog.
Yes/No messages use three HAL pins: -
One to show the dialog,
-
One for waiting, and
-
one for the answer.
-
-
За замовчуванням повідомлення 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 module is used to send messages that are integrated into the desktop.
Він використовує бібліотеку pynotify.
Ubuntu/Mint не дотримується стандарту, тому ви не можете встановити, як довго повідомлення буде відображатися.
Я пропоную виправити це за допомогою пакета notify-osd, доступного за адресою цей PPA (ПРИПИНЕНО через перехід Ubuntu на Gnome).
Notify зберігає список усіх повідомлень про тривогу з моменту запуску у self.alarmpage.
Якщо ви натиснете 'Показати всі повідомлення' у спливаючому вікні сповіщення, воно виведе їх на термінал.
Віджет ScreenOptions може автоматично налаштувати систему сповіщень.
Зазвичай для надсилання сповіщень використовуються повідомлення STATUS.
13.1. Властивості
Ви можете встановити:
title-
Текст заголовка сповіщення.
message-
Текст вмісту сповіщення.
icon-
Піктограма сповіщення.
timeout-
Як довго повідомлення залишається активним.
14. Preferences
Preferences module allows one to load and save preference data permanently to storage media.
Віджет ScreenOptions може автоматично налаштувати систему налаштувань.
QtVCP спочатку шукає віджет ScreenOptions і, якщо його знаходить, викликає _pref_init().
Це створює об’єкт налаштувань і повертає його до QtVCP, щоб передати всім віджетам і додати до атрибутів об’єкта вікна.
У цьому випадку об’єкт налаштувань буде доступний з методу initialized_ файлу обробника як self.w.PREFS_.
Також усі віджети можуть мати доступ до певного файлу налаштувань під час ініціалізації.
Віджет ScreenOptions може автоматично налаштувати файл налаштувань.
15. Player
Цей модуль дозволяє відтворювати звуки за допомогою Gstreamer, beep та Espeak.
Це може:
-
play sound/music files using Gstreamer (non blocking),
-
play sounds using the
beeplibrary (currently blocks while beeping), -
speak words using the
espeaklibrary (non blocking while speaking).
Існують звуки сповіщень за замовчуванням, що використовують звуки за замовчуванням Mint або FreeDesktop.
Ви можете відтворювати довільні звуки або навіть пісні, вказавши шлях.
STATUS містить _повідомлення для керування модулем Player.
Віджет ScreenOptions може автоматично налаштувати аудіосистему.
15.1. Звуки
На вибір є сповіщення за замовчуванням:
-
ERROR -
READY -
ATTENTION -
RING -
DONE -
LOGIN -
LOGOUT
Лунає три звукові сигнали:
-
BEEP_RING -
BEEP_START -
BEEP
15.2. Застосування
-
Import
Playermodule
Add this Python code to your import section:############################ # **** РОЗДІЛ ІМПОРТ **** # ############################ from qtvcp.lib.audio_player import Player -
Instantiate
Playermodule
Add this Python code to your instantiated section:########################################### # **** РОЗДІЛ «МІСЦЕВІ БІБЛІОТЕКИ» **** # ########################################### 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. Дії
estoppowerloadreloadgcode_propertiesrunpauseabortblock_deleteoptional_stoptouchoffworkplacetouchofffixturerunfromlineload_calibrationload_halmeterload_halshowload_statusload_halscopeaboutzoom_inzoom_outview_xview_yview_y2view_zview_z2view_pview_clearshow_offsetsquitsystem_shutdowntooloffsetdialogoriginoffsetdialogcalculatordialogalphamodeinhibit_selectionshow_dimensions-
Вмикає/вимикає відображення розмірів.
17.2. Підменю
recent_submenuhome_submenuunhome_submenuzero_systems_submenugrid_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 is a set of Python functions that can be used to create and animate models of machines.
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) ]) Трек-
Move and rotate an object to point from one
capture()'d coordinate system to another.Базовий об’єкт для зберігання координат примітивних фігур.
CylinderX,CylinderY,CylinderZ-
Build a cylinder on the X, Y or Z axis by giving endpoint (X, Y, or Z) and radii coordinates.
Сфера-
Build a sphere from center and radius coordinates.
TriangleXY,TriangleXZ,TriangleYZ-
Build a triangle in the specified plane by giving the corners Z coordinates for each side.
ArcX-
Build an arc by specifying
Коробка-
Build a box specified by the 6 vertex coordinates.
BoxCentered-
Build a box centered on origin by specifying the width in X and Y, and the height in Z.
BoxCenteredXY-
Build a box centered in X and Y, and running from Z=0, by specifying the width in X and Y, and running up or down to the specified height in Z.
Захоплення-
Capture current transformation matrix of a collection.
NoteЦе трансформується з поточної системи координат до системи області перегляду, а НЕ до світової системи. Хаб-
Heads up display draws a semi-transparent text box.
Використання:
-
HUD.strsдля речей, які потрібно постійно оновлювати, -
HUD.show("stuff")для одноразових речей, таких як повідомлення про помилки.
-
Колір-
Applies a color to the parts of a collection.
AsciiSTL,AsciiOBJ-
Loads a STL or OBJ data file as a Vismach part.
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.