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 ist eine Bibliothek, die GObject Nachrichten basierend auf LinuxCNCs aktuellen Status sendet. Es ist eine Erweiterung von GladeVCP’s GStat Objekt.

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

  • Importiere Status Module +
    Fügen Sie diesen Python-Code in Ihren Import-Abschnitt ein:

    ############################
    # **** IMPORT SECTION **** #
    ############################
    
    from qtvcp.core import Status
  • Instantiierung des Moduls Status +
    Fügen Sie diesen Python-Code in Ihren "instantiate"-Abschnitt ein:

    STATUS = Status()
  • Verbindung zu STATUS-Meldungen +
    Verwenden Sie die GObject-Syntax.

1.2. Beispiel

So können Sie z. B. Ein- und Ausschaltmeldungen der Maschine auffangen.

Anmerkung
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 ist eine Bibliothek zum Sammeln und Filtern von Daten aus der INI-Datei.

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 = 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 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 = 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. 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")) or None

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

  • Importiere Info Modul
    Fügen Sie diesen Python-Code in Ihren Import-Abschnitt ein:

    ############################
    # **** IMPORT SECTION **** #
    ############################
    
    from qtvcp.core import Info
  • Instantiierung des Moduls Info.
    Fügen Sie diesen Python-Code in Ihren "instantiate"-Abschnitt ein:

    ###########################################
    # **** BIBLIOTHEKEN INSTANZIIEREN **** #
    ###########################################
    
    INFO = Info()
  • Zugriff auf INFO-Daten. Verwenden Sie diese allgemeine Syntax:

    home_state = INFO.NO_HOME_REQUIRED
    if INFO.MACHINE_IS_METRIC is True:
        print('Metric based')

3. Action

Action Bibliothek wird verwendet, um die Bewegungssteuerung von LinuxCNC zu steuern.

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

  • Importiere Action Modul
    Fügen Sie diesen Python-Code in Ihren Import-Abschnitt ein:

    ############################
    # **** IMPORT SECTION **** #
    ############################
    
    from qtvcp.core import Action
  • Instantiierung des Moduls Action
    Fügen Sie diesen Python-Code in Ihren instantiate-Abschnitt ein:

    ###########################################
    # **** BIBLIOTHEKEN INSTANZIIEREN **** #
    ###########################################
    
    ACTION = Action()
  • Zugriff auf ACTION-Befehle
    Verwenden Sie eine allgemeine Syntax wie die folgende:

    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

A library for HAL component/system interactions.

4.1. Attribute

Dies sind Funktionen zur Anwendung auf Qhal Objekte:

setUpdateRate(cyclerate)

Set cycle rate in ms

newPin(name, pin type constant, pin direction constant)

Gibt ein neues QPin-Objekt zurück

getPinObject(name)

Gibt ein vorhandenes QPin-Objekt mit dem angegebenen Namen zurück

getValue(name)

returns the named pin, signal, or parameter’s value, use the full component.pin name.

setPin(name,value)

sets the named pin’s value, use the full component.pin name.

setSignal(name,value)

sets the named signal’s value, use the full component.pin name.

makeUniqueName(Name)

returns an unique HAL pin name string by adding -x (a number) to the given pin name string

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 das Komponenten-Objekt

  • hal das hal Bibliothek 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 wird eine Funktion über ihren Namen aufrufen mit einem Argument des aktuellen Wertes (veraltet)

  • * pinValueChanged* wird eine Funktion über ihren Namen aufrufen mit Argumentes des Pin Objektes und des aktuellen Wertes

  • * isDrivenChanged* wird eine Funktion über ihren Namen aufrufen mit Argumentes des Pin Objektes und dessen aktuellen Zustands (engl. state) der Pin ist (nicht) verbunden mit einem treibenden (engl. driving) Pin

5.2. Attribute

Dies sind die Funktionen, die auf einen QPin angewendet werden können:

  • <Pin object>.get() gibt den aktuellen Wert des Pin Objektes zurück

  • <Pin Objekt>.set(X) setzt den Werte des Pin Objektes auf den Wert X

  • <Pin Objekt>.text() gibt den Pin-Namen als Zeichenkette zurück

5.3. Referenzen

Verfügbare Objekt-Referenzen:

  • hal das hal Bibliothek object

5.4. Beispiel

