Bibliotheken sind vorgefertigte Python-Module, die GladeVCP zusätzliche Funktionen verleihen. Auf diese Weise können Sie auswählen, welche Funktionen Sie wünschen - und müssen die üblichen nicht selbst erstellen.
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.
Es hat auch einige Funktionen, um den Status von Dingen wie der internen Jog-Rate zu melden.
Sie verbinden einen Funktionsaufruf mit der STATUS-Nachricht, an der Sie interessiert sind, und QtVCP wird diese Funktion aufrufen, wenn die Nachricht von STATUS gesendet wird.
1.1. Anwendung
-
Import
Statusmodules
Add this Python code to your import section:############################ # **** IMPORT SECTION **** # ############################ from qtvcp.core import Status -
Instantiate
Statusmodule
Add this Python code to your instantiate section:STATUS = Status() -
Connect to
STATUSmessages
Use GObject syntax.
1.2. Beispiel
So können Sie z. B. Ein- und Ausschaltmeldungen der Maschine auffangen.
|
Note
|
Das folgende Beispiel zeigt zwei gängige Möglichkeiten, Signale zu verbinden, eine davon unter Verwendung von Lambda. lambda wird verwendet, um Argumente aus der Statusmeldung zu entfernen oder zu manipulieren, bevor die Funktion aufgerufen wird. Sie können den Unterschied in der Signatur der aufgerufenen Funktion sehen: Diejenige, die Lambda verwendet, akzeptiert das Statusobjekt nicht - Lambda hat es nicht an die Funktion übergeben.
|
-
Fügen Sie diese Befehle in den Abschnitt
[INITIALIZE]der Python-Handler-Datei ein:STATUS.connect('state-on', self.on_state_on) STATUS.connect('state-off', lambda: w, self.on_state_off())Wenn sich LinuxCNC in Zustand "machine on" befindet, wird in diesem Beispielcode state die Funktion self.on_state_on aufgerufen.
Wenn LinuxCNC in Zustand "machine off" ist, wird die Funktion self.on_state_off aufgerufen. -
Diese würden Funktionen aufrufen, die wie diese aussehen:
def on_state_on(self, status_object): print('LinuxCNC Maschine ist eingeschaltet') def on_state_off(self): print('LinuxCNC-Maschine ist aus')
2. Info
Info is a library to collect and filter data from the INI file.
2.1. Verfügbare Daten und Voreinstellungen
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 Einheiten pro Minute
MIN_LINEAR_JOG_VEL = 60 Einheiten pro Minute
Länge_LINEAR_JOG_VEL = 300 Einheiten pro Minute
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. Dialogfenster für Benutzernachrichten
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. Eingebettete Programminformationen
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. Helfer
Es gibt einige Hilfsfunktionen, die hauptsächlich zur Unterstützung von Widgets verwendet werden:
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()-
Filtererweiterungen im Qt-Format abrufen.
2.5. Anwendung
-
Import
Infomodule
Add this Python code to your import section:############################ # **** IMPORT SECTION **** # ############################ from qtvcp.core import Info -
Instantiate
Infomodule.
Add this Python code to your instantiate section:########################################### # **** BIBLIOTHEKEN INSTANZIIEREN **** # ########################################### 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.
Es versucht, zufällige Details zu verbergen und praktische Methoden für Entwickler hinzuzufügen.
3.1. Helfer
Es gibt einige Hilfsfunktionen, die hauptsächlich für die Unterstützung dieser Bibliothek verwendet werden:
get_jog_info (_num_)jnum_check(_num_)ensure_mode(_modes_)open_filter_program(_filename_, _filter_)-
Öffnen Sie das G-Code-Filterprogramm.
3.2. Anwendung
-
Import
Actionmodule
Add this Python code to your import section:############################ # **** IMPORT SECTION **** # ############################ from qtvcp.core import Action -
Instantiate
Actionmodule
Add this Python code to your instantiate section:########################################### # **** BIBLIOTHEKEN INSTANZIIEREN **** # ########################################### 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() # Wechselt zwischen Pause/Fortsetzen 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(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(jointnum) 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(command): ACTION.HIDE_POINTER(state): 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. Qhal
Eine Bibliothek für die Interaktion mit HAL-Komponenten/System.
4.1. Attribute
Dies sind Funktionen zur Anwendung auf Qhal Objekte:
setUpdateRate(cyclerate)-
Zyklusrate in ms festlegen
newPin(Name, Pin-Typ Konstante, Pin-Richtung Konstante)-
Gibt ein neues QPin-Objekt zurück
getPinObject(name)-
Gibt ein vorhandenes QPin-Objekt mit dem angegebenen Namen zurück
getValue(name)-
Gibt den Wert des angegebenen Pins zurück. Nutzt den vollständigen Komponenten.pin-Namen.
setPin(name,value)-
Setzt den Wert des angegebenen Pins. Nutzt den vollständigen Komponenten.Pin-Namen.
setSignal(name,value)-
Setzt den Wert des angegebenen Signals. Nutzt den vollständigen Komponenten.Pin-Namen.
makeUniqueName(Name)-
gibt eine Zeichenkette mit eindeutigen HAL Pin Namen zurück durch Hinzufügen von -x (einer Nummer) zur gegebenen Zeichenkette eines Pin-Namens
exit()-
killt (eingedeutschter englischer slang, gemeint ist der Abbruch der Ausführung) die Komponente
4.2. Konstanten
Es sind die drei verfügbaren Konstanten:
-
HAL_BIT
-
HAL_FLOAT
-
HAL_S32
-
HAL_U32
-
HAL_IN
-
HAL_OUT
-
HAL_IO
-
HAL_RO
-
HAL_RW
4.3. Referenzen
Verfügbare Objekt-Referenzen:
-
comp the component object
-
hal the hal library object
5. QPin
Wrapper-Klasse von HAL pins
5.1. Signale
Es gibt drei Qt-Signale mit denen der QPin verbunden werden kann:
-
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. Attribute
Dies sind die Funktionen, die auf einen QPin angewendet werden können:
-
<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. Referenzen
Verfügbare Objekt-Referenzen:
-
hal the hal library object
5.4. Beispiel
from qtvcp.core import Qhal
QHAL = Qhal()
##########################################
# Spezielle Funktionen, die von QtVCP aufgerufen werden
##########################################
# zu diesem Zeitpunkt:
# sind die Widgets instanziiert.
# die HAL-Pins sind gebaut, aber HAL ist nicht bereit
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:{} änderte Werte zu {}'.format(pinObject.text(), value))
def buttonDriven(self, pinObject, state):
message = 'nicht getrieben (engl. driven) durch einen Ausgabe (engl. output)-Pin'
if state:
message = 'ist getrieben (engl. driven) durch einen Ausgabe (engl. output)-Pin'
print('Pin name:{} is {}'.format(pinObject.text(), message))
6. Tool
Diese Bibliothek verarbeitet Änderungen an Werkzeugoffset-Dateien.
|
Warning
|
LinuxCNC doesn’t handle third party manipulation of the tool file well. |
6.1. Helfer
GET_TOOL_INFO(_toolnumber_)-
Dies liefert eine Python Liste mit Informationen über die angeforderte Werkzeugnummer.
GET_TOOL_ARRAY()-
Dies liefert eine einzelne Python Liste von Python-Listen mit Werkzeuginformationen.
Dies ist eine Rohliste, die aus der Systemtooldatei gebildet wird.
ADD_TOOL(_newtool_ = [_-99, 0,'0','0','0','0','0','0','0','0','0','0','0','0', 0,'New Tool'_])-
Das Ergebnis ist ein Python Tupel aus zwei Python-Listen von Python-Listen mit Werkzeuginformationen:
-
[0]will be real tools information -
[1]will be wear tools information (tool numbers will be over 10000; Fanuc style tool wear)
Standardmäßig wird ein leerer Werkzeugeintrag mit der Werkzeugnummer -99 hinzugefügt.
Sie können das Arraynewtoolmit Werkzeuginformationen vorbereiten. -
DELETE_TOOLS(_toolnumber_)-
Delete the numbered tool.
SAVE_TOOLFILE(_toolarray_)-
Dies wird das
toolarrayparsen und es in der Werkzeugdatei speichern, die in der INI-Datei als Werkzeugpfad angegeben ist.Dieses Werkzeug array muss alle verfügbaren Werkzeuginformationen enthalten.
Es wird erwartet, dass dieses Array das LinuxCNC raw-Tool array verwendet, d.h. es hat keine Werkzeugverschleißeinträge.
Sie gibt True zurück, wenn ein Fehler aufgetreten ist.
CONVERT_TO_WEAR_TYPE(_toolarray_)-
Diese Funktion konvertiert ein LinuxCNC raw tool array in ein QtVCP tool array.
Das Tool-Array von QtVCP enthält Einträge für den Werkzeugverschleiß der X- und Z-Achse.
LinuxCNC unterstützt Werkzeugverschleiß, indem es Werkzeugverschleißinformationen in Werkzeugeinträge über 10000 einfügt.
NoteDies erfordert auch Remap-Code, um die Verschleißversätze zum Zeitpunkt des Werkzeugwechsels hinzuzufügen. CONVERT_TO_STANDARD_TYPE(_toolarray_)-
Diese Funktion konvertiert das QtVCP-Werkzeugfeld in ein LinuxCNC-Rohwerkzeugfeld.
Das Array von QtVCP enthält Einträge für den Werkzeugverschleiß der X- und Z-Achse.
LinuxCNC unterstützt Werkzeugverschleiß, indem es Werkzeugverschleißinformationen in Werkzeugeinträge über 10000 einfügt.
NoteDies erfordert auch Remap-Code, um die Verschleißkompensationen und Werkzeugwechselzeit hinzuzufügen.
7. Path
Path module gives reference to important files paths.
7.1. Referenzierte Pfade
PATH.PREFS_FILENAME-
Der Pfad der Einstellungsdatei.
PATH.WORKINGDIR-
Das Verzeichnis, aus dem QtVCP gestartet wurde.
PATH.IS_SCREEN-
Ist dies eine Eingabemaske (engl. screen) oder ein VCP?
PATH.CONFIGPATH-
Gestarteter Konfigurationsordner.
PATH.RIPCONFIGDIR-
Der Run-in-Place-Konfigurationsordner für QtVCP-Bildschirme.
PATH.BASEDIR-
Basisordner für LinuxCNC.
PATH.BASENAME-
Der Name der Qt Designer-Dateien (ohne Endung).
PATH.IMAGEDIR-
Der QtVCP-Bildordner.
PATH.SCREENDIR-
Der in QtVCP integrierte Bildschirmordner.
PATH.PANELDIR-
Der in QtVCP eingebaute VCP-Ordner.
PATH.HANDLER-
Handler-Datei Pfad.
PATH.HANDLERDIR-
Verzeichnis, in dem die Python-Handler-Datei gefunden wurde.
PATH.XML-
QtVCP UI-Dateipfad.
PATH.HANDLERDIR-
Verzeichnis, in dem die UI-Datei gefunden wurde.
PATH.QSS-
QtVCP QSS-Dateipfad.
PATH.PYDIR-
LinuxCNCs Python-Bibliothek.
PATH.LIBDIR-
Der Ordner der QtVCP-Bibliothek.
PATH.WIDGET-
Der QtVCP-Widget-Ordner.
PATH.PLUGIN-
Der QtVCP-Widget-Plugin-Ordner.
PATH.VISMACHDIR-
Verzeichnis, in dem sich die vorgefertigten Vismach-Dateien befinden.
Derzeit nicht verwendet:
PATH.LOCALEDIR-
Ordner für Übersetzungen.
PATH.DOMAIN-
Übersetzungsbereich (engl. translation domain).
7.2. Helfer
Es sind einige Hilfsfunktionen verfügbar:
file_list = PATH.find_vismach_files()
directory_list = PATH.find_screen_dirs()
directory_list = PATH.find_panel_dirs()
7.3. Anwendung
-
Import
Pathmodule
Add this Python code to your import section:############################ # **** IMPORT SECTION **** # ############################ from qtvcp.core import Path -
Instantiate
Pathmodule
Add this Python code to your instantiate section:########################################### # **** BIBLIOTHEKEN INSTANZIIEREN **** # ########################################### PATH = Path()
8. VCPWindow
VCPWindow module gives reference to the MainWindow and widgets.
Typischerweise wird dies für eine Bibliothek verwendet (z.B. für die Toolbar-Bibliothek), da die Widgets einen Verweis auf das MainWindow von der Funktion _hal_init() erhalten.
8.1. Anwendung
-
Import
VCPWindowmodule
Add this Python code to your import section:############################ # **** IMPORT SECTION **** # ############################ from qtvcp.qt_makegui import VCPWindow -
Instantiate
VCPWindowmodule
Add this Python code to your instantiate section:########################################### # **** BIBLIOTHEKEN INSTANZIIEREN **** # ########################################### WIDGETS = VCPWindow()
9. Aux_program_loader
Aux_program_loader module allows an easy way to load auxiliary programs LinuxCNC often uses.
9.1. Helfer
load_halmeter()-
Halmeter wird zur Anzeige von Daten eines HAL-Pins verwendet.
Laden Sie einHalmetermit:AUX_PRGM.load_halmeter() load_ladder()-
SPS-Programm ClassicLadder laden:
AUX_PRGM.load_ladder() load_status()-
Laden des LinuxCNC
statusProgramms:AUX_PRGM.load_status() load_halshow()-
HALshow laden, Anzeigeprogramm konfigurieren:
AUX_PRGM.load_halshow() load_halscope()-
Laden des HALscope Programms:
AUX_PRGM.load_halscope() load_tooledit()-
Programm Tooledit laden:
AUX_PRGM.load_tooledit(<TOOLEFILE_PATH>) load_calibration()-
Programm zur Kalibrierung laden:
AUX_PRGM.load_calibration() keyboard_onboard()-
Laden der onboard/Matchbox keyboard
AUX_PRGM.keyboard_onboard(<ARGS>)
9.2. Anwendung
-
Import
Aux_program_loadermodule
Add this Python code to your import section:
############################
# **** IMPORT SECTION **** #
############################
from qtvcp.lib.aux_program_loader import Aux_program_loader
-
Instantiate
Aux_program_loadermodule
Add this Python code to your instantiate section:
###########################################
# **** BIBLIOTHEKEN INSTANZIIEREN **** #
###########################################
AUX_PRGM = Aux_program_loader()
10. Keylookup
Keylookup module is used to allow keypresses to control behaviors such as jogging.
Sie wird in der Handler-Datei verwendet, um die Erstellung von Tastenbindungen wie z. B. Tastatur-Jogging usw. zu erleichtern.
10.1. Anwendung
Keylookup importierenUm diese Module zu importieren, fügen Sie diesen Python-Code in Ihren Import-Abschnitt ein:
############################
# **** IMPORT SECTION **** #
############################
from qtvcp.lib.keybindings import Keylookup
KeylookupUm das Keylookup-Modul* zu instanziieren, damit Sie es verwenden können, fügen Sie diesen Python-Code zu Ihrem Instanziierungsabschnitt hinzu:
###########################################
# **** BIBLIOTHEKEN INSTANZIIEREN **** #
###########################################
KEYBIND = Keylookup()
|
Note
|
Hinzufügen von Tastenbelegungen
Keylookup erfordert Code unter der Funktion processed_key_event, um KEYBIND.call() aufzurufen.Die meisten Handlerdateien verfügen bereits über diesen Code. |
In der Handler-Datei, unter der initialisierten Funktion verwenden Sie diese allgemeine Syntax, um Tastenbindungen zu erstellen:
KEYBIND.add_call("DEFINED_KEY","FUNCTION TO CALL", USER DATA)
Hier fügen wir eine Tastenbindung für F10, F11 und F12 hinzu:
##########################################
# Spezielle Funktionen, die von QtVCP aufgerufen werden
##########################################
# zu diesem Zeitpunkt:
# sind die Widgets instanziiert.
# die HAL-Pins sind gebaut, aber HAL ist nicht bereit
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)
Und dann müssen wir die Funktionen hinzufügen, die aufgerufen werden.
Fügen Sie in der Handler-Datei unter dem Abschnitt KEY BINDING CALLS Folgendes hinzu:
#####################
# 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. Tastenbelegungen
Hier finden Sie eine Liste mit anerkannten Schlüsselwörtern. Verwenden Sie den zitierten Text.
Buchstabenschlüssel verwenden Key_ mit dem hinzugefügten Groß- oder Kleinbuchstaben.
z. B. Key_a und 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.
Diese Nachrichten sind:
-
definiert in der INI-Datei unter der Überschrift `[DISPLAY]`, und
-
gesteuert durch HAL-Pins.
Verwenden Sie diesen Stil, wenn für jede Dialognachricht unabhängige HAL-Pins benötigt werden.
11.1. Eigenschaften
BOLDTEXT-
Ist im Allgemeinen ein Titel.
TEXT-
Text unter dem Titel und in der Regel länger.
DETAIL-
Text ausgeblendet, sofern nicht angeklickt.
PINNAME-
Basisname der HAL-Pin(s).
TYPE-
Gibt an, ob es sich um handelt um (kann gleichzeitig eine Diaglo- und eine Status-Option haben): 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
-
Standardmäßig werden STATUS-Meldungen für focus_overlay und den Warnsound gesendet, sobald der Dialog angezeigt wird.
So können dem Bildschirm „Fokus“-Abdunkelung/Unschärfe und Töne zu Warnungen hinzugefügt werden.
11.2. HAL-Pins
Die HAL Pin Namen würden dieses Muster verwenden:
- <SCREEN BASENAME>.<PINNAME>
-
invoking s32 pin
- <SCREEN BASENAME>.<PINNAME>-waiting
-
"Warten auf Reaktion des Anwendes"-Ausgabe bit Pin
- <SCREEN BASENAME>.<PINNAME>-response
-
Die Anwender-Reaktion output bit pin
- <SCREEN BASENAME>.<PINNAME>-response-s32
-
Die Anwender-Reaktion output s32 pin
11.3. Beispiele
Hier sind Beispiele für Codeblöcke zur Definition von INI-Nachrichten, die unter der Überschrift ‘[DISPLAY]’ zu finden sind:
-
Statusleiste und Desktop-Benachrichtigungs-Pop-up-Meldung:
MESSAGE_BOLDTEXT = NONE MESSAGE_TEXT = This is a statusbar test MESSAGE_DETAILS = STATUS DETAILS MESSAGE_TYPE = status MESSAGE_PINNAME = statustest -
Pop-up-Dialog mit einer Ja/Nein-Frage:
MESSAGE_BOLDTEXT = NONE MESSAGE_TEXT = This is a yes no dialog test MESSAGE_DETAILS = Y/N DETAILS MESSAGE_TYPE = yesnodialog MESSAGE_PINNAME = yndialogtest -
Pop-up-Dialog, der eine OK-Antwort verlangt + Statusleiste und Desktop-Benachrichtigung:
[DISPLAY] MESSAGE_BOLDTEXT = Dies ist der kurze Text MESSAGE_TEXT = Dies ist der längere Text des Tests der beiden Typen. Er kann länger sein als der Text der Statusleiste MESSAGE_DETAILS = BOTH DETAILS MESSAGE_TYPE = okdialog status MESSAGE_PINNAME = bothtest
Das Widget ScreenOptions kann das Nachrichtensystem automatisch einrichten.
12. multimessages
Messages module is used to display pop up dialog messages on the screen.
Diese Nachrichten sind:
-
definiert in der INI-Datei unter der Überschrift `[DISPLAY]`, und
-
gesteuert durch einen s32 HAL-Pin per definierter ID.
-
jede Nachricht (engl. message) wird aufgerufen durch einen korrespondierende Zahl auf dem s32 Pin.
Verwenden Sie diesen Stil von Benutzerinformationen beispielsweise, wenn ein VFD Fehlermeldungen als Zahlen kodiert sendet.
Er verwendet gemeinsame Invoke/Response/Wait-HAL-Pins für alle (pro ID-Name) Multimessage-Dialoge. Die HAL-Pin-Namen würden diese Muster verwenden:
- <SCREEN BASENAME>.<ID NAME>
-
invoking s32 pin
- <SCREEN BASENAME>.<ID NAME>-waiting
-
"Warten auf Reaktion des Anwendes"-Ausgabe bit Pin
- <SCREEN BASENAME>.<ID NAME>-response
-
Die Anwender-Reaktion output bit pin
- <SCREEN BASENAME>.<ID NAME>-response-s32
-
Die Anwender-Reaktion output s32 pin
12.1. Eigenschaften
TITLE-
Dies ist der Titel des Dialogfensters.
TEXT-
Text unter dem Titel und in der Regel länger.
DETAIL-
Text ausgeblendet, sofern nicht angeklickt.
TYPE-
Gibt den Typ der Nachricht an, den der Benutzer sieht (Dialog- und Statusoptionen können kombiniert werden): 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.
-
-
Standardmäßig werden STATUS-Meldungen für focus_overlay und den Warnsound gesendet, sobald der Dialog angezeigt wird.
So können dem Bildschirm „Fokus“-Abdunkelung/Unschärfe und Töne zu Warnungen hinzugefügt werden.
12.2. Beispiele
Hier sind Beispiele für Codeblöcke zur Definition von INI-Nachrichten, die unter der Überschrift ‘[DISPLAY]’ zu finden sind:
[DISPLAY]
MULTIMESSAGE_ID = VFD
MULTIMESSAGE_VFD_NUMBER = 1
MULTIMESSAGE_VFD_TYPE = okdialog status
MULTIMESSAGE_VFD_TITLE = VFD Fehler: 1
MULTIMESSAGE_VFD_TEXT = Die ist der längere Text FÜR MESSAGE NUMMER 1
MULTIMESSAGE_VFD_DETAILS = DETAILS für VFD Fehler 1
MULTIMESSAGE_VFD_ICON = WARNING
MULTIMESSAGE_VFD_NUMBER = 2
MULTIMESSAGE_VFD_TYPE = nonedialog status
MULTIMESSAGE_VFD_TITLE = VFD Fehler: 2
MULTIMESSAGE_VFD_TEXT = Die sist der längere Text FÜR MESSAGE NUMMER 2
MULTIMESSAGE_VFD_DETAILS = DETAILS für VFD Fehler 2
MULTIMESSAGE_VFD_ICON = INFO
13. Notify
Notify module is used to send messages that are integrated into the desktop.
Es verwendet die pynotify Bibliothek.
Ubuntu/Mint folgt nicht dem Standard, so dass man nicht einstellen kann, wie lange die Meldung angezeigt wird.
Ich schlage vor, dies mit dem Paket notify-osd zu beheben, das unter dieses PPA verfügbar ist (DISCONTINUED aufgrund der Umstellung von Ubuntu auf Gnome).
Notify erhält eine Liste aller Alarmmeldungen seit dem Start in self.alarmpage.
Wenn Sie im Notify-Popup auf 'Show all messages' klicken, werden sie auf dem Terminal ausgegeben.
Das Widget ScreenOptions kann das Benachrichtigungssystem automatisch einrichten.
Typischerweise werden STATUS messages verwendet, um Benachrichtigungen zu senden.
13.1. Eigenschaften
Sie können Folgendes festlegen:
title-
Titeltext der Benachrichtigung.
message-
Inhalt der Benachrichtigungsnachricht.
icon-
Symbol für eine Benachrichtigung.
timeout-
Wie lange die Nachricht angezeigt wird.
14. Preferences
Preferences module allows one to load and save preference data permanently to storage media.
Das Widget ScreenOptions kann das Einstellungssystem automatisch einrichten.
QtVCP sucht zuerst nach dem ScreenOptions-Widget und ruft, falls gefunden, _pref_init() auf.
Dies erzeugt das Einstellungsobjekt und gibt es an QtVCP zurück, um es an alle Widgets zu übergeben und es zu den Attributen des Fensterobjekts hinzuzufügen.
In diesem Fall wäre das Einstellungsobjekt von der initialized_-Methode der Handler-Datei als self.w.PREFS_ zugänglich.
Außerdem können alle Widgets bei der Initialisierung Zugriff auf eine bestimmte Einstellungsdatei haben.
Das Widget ScreenOptions kann die Einstellungsdatei automatisch einrichten.
15. Player
Dieses Modul ermöglicht das Abspielen von Sounds mit Gstreamer, Beep und Espeak.
Es kann:
-
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).
Es gibt Standard-Warntöne, die Mint oder FreeDesktop-Standardsounds verwenden.
Sie können beliebige Sounds oder sogar Songs abspielen, indem Sie den Pfad angeben.
STATUS hat Nachrichten zur Steuerung des Player-Moduls.
Das Widget ScreenOptions kann automatisch das Audiosystem einrichten.
15.1. Töne (engl. sounds)
Es gibt Standard-Warnungen zur Auswahl:
-
ERROR -
READY -
ATTENTION -
RING -
DONE -
LOGIN -
LOGOUT
Es gibt drei Pieptöne:
-
BEEP_RING -
BEEP_START -
BEEP
15.2. Anwendung
-
Import
Playermodule
Add this Python code to your import section:############################ # **** IMPORT SECTION **** # ############################ from qtvcp.lib.audio_player import Player -
Instantiate
Playermodule
Add this Python code to your instantiated section:########################################### # **** BIBLIOTHEKEN INSTANZIIEREN **** # ########################################### SOUND = Player() SOUND._register_messages()Die Funktion
_register_messages()verbindet den Audioplayer mit derSTATUS-Bibliothek, so dass Klänge mit demSTATUS-Meldungssystem abgespielt werden können.
15.3. Beispiel
Um Töne mit STATUS-Meldungen abzuspielen, verwenden Sie diese allgemeine Syntax:
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. Virtuelle Tastatur
17. Aktionen in der Symbolleiste
Diese Bibliothek liefert vorgefertigte Untermenüs und Aktionen für Symbolleistenmenüs und Symbolleistenschaltflächen.
Werkzeug-Buttons, Menüs und Symbolleistenmenüs sind:
-
in Qt Designer erstellt, und
-
zugewiesene Aktionen/Untermenüs in der Handler-Datei.
17.1. Aktionen
estop(engl. für Notaus)powerloadreloadgcode_propertiesrunpauseabortblock_delete(engl. für Block löschen)optional_stoptouchoffworkplacetouchofffixturerunfromline(Ausführen von gegebener Zeile)load_calibrationload_halmeterload_halshowload_statusload_halscopeaboutzoom_inzoom_outview_xview_yview_y2view_zview_z2view_pview_clearshow_offsetsquitsystem_shutdowntooloffsetdialogoriginoffsetdialogcalculatordialogalphamodeinhibit_selectionshow_dimensions-
Schaltet die Anzeige der Dimensionen um.
17.2. Untermenüs
recent_submenuhome_submenuunhome_submenuzero_systems_submenugrid_size_submenu-
Menü zum Einstellen der Größe des Grafikrasters
17.3. Anwendung
Hier ist der typische Code, der zu den entsprechenden Abschnitten der Handler-Datei hinzuzufügen ist:
############################
# **** IMPORT SECTION **** #
############################
from qtvcp.lib.toolbar_actions import ToolBarActions
###########################################
**** Bibliotheken instanziieren Abschnitt **** #
###########################################
TOOLBAR = ToolBarActions()
17.4. Beispiele
-
Zuweisung von Werkzeugaktionen zu Buttons der Symbolleiste
########################################## # Spezielle Funktionen, die von QtVCP aufgerufen werden ########################################## # An diesem Punkt: # * sind die Widgets instanziiert, # * die HAL-Pins sind gebaut, aber HAL ist nicht bereit. 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) -
Hinzufügen einer benutzerdefinierten Symbolleistenfunktion:
##################### # GENERAL FUNCTIONS # ##################### def my_function(self, widget, state): print('My function State = ()'.format(state))
18. Qt Vismach Maschinengrafik-Bibliothek
Qt_vismach is a set of Python functions that can be used to create and animate models of machines.
Vismach:
-
zeigt das Modell in einem 3D-Ansichtsfenster
-
animiert die Modellteile während sich die Werte der zugehörigen HAL-Pins ändern.
Dies ist die Qt basierte Version der Bibliothek, es gibt auch eine tkinter Version, die in LinuxCNC verfügbar ist.
Die Qt-Version ermöglicht die Einbettung der Simulation in andere Bildschirme.
18.1. Integrierte Beispiele
In QtVCP sind Beispielpanels enthalten für:
-
eine 3-Achsen-XYZ-Fräse,
-
eine 5-Achsen-Portalfräse,
-
eine 3-Achsen-Fräse mit einer A-Achse/Spindel und
-
eine Scara-Fräse.
Die meisten dieser Beispiele, wenn sie nach einer laufenden LinuxCNC-Konfiguration geladen werden (einschließlich nicht-QtVCP-basierter Bildschirme), reagieren auf Maschinenbewegungen.
Einige erfordern, dass HAL-Pins für die Bewegung angeschlossen werden.
Von einem Terminal aus (wählen Sie eines aus):
qtvcp vismach_mill_xyz qtvcp vismach_scara qtvcp vismach_millturn qtvcp vismach_5axis_gantry
18.2. Primitives-Bibliothek
Stellt die grundlegenden Bausteine einer simulierten Maschine bereit.
Collection-
Eine
Sammlungist ein Gegenstand einzelner Maschinenteile.Diese enthält eine hierarchische Liste von primitiven Formen oder STL-Objekten, auf die Operationen angewendet werden können.
Translate-
Dieses Objekt führt eine OpenGL-Translation für ein Sammelobjekt aus.
Unter Translation versteht man das geradlinige Verschieben eines Objekts an eine andere Position auf dem Bildschirm.
Scale-
Dieses Objekt führt eine OpenGL-Skalierungsfunktion für ein Sammelobjekt aus.
HalTranslate-
Dieses Objekt führt eine OpenGL-Verschiebung (engl. translation) für ein Sammelobjekt durch, versetzt um den Wert eines HAL-Pins.
Unter Translation versteht man das Verschieben eines Objekts in gerader Linie an eine andere Position auf dem Bildschirm.
Sie können entweder:
-
einen Pin von einer Komponente lesen, die dem Vismach-Objekt gehört, oder
-
direktes Lesen eines HAL-Systempins, wenn das Komponentenargument auf
Nonegesetzt ist.
-
Rotate-
Dieses Objekt führt eine OpenGL-Rotationsberechnung für ein Sammelobjekt durch.
HalRotate-
Dieses Objekt führt die Berechnung für eine OpenGL-Drehung*eines Sammelobjekts durch, *versetzt um den HAL-Pin-Wert.
Sie können entweder:
-
read einen Pin von einer Komponente, die dem vismach Objekt gehört, oder
-
direktes Lesen eines HAL-Systempins, wenn das Komponentenargument auf
Nonegesetzt ist.
-
HalToolCylinder-
Dieses Objekt erstellt eine CylinderZ object, die Größe und Länge basierend auf der geladenen Werkzeugdefinition (aus der Werkzeugtabelle) ändert
Es liest die HAL-Pins
halui.tool.diameterundmotion.tooloffset.z.Beispiel aus dem mill_xyz-Beispiel:
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) ]) Track(engl. für Spur)-
Move and rotate an object to point from one
capture()'d coordinate system to another.Basisobjekt zur Aufnahme von Koordinaten für primitive Formen.
CylinderX,CylinderY,CylinderZ-
Build a cylinder on the X, Y or Z axis by giving endpoint (X, Y, or Z) and radii coordinates.
Sphere(engl. für Kugel)-
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
Box-
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-
Capture current transformation matrix of a collection.
NoteDies transformiert vom aktuellen Koordinatensystem in das System des Ansichtsfensters, NICHT in das Weltsystem. Hud-
Heads up display draws a semi-transparent text box.
Verwendung:
-
HUD.strsfür Dinge, die ständig aktualisiert werden müssen, -
HUD.show("stuff")für einmalige Dinge wie Fehlermeldungen.
-
Color-
Applies a color to the parts of a collection.
AsciiSTL,AsciiOBJ-
Loads a STL or OBJ data file as a Vismach part.
18.3. Anwendung
So könnte man die XYZ_mill-Simulation in eine QtVCP-Panel- oder Screenhandler-Datei importieren.
############################
# **** IMPORT SECTION **** #
############################
import mill_xyz as MILL
Instanziieren Sie das Simulations-Widget und fügen Sie es dem Hauptlayout des Bildschirms hinzu:
##########################################
# Spezielle Funktionen, die von QtVCP aufgerufen werden
##########################################
# Zu diesem Zeitpunkt:
# * sind die Widgets instanziiert.
# * die HAL-Pins sind gebaut, aber HAL ist nicht bereit
def initialized__(self):
machine = MILL.Window()
self.w.mainLayout.addWidget(maschine)
18.4. Mehr zum Thema
Weitere Informationen über die Erstellung einer benutzerdefinierten Maschinensimulation finden Sie im Kapitel zu Qt Vismach.