Hinzufügen einer Funktion, die aufgerufen wird, wenn sich der Zustand des Pins ändert
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.

Warnung
* LinuxCNC verarbeitet fremde (engl. third party) Werkzeugdateien nicht gut.*

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] werden echte Werkzeuginformationen sein

  • [1] sind Verschleißinformationen (Werkzeugnummern sind über 10000; Fanuc-Stil Werkzeugverschleiß)

Standardmäßig wird ein leerer Werkzeugeintrag mit der Werkzeugnummer -99 hinzugefügt.
Sie können das Array newtool mit Werkzeuginformationen vorbereiten.

DELETE_TOOLS(_toolnumber_)

Löschen des nummerierten Werkzeugs.

SAVE_TOOLFILE(_toolarray_)

Dies wird das toolarray parsen 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.

Anmerkung
Dies 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.

Anmerkung
Dies erfordert auch Remap-Code, um die Verschleißkompensationen und Werkzeugwechselzeit hinzuzufügen.

7. Path

Das Modul Path gibt Verweise auf wichtige Dateipfade.

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

  • Importiere Path Modul +
    Fügen Sie diesen Python-Code in Ihren Import-Abschnitt ein:

    ############################
    # **** IMPORT SECTION **** #
    ############################
    
    from qtvcp.core import Path
  • Instantiierung des Moduls Path +
    Fügen Sie diesen Python-Code in Ihren instantiate-Abschnitt ein:

    ###########################################
    # **** BIBLIOTHEKEN INSTANZIIEREN **** #
    ###########################################
    
    PATH = Path()

8. VCPWindow

Das VCPWindow Modul gibt Referenz auf das MainWindow und 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 VCPWindow Modul +
    Fügen Sie diesen Python-Code zu Ihrem Importabschnitt hinzu:

    ############################
    # **** IMPORT SECTION **** #
    ############################
    
    from qtvcp.qt_makegui import VCPWindow
  • VCPWindow-Modul instanziieren+ Fügen Sie diesen Python-Code in Ihren instantiate-Abschnitt ein:

    ###########################################
    # **** BIBLIOTHEKEN INSTANZIIEREN **** #
    ###########################################
    
    WIDGETS = VCPWindow()

9. Aux_program_loader

Aux_program_loader Modul ermöglicht einen einfachen Weg zu Hilfsprogramme zu laden, die LinuxCNC oft benutzt.

9.1. Helfer

load_halmeter()

Halmeter wird zur Anzeige von Daten eines HAL-Pins verwendet.
Laden Sie ein Halmeter mit:

AUX_PRGM.load_halmeter()
load_ladder()

SPS-Programm ClassicLadder laden:

AUX_PRGM.load_ladder()
load_status()

Laden des LinuxCNC status Programms:

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

  • Modul Aux_program_loader importieren +
    Fügen Sie diesen Python-Code zu Ihrem Importabschnitt hinzu:

############################
# **** IMPORT SECTION **** #
############################

from qtvcp.lib.aux_program_loader import Aux_program_loader
  • Instantiierung des Moduls "Aux_program_loader " +
    Fügen Sie diesen Python-Code in Ihren "instantiate"-Abschnitt ein:

###########################################
# **** BIBLIOTHEKEN INSTANZIIEREN **** #
###########################################

AUX_PRGM = Aux_program_loader()

10. Keylookup

Das Modul Keylookup wird verwendet, um Tastendrücke zur Steuerung von Verhaltensweisen zu ermöglichen wie z.B. Joggen.

Sie wird in der Handler-Datei verwendet, um die Erstellung von Tastenbindungen wie z. B. Tastatur-Jogging usw. zu erleichtern.

10.1. Anwendung

Modul Keylookup importieren

Um diese Module zu importieren, fügen Sie diesen Python-Code in Ihren Import-Abschnitt ein:

############################
# **** IMPORT SECTION **** #
############################

from qtvcp.lib.keybindings import Keylookup
Instanziieren des Moduls Keylookup

Um 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()
Anmerkung
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

Das Modul Messages dient zur Anzeige von Pop-up-Dialogmeldungen auf dem Bildschirm.

Diese Nachrichten sind:

  • definiert in der INI-Datei unter der Überschrift [DISPLAY], und

  • gesteuert durch HAL-Pins.

Use this style if you need independent HAL pins for each dialog message.

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

Specifies whether it is a (can have dialog and status options together):

  • status* - angezeigt in der Statusleiste und im Benachrichtigungsdialog.
    Erfordert keinen Benutzereingriff.

  • nonedialog - specifically does not show a dialog.

  • okdialog* - die den Benutzer auffordert, auf OK zu klicken, um den Dialog zu schließen.
    OK-Meldungen haben zwei HAL-Pins:

    • Ein HAL-Pin, um den Dialog zu starten, und

    • Einen, um anzuzeigen, dass auf eine Antwort gewartet wird. yesnodialog - zwingt denBenutzer, Ja- oder Nein-Schaltflächen zum Schließen des Dialogs auszuwählen_
      Ja/Nein-Nachrichten haben drei HAL Pins:

    • Einen, um den Dialog anzuzeigen,

    • Einen für das Warten, und

    • eine für die Antwort. message’okcanceldialog - zwingt den Benutzer, OK oder Abbrechen zum Schließen des Dialogs auszuwählen
      Ja/Nein-Nachrichten haben drei HAL Pins:

    • Einen, um den Dialog anzuzeigen,

    • Einen für das Warten, und

    • eine für die Antwort.

  • closepromptdialog - requiring the user to select

By default, STATUS messages for focus_overlay and alert sound will be sent when the dialog shows.
This allows screen focus dimming/blurring and sounds to be added to alerts.

11.2. HAL-Pins

The HAL pin names would use these patterns:

<SCREEN BASENAME>.<PINNAME>

invoking s32 pin

<SCREEN BASENAME>.<PINNAME>-waiting

Waiting for the user’s response output bit pin

<SCREEN BASENAME>.<PINNAME>-response

The user response output bit pin

<SCREEN BASENAME>.<PINNAME>-response-s32

The user response 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

Das Modul Messages dient zur Anzeige von Pop-up-Dialogmeldungen auf dem Bildschirm.

Diese Nachrichten sind:

  • definiert in der INI-Datei unter der Überschrift [DISPLAY], und

  • controlled by one s32 HAL pin per defined id.

  • each message is called by a corresponding number on the s32 pin.

Use this style of user messages for instance when a VFD sends error messages encoded as numbers.
It uses common invoke/response/wait HAL pins for all (per ID name) multimessage dialogs. The HAL pin names would use these patterns:

<SCREEN BASENAME>.<ID NAME>

invoking s32 pin

<SCREEN BASENAME>.<ID NAME>-waiting

Waiting for the user’s response output bit pin

<SCREEN BASENAME>.<ID NAME>-response

The user response output bit pin

<SCREEN BASENAME>.<ID NAME>-response-s32

The user response output s32 pin

12.1. Eigenschaften

TITLE

This is the title shown on the dialog window.

TEXT

Text unter dem Titel und in der Regel länger.

DETAIL

Text ausgeblendet, sofern nicht angeklickt.

TYPE

Specifies type of message the user sees (can have dialog and status options together):

  • status* - angezeigt in der Statusleiste und im Benachrichtigungsdialog.
    Erfordert keinen Benutzereingriff.

  • nonedialog - specifically does not show a dialog.
    okdialog - zwingt den Benutzer, auf OK zu klicken, um den Dialog zu schließen.
    OK-Meldungen haben zwei HAL-Pins:

    • Ein HAL-Pin, um den Dialog zu starten, und

    • Einen, um anzuzeigen, dass auf eine Antwort gewartet wird.

  • yesnodialog* (Ja / Nein-Nachricht) - zwingt den Benutzer zu einem Ja- oder Nein zum Schließen des Dialogs
    Ja/Nein-Nachrichten haben drei HAL Pins:

    • Einen, um den Dialog anzuzeigen,

    • Einen für das Warten, und

    • eine für die Antwort.

By default, STATUS messages for focus_overlay and alert sound will be sent when the dialog shows.
This allows screen focus dimming/blurring and sounds to be added to alerts.

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 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

Das Modul Notify wird verwendet, um Nachrichten zu versenden, die in den Desktop integriert sind.

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

Das Modul Preferences ermöglicht das Laden und dauerhafte Speichern von Einstellungsdaten von/auf Speichermedien.

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:

  • Abspielen von Sound-/Musikdateien mit Gstreamer (nicht blockierend),

  • Sounds abspielen unter Verwendung der beep-Bibliothek (blockiert derzeit beim Piepsen),

  • Sprachwörter unter Verwendung der espeak-Bibliothek (keine Blockierung beim Sprechen).

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)

Alarmsignale

Es gibt Standard-Warnungen zur Auswahl:

  • ERROR

  • READY

  • ATTENTION

  • RING

  • DONE

  • LOGIN

  • LOGOUT

Pieptöne

Es gibt drei Pieptöne:

  • BEEP_RING

  • BEEP_START

  • BEEP

15.2. Anwendung

  • Import Player module
    Fügen Sie diesen Python-Code in Ihren Import-Abschnitt ein:

    ############################
    # **** IMPORT SECTION **** #
    ############################
    
    from qtvcp.lib.audio_player import Player
  • Instantiierung des Moduls Player
    Fügen Sie diesen Python-Code zu Ihrem instanziierten Abschnitt hinzu:

    ###########################################
    # **** BIBLIOTHEKEN INSTANZIIEREN **** #
    ###########################################
    
    SOUND = Player()
    SOUND._register_messages()

    Die Funktion _register_messages() verbindet den Audioplayer mit der STATUS-Bibliothek, so dass Klänge mit dem STATUS-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

Diese Bibliothek ermöglicht es Ihnen, mit STATUS-Nachrichten eine virtuelle Tastatur zu starten.

Es verwendet Onboard oder Matchbox Bibliotheken für die 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)
power
load
reload
gcode_properties
run
pause
abort
block_delete (engl. für Block löschen)
optional_stop
touchoffworkplace
touchofffixture
runfromline (Ausführen von gegebener Zeile)
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

Schaltet die Anzeige der Dimensionen um.

17.2. Untermenüs

recent_submenu
home_submenu
unhome_submenu
zero_systems_submenu
grid_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 ist ein Satz von Python-Funktionen, der dazu verwendet werden kann, Modelle von Maschinen zu erstellen und zu animieren.

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 Sammlung ist 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 None gesetzt 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 None gesetzt 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.diameter und motion.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)

Bewege und drehe ein Objekt, um von einer capture()-Koordinate aus zu zeigen System zu einem anderen.

Basisobjekt zur Aufnahme von Koordinaten für primitive Formen.

CylinderX, CylinderY, CylinderZ

*Konstruieren Sie einen Zylinder auf der X-, Y- oder Z-Achse, indem Sie den Endpunkt (X, Y oder Z) und Radien Koordinaten.

Sphere (engl. für Kugel)

Baue eine Kugel aus den Koordinaten center und radius.

TriangleXY, TriangleXZ, TriangleYZ

Baue ein Dreieck in der angegebenen Ebene durch Angabe der Z-Koordinaten der Eckpunkte_ für jede Seite.

ArcX

Bogen erstellen durch Angabe

Box

Erstellen Sie eine Box, die durch den coordinates_ _6-Scheitelpunkt angegeben wird.

BoxCentered

Erstellen einer Box zentriert auf Ursprung durch Angabe der Breite/Tiefe in X und Y, und deren Höhe in Z.

BoxCenteredXY

Erstelle eine Box, die in X und Y zentriert ist und von Z=0 ausgeht, indem man die Breite in X und Y angibt und nach oben oder unten bis zur angegebenen Höhe in Z läuft.

Capture

Erfassen der aktuellen Transformationsmatrix einer Sammlung.

Anmerkung
Dies transformiert vom aktuellen Koordinatensystem in das System des Ansichtsfensters, NICHT in das Weltsystem.
Hud

Heads up display zeichnet ein semi-transparentes Textfeld.

Verwendung:

  • HUD.strs für Dinge, die ständig aktualisiert werden müssen,

  • HUD.show("stuff") für einmalige Dinge wie Fehlermeldungen.

Color

Wendet eine Farbe an auf die Teile einer Collection.

AsciiSTL, AsciiOBJ

Lädt eine STL- oder OBJ-Datendatei als Vismach part.

18.3. Anwendung

Importieren einer Simulation

So könnte man die XYZ_mill-Simulation in eine QtVCP-Panel- oder Screenhandler-Datei importieren.

############################
# **** IMPORT SECTION **** #
############################

import mill_xyz as MILL
Instanziierung und Verwendung des Simulations-Widgets

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.