1. Übersicht
-
NGCGUI ist eine Tcl-Anwendung zur Arbeit mit Unterroutinen. Es ermöglicht Ihnen, eine Konversationsschnittstelle mit LinuxCNC zu haben. Sie können die Unterroutinen in der Reihenfolge organisieren, in der Sie sie ausführen und die Unterroutinen in einer Datei für ein vollständiges Teileprogramm verketten müssen.
-
NGCGUI kann als eigenständige Anwendung ausgeführt oder in mehrere Registerkarten in der AXIS GUI eingebettet werden.
-
PYNGCGUI ist eine alternative Python-Implementierung von NGCGUI.
-
PyNGCGUI kann als eigenständige Anwendung laufen oder als Registerkarte (mit einem eigenen Satz von mehreren Unterprogramm-Registerkarten) in jede GUI eingebettet werden, die eine Einbettung der GladeVCP-Anwendungen AXIS, Touchy, Gscreen und GMOCCAPY unterstützt.
NGCGUI oder PyNGCGUI verwenden:
-
Für jedes in der INI-Datei angegebene Unterprogramm gibt es Registerkarten (engl. tabs).
-
Neue Subroutinen-Registerkarten können mit dem custom tab spontan hinzugefügt werden.
-
Jede Registerkarte eines Unterprogramms enthält Eingabefelder für alle Unterprogrammparameter.
-
Die Eingabefelder können einen Standardwert und eine Bezeichnung haben, die durch spezielle Kommentare in der Unterprogrammdatei gekennzeichnet sind.
-
Unterprogrammaufrufe können miteinander verkettet werden, um ein mehrschrittiges Programm zu bilden.
-
Jede G-Code-Subroutine in einer einzigen Datei, die den NGCGUI-Konventionen entspricht, kann verwendet werden.
-
Jedes gcmc-Programm (G-Code-Meta-Compiler), das den NGCGUI-Konventionen für die Kennzeichnung von Variablen entspricht, kann verwendet werden. (Die ausführbare Datei gcmc muss separat installiert werden, siehe: https://www.vagrearg.org/content/gcmc)
Anmerkung
|
NGCGUI und PyNGCGUI implementieren die gleichen Funktionen und verarbeiten beide .ngc- und .gcmc-Dateien, die einigen NGCGUI-spezifischen Konventionen entsprechen. In diesem Dokument bezieht sich der Begriff "NGCGUI" im Allgemeinen auf beide Anwendungen. |
2. Beispiel-Konfigurationen
Eine Reihe von Demonstrations-Konfigurationen sind in der sim-Verzeichnis der Sample Configurations von der LinuxCNC Konfiguration Picker angeboten befindet. Der Konfigurationspicker befindet sich im Hauptmenü des Systems: Anwendungen > CNC > LinuxCNC
Es sind Beispiele für AXIS, Touchy, Gscreen und GMOCCAPY enthalten. Diese Beispiele demonstrieren sowohl kartesische 3-Achsen-Konfigurationen (wie Fräsmaschinen) als auch Drehbank-Konfigurationen (XZ). Einige Beispiele zeigen die Verwendung einer Pop-up-Tastatur für Touchscreen-Systeme und andere Beispiele demonstrieren die Verwendung von Dateien, die für die Anwendung gcmc (G-code Meta Compiler) erstellt wurden. Die berührungsempfindlichen Beispiele zeigen auch die Einbindung eines GladeVCP-Backplot-Viewers (gremlin_view).
Die einfachste Anwendung ist die folgende:
Sample Configurations/sim/axis/ngcgui/ngcgui_simple
Ein umfassendes Beispiel für die Kompatibilität von gcmc finden Sie unter:
Sample Configurations/sim/axis/ngcgui/ngcgui_gcmc
Ein umfassendes Beispiel, das als GladeVCP-App eingebettet ist und gcmc verwendet, finden Sie unter:
Sample Configurations/sim/gscreen/ngcgui/pyngcgui_gcmc
Die Beispielsimulationskonfigurationen verwenden Bibliotheksdateien, die Beispiel-G-Code-Unterprogrammdateien (.ngc) und G-Code-Meta-Compilerdateien (.gcmc) enthalten:
-
nc_files/ngcgui_lib
-
ngcgui.ngc - Ein leicht verständliches Beispiel mit Unterroutinen
-
arc1.ngc - Kreisbogen mit Fräserradiuskompensation
-
arc2.ngc - Bogen angegeben durch Zentrum, Offset, Breite, Winkel (ruft arc1 auf)
-
backlash.ngc - Routine zur Messung eines Achsenspiels mit Wählanzeige
-
db25.ngc - erstellt einen DB25-Plug-Ausschnitt
-
gosper.ngc - eine Rekursionsdemo (FlowSnake)
-
helix.ngc - Helix- oder D-Loch-Schneiden
-
helix_rtheta.ngc - Helix oder D-Loch, die durch Radius und Winkel positioniert sind
-
hole_circle.ngc - gleichmäßig verteilte Löcher auf einem Kreis
-
ihex.ngc - internes Sechseck (hexagon)
-
iquad.ngc - internal quadrilateral
-
ohex.ngc - äußeres (engl. outside) hexagon
-
oquad.ngc - äußeres (engl. outside) quadrilateral
-
qpex_mm.ngc - Demo von qpockets (mm-basiert)
-
qpex.ngc - Demo von qpockets (zollbasiert)
-
qpocket.ngc - vierseitige Tasche (lateinisch/englisch quadrilateral pocket)
-
rectangle_probe.ngc - sondiert einen rechteckigen Bereich
-
simp.ngc - ein einfaches Beispiel für ein Unterprogramm, das zwei Kreise erzeugt
-
slot.ngc - Schlitz aus der Verbindung zweier Endpunkte
-
xyz.ngc - Maschinentrainer, der auf eine Kastenform beschränkt ist
-
Custom - Erzeugt Benutzer-angepasste Registrierkarten (engl. tabs)
-
ttt - True Type Tracer, um Texte zu erstellen, die graviert werden sollen
-
-
nc_files/ngcgui_lib/lathe
-
ngcgui-lathe' - Beispiel-Unterprogramm für Drehmaschinen
-
g76base.ngc - GUI für G76 Gewindebohren
-
g76diam.ngc' - Gewinde nach Haupt- und Nebendurchmesser spezifiziert
-
id.ngc - bohrt den Innendurchmesser
-
od.ngc - dreht den Außendurchmesser
-
taper-od.ngc' - dreht einen Kegel auf dem Außendurchmesser
-
Custom - Erzeugt Benutzer-angepasste Registrierkarten (engl. tabs)
-
-
nc_files/gcmc_lib
-
drill.gcmc - Löcher im Rechteckmuster bohren
-
square.gcmc' - einfache Demo von variablen Tags für gcmc-Dateien
-
star.gcmc - GCMC-Demo zur Veranschaulichung von Funktionen und Arrays
-
wheels.gcmc - GCMC Demo komplexer Muster
-
Um eine Demonstration zu versuchen, wählen Sie eine Sim-Konfiguration und starten Sie das LinuxCNC-Programm.
Wenn Sie die AXIS GUI verwenden, drücken Sie auf "Notaus" (engl. E-Stop) und dann auf "Machine Power" und dann auf "Refefernzierfahrt aller Achsen" (engl. Home All). Wählen Sie eine NGCGUI-Registerkarte, füllen Sie alle leeren Felder mit sinnvollen Werten aus und drücken Sie auf "Feature anlegen" (engl. create feature) und dann auf "Finalize". Drücken Sie abschließend auf die Schaltfläche "Ausführen" , um die Ausführung zu beobachten. Experimentieren Sie, indem Sie mehrere Merkmale und Merkmale aus verschiedenen Registerkarten erstellen.
Um mehrere Unterprogramme zu erstellen, die in einer einzigen Datei zusammengefasst sind, gehen Sie zu jeder Registerkarte, füllen Sie die Leerstellen aus und drücken Sie "Feature erstellen". Drücken Sie nun auf "Abschließen" und beantworten Sie die Aufforderung zum Erstellen von
Andere GUIs haben eine ähnliche Funktionalität, aber die Schaltflächen und Namen können unterschiedlich sein.
Anmerkung
|
Die Demonstrationskonfigurationen erstellen Registerkarten für nur einige der mitgelieferten Beispiele. Jede GUI mit einem angepassten Registrierkarte kann jede der Bibliotheks-Beispiel-Subroutinen oder jede Benutzerdatei öffnen, wenn sie sich im LinuxCNC-Subroutinenpfad befindet. Um spezielle Tastenbelegungen zu sehen, klicken Sie in eine ngcgui-Registerkarte, um den Fokus zu erhalten, und drücken Sie dann STRG-K. Die Demonstrationsunterprogramme sollten auf den simulierten Maschinenkonfigurationen laufen, die in der Distribution enthalten sind. Ein Benutzer sollte immer das Verhalten und den Zweck eines Programms verstehen, bevor er es auf einer echten Maschine ausführt. |
3. Bibliothek (engl. library)-Verzeichnisse (engl. locations)
In LinuxCNC-Installationen, die aus .deb-Paketen installiert wurden, verwenden die Simulationskonfigurationen für NGCGUI symbolische Links zu nicht vom Benutzer beschreibbaren LinuxCNC-Bibliotheken für:
-
nc_files/ngcgui_lib NGCGUI-compatible subfiles
-
nc_files/ngcgui_lib/lathe NGCGUI-compatible lathe subfiles
-
nc_files/gcmc_lib NGCGUI-gcmc-compatible programs
-
nc_files/ngcgui_lib/utilitysubs Helper subroutines
-
nc_files/ngcgui_lib/mfiles User M files
Diese Bibliotheken werden durch INI-Datei-Elemente gefunden, in denen die Suchpfade von LinuxCNC (und NGCGUI) stehen:
[RS274NGC] SUBROUTINE_PATH = ../../nc_files/ngcgui_lib:../../nc_files/gcmc_lib:../../nc_files/ngcgui_lib/utilitysubs USER_M_PATH = ../../nc_files/ngcgui_lib/mfiles
Anmerkung
|
Dabei handelt es sich um lange Zeilen (die nicht über mehrere Zeilen fortgesetzt werden), in denen die in einem Suchfeld verwendeten Verzeichnisse angegeben werden. Die Verzeichnisnamen werden durch Doppelpunkte (:) getrennt. Zwischen den Verzeichnisnamen sollten keine Leerzeichen stehen. |
Ein Benutzer kann neue Verzeichnisse für seine eigenen Unterprogramme und M-Dateien erstellen und sie zu den Suchpfaden hinzufügen.
So könnte ein Benutzer beispielsweise Verzeichnisse vom Terminal aus mit den folgenden Befehlen erstellen:
mkdir /home/myusername/mysubs
mkdir /home/myusername/mymfiles
Und dann die vom System bereitgestellten Dateien in diesen vom Benutzer beschreibbaren Verzeichnisse anlegen oder dorthin kopieren. Ein Benutzer könnte zum Beispiel eine NGCGUI-kompatible Unterdatei namens:
/home/myusername/mysubs/example.ngc
Um Dateien in neuen Verzeichnissen zu verwenden, muss die INI-Datei bearbeitet werden, um die neuen Unterdateien einzuschließen und den Suchpfad/die Suchpfade zu ergänzen. Für dieses Beispiel:
[RS274NGC] ... SUBROUTINE_PATH = /home/myusername/mysubs:../../nc_files/ngcgui_lib:../../nc_files/gcmc_lib:../../nc_files/ngcgui_lib/utilitysubs USER_M_PATH = /home/myusername/mymfiles:../../nc_files/ngcgui_lib/mfiles [DISPLAY] ... NGCGUI_SUBFILE = example.ngc ...
LinuxCNC (und NGCGUI) verwenden die erste gefundene Datei bei der Suche nach Verzeichnissen im Suchpfad. Mit diesem Verhalten können Sie eine ngcgui_lib Unterdatei ersetzen, indem Sie eine Unterdatei mit einem identischen Namen in einem Verzeichnis platzieren, das früher in der Pfadsuche gefunden wird. Weitere Informationen finden Sie im INI-Kapitel des Integrators Manual.
4. Standalone-Nutzung
4.1. Eigenständiges NGCGUI
Zur Verwendung geben Sie in ein Terminal ein:
ngcgui --help
Usage:
ngcgui --help | -?
ngcgui [Options] -D <nc-Dateien Verzeichnisname>
ngcgui [Options] -i <LinuxCNC INI Dateiname>
ngcgui [Options]
Optionen:
[-S subroutine_file]
[-p preamble_file]
[-P postamble_file]
[-o output_file]
[-a autosend_file] (automatisches Senden an AXIS Standard:auto.ngc)
[--noauto] (keine automatische Übertragung an AXIS)
[-N | --nom2] (kein m2-Terminator (% verwenden))
[--font [big|small|fontspec]] (Voreinstellung: "Helvetica -10 normal")
[--horiz|--vert] (Voreinstellung: --horiz)
[--cwidth comment_width] (Breite des Kommentarfeldes)
[--vwidth varname_width] (Breite des Feldes varname)
[--quiet] (weniger Kommentare in der Ausgabedatei)
[--noiframe] (Voreinstellung: Rahmen zeigt Bild an)
Anmerkung
|
Als eigenständige Anwendung bearbeitet NGCGUI eine einzelne Unterprogrammdatei, die mehrfach aufgerufen werden kann. Mehrere eigenständige NGCGUI-Anwendungen können unabhängig voneinander gestartet werden. |
4.2. Eigenständiges (engl. standalone) PyNGCGUI
Zur Verwendung geben Sie in ein Terminal ein:
pyngcgui --help
Verwendung:
pyngcgui [Optionen] [<sub_filename>]
Optionen, die Werte erfordern:
[-d | --demo] [0|1|2] (0: DEMO eigenständige Toplevel)
(1: DEMO neues Notizbuch einbetten)
(2: DEMO innerhalb eines bestehenden Notizbuchs einbetten)
[-S | --subfile <sub_filename>]
[-p | --preamble <preamble_filename>]
[-P | --postamble <postamble_filename>]
[-i | --ini <inifile_name>]
[-a | --autofile <auto_filename>]
[-t | --test <testno>]
[-K | --keyboardfile <glade_file>] (benutzerdefinierte popupkeyboard glade-Datei verwenden)
Solo-Optionen:
[-v | --verbose]
[-D | --debug]
[-N | --nom2] (kein m2-Terminator (% verwenden))
[-n | --noauto] (speichern, aber Ergebnis nicht automatisch senden)
[-k | --keyboard] (Standard-Popupkeybaord verwenden)
[-s | --sendtoaxis] (generierte NGC-Datei an Achsen-GUI senden)
Anmerkungen:
Ein Satz von Dateien besteht aus einer Präambel, einer Unterdatei und einer Postambel.
Die Präambel und Postambel sind optional.
Ein Satz von Dateien kann über cmdline angegeben werden.
Mehrere Dateisätze können über eine INI-Datei angegeben werden.
Wenn --ini NICHT angegeben ist:
Suche nach einem laufenden LinuxCNC und verwende dessen INI-Datei
Anmerkung
|
Als eigenständige Anwendung kann PyNGCGUI eine INI-Datei (oder eine laufende LinuxCNC-Anwendung) lesen, um Registerkarten für mehrere Unterdateien zu erstellen. |
5. NGCGUI einbetten
5.1. NGCGUI in AXIS einbetten
Die folgenden INI-Datei-Elemente gehören in den Abschnitt [DISPLAY]. (Siehe weitere Abschnitte unten für zusätzlich benötigte Elemente)
-
TKPKG = Ngcgui 1.0 - das NGCGUI-Paket
-
TKPKG = Ngcguittt 1.0 - das True Type Tracer-Paket zum Generieren von Text für die Gravur (optional, muss TKPKG = Ngcgui folgen).
-
NGCGUI_FONT = Helvetica -12 normal - Legt die verwendete Schriftart fest
-
NGCGUI_PREAMBLE = in_std.ngc' - Die Präambel-Datei, die am Anfang des Unterprogramms hinzugefügt wird. Bei der Verkettung mehrerer Unterprogramme wird sie nur einmal hinzugefügt.
-
NGCGUI_SUBFILE = simp.ngc - Erstellt eine Registerkarte aus der benannten Unterroutine.
-
NGCGUI_SUBFILE = "" - Erzeugt eine benutzerdefinierte Registerkarte
-
#NGCGUI_OPTIONS = opt1 opt2 … - NGCGUI-Optionen:
-
nonew — Prohibits creation of new custom tab
-
noremove — Prohibits deleting a tab page
-
noauto — Do not run automatically (makeFile, then manual run)
-
noiframe — No internal image, image on separate top level
-
-
TTT = truetype-tracer - name of the truetype tracer program (it must be in user PATH)
-
TTT_PREAMBLE = in_std.ngc - Optional, specifies filename for preamble used for ttt created subfiles. (alternate: mm_std.ngc)
Anmerkung
|
Die optionalen truetype-tracer-Elemente werden verwendet, um eine NGCGUI-kompatible Registerkarte anzugeben für die Anwendung von truetype-tracer. Die truetype-tracer-Anwendung muss unabhängig installiert werden und sich im Benutzer-PATH befinden. |
5.2. PyNGCGUI als GladeVCP-Registerkarte in ein GUI einbetten
Die folgenden INI-Datei-Elemente gehören in den Abschnitt [DISPLAY] zur Verwendung mit den grafischen Benutzeroberflächen AXIS, Gscreen oder Touchy. (Weitere benötigte Elemente finden Sie in den folgenden Abschnitten)
-
EMBED_TAB_NAME = PyNGCGUI
- Name, der auf der eingebetteten Registerkarte erscheinen soll -
EMBED_TAB_COMMAND = gladevcp -x {XID} pyngcgui_axis.ui
- ruft GladeVCP auf -
EMBED_TAB_LOCATION = name_of_location
- wo sich die eingebettete Seite befindet
Anmerkung
|
Der EMBED_TAB_LOCATION-Spezifizierer wird nicht für die AXIS-GUI verwendet. Während PyNGCGUI in AXIS eingebettet werden kann, ist die Integration vollständiger, wenn NGCGUI verwendet wird (mit TKPKG = Ngcgui 1.0). Um die EMBED_TAB_LOCATION für andere GUIs festzulegen, vgl. den Abschnitt zu DISPLAY des INI-Konfigurationskapitels. |
Anmerkung
|
Das Truetype Tracer GUI-Frontend ist derzeit nicht für GladeVCP-Anwendungen verfügbar. |
5.3. Zusätzliche INI-Datei-Elemente, die für NGCGUI oder PyNGCGUI erforderlich sind
Die folgenden INI-Datei-Elemente gehören in den Abschnitt [DISPLAY] für jede GUI, die entweder NGCGUI oder PyNGCGUI einbindet.
-
NGCGUI_FONT = Helvetica -12 normal' - gibt den Namen und die Größe der Schriftart an, normal|fett (engl. bold)
-
NGCGUI_PREAMBLE = in_std.ngc' - die Präambel-Datei, die den Unterprogrammen vorangestellt wird. Bei der Verkettung mehrerer gemeinsamer Subroutinenaufrufe wird diese Präambel nur einmal hinzugefügt. Für mm-basierte Maschinen verwenden Sie mm_std.ngc
-
NGCGUI_SUBFILE = filename1.ngc - erstellt eine Registerkarte aus der Unterroutine filename1
-
NGCGUI_SUBFILE = filename2.ngc - erstellt eine Registerkarte aus der Unterroutine filename2
-
… usw.
-
NGCGUI_SUBFILE = gcmcname1.gcmc - erstellt eine Registerkarte aus der Datei gcmcname1
-
NGCGUI_SUBFILE = gcmcname2.gcmc - erstellt eine Registerkarte aus der Datei gcmcname2
-
… usw.
-
NGCGUI_SUBFILE = "" - erstellt eine benutzerdefinierte Registerkarte, die jede Unterroutine im Suchpfad öffnen kann
-
NGCGUI_OPTIONS = opt1 opt2 … - NGCGUI-Optionen
-
nonew - Erstellen eines neuen benutzerdefinierten Tabs nicht zugelassen
-
noremove - das Entfernen von Tab-Seiten nicht zugelassen
-
noauto - kein automatisches Senden (makeFile verwenden, dann speichern oder manuell senden)
-
noiframe - kein internes Bild, Bilder auf separatem Top-Level-Widget anzeigen
-
nom2 - nicht mit m2 abschließen, sondern %-Terminator verwenden. Diese Option beseitigt alle Nebeneffekte der m2-Terminierung
-
-
GCMC_INCLUDE_PATH = dirname1:dirname2' - sucht Verzeichnisse nach gcmc-Include-Dateien
Dies ist ein Beispiel für die Einbettung von NGCGUI in AXIS. Die Unterprogramme müssen sich in einem Verzeichnis befinden, das durch den [RS274NGC]SUBROUTINE_PATH angegeben ist. Einige Beispielsubroutinen verwenden andere Subroutinen, daher sollten Sie sicherstellen, dass Sie die Abhängigkeiten, falls vorhanden, in einem SUBROUTINE_PATH-Verzeichnis haben. Einige Unterprogramme können benutzerdefinierte M-Dateien verwenden, die sich in einem durch [RS274NGC]USER_M_PATH angegebenen Verzeichnis befinden müssen.
Der G-Code-Meta-Compiler (gcmc) kann Anweisungen wie diese enthalten:
include("filename.inc.gcmc");
Standardmäßig schließt gcmc das aktuelle Verzeichnis ein, das für LinuxCNC das Verzeichnis ist, das die LinuxCNC INI-Datei enthält. Zusätzliche Verzeichnisse können der gcmc-Suchreihenfolge mit dem Element GCMC_INCLUDE_PATH vorangestellt werden.
[RS274NGC] ... SUBROUTINE_PATH = ../../nc_files/ngcgui_lib:../../ngcgui_lib/utilitysubs USER_M_PATH = ../../nc_files/ngcgui_lib/mfiles [DISPLAY] TKPKG = Ngcgui 1.0 TKPKG = Ngcguittt 1.0 # Ngcgui muss vor Ngcguittt stehen NGCGUI_FONT = Helvetica -12 normal # nur Dateinamen angeben, Dateien müssen sich im [RS274NGC]SUBROUTINE_PATH befinden NGCGUI_PREAMBLE = in_std.ngc NGCGUI_SUBFILE = simp.ngc NGCGUI_SUBFILE = xyz.ngc NGCGUI_SUBFILE = iquad.ngc NGCGUI_SUBFILE = db25.ngc NGCGUI_SUBFILE = ihex.ngc NGCGUI_SUBFILE = gosper.ngc # angeben von "" für eine benutzerdefinierte Registerkarte NGCGUI_SUBFILE = "" #NGCGUI_SUBFILE = "" verwenden, wenn ein Bildrahmen angegeben ist, # wenn das Öffnen anderer Dateien erforderlich ist # Bilder werden in ein Fenster der obersten Ebene gestellt NGCGUI_OPTIONS = #NGCGUI_OPTIONS = opt1 opt2 ... # opt items: # nonew -- disallow making a new custom tab # noremove -- disallow removing any tab page # noauto -- no auto send (makeFile, then manually send) # noiframe -- no internal image, image on separate top level GCMC_INCLUDE_PATH = /home/myname/gcmc_includes TTT = truetype-tracer TTT_PREAMBLE = in_std.ngc PROGRAM_PREFIX = ../../nc_files
Anmerkung
|
Die obige Datei ist keine vollständige AXIS GUI INI — die gezeigten Elemente sind diejenigen, die von NGCGUI verwendet werden. Viele zusätzliche Elemente werden von LinuxCNC erforderlich, um eine vollständige INI-Datei haben. |
5.4. Truetype Tracer
Ngcgui_ttt bietet Unterstützung für truetype-tracer (v4). Es erstellt eine AXIS-Registerkarte, die es dem Benutzer ermöglicht, eine neue NGCGUI-Registerkarte zu erstellen, nachdem er Text eingegeben und eine Schriftart sowie andere Parameter ausgewählt hat. (Truetype-tracer muss unabhängig installiert werden).
Um ngcgui_ttt in AXIS einzubetten, geben Sie zusätzlich zu den NGCGUI-Elementen die folgenden Elemente an:
Element: [DISPLAY]TKPKG = Ngcgui_ttt version_number
Beispiel: [DISPLAY]TKPKG = Ngcgui_ttt 1.0
Hinweis: Obligatorisch, gibt das Laden von ngcgui_ttt in einer AXIS-Registerkarte namens ttt.
Muss auf den Eintrag TKPKG = Ngcgui folgen.
Element: [DISPLAY]TTT = pfad_zum_truetype-tracer
Beispiel: [DISPLAY]TTT = truetype-tracer
Note: Optional, wenn nicht angegeben, wird der Pfad /usr/local/bin/truetype-tracer versucht.
Angabe mit absolutem Pfadnamen oder als einfacher ausführbarer Befehl.
In diesem Fall wird die PATH-Umgebung des Benutzers verwendet, um das Programm zu finden.
Element: [DISPLAY]TTT_PREAMBLE = preamble_filename
Beispiel: [DISPLAY]TTT_PREAMBLE = in_std.ngc
Hinweis: Optional, gibt den Dateinamen der Präambel an, für die von ttt erstellten Unterdateien.
5.5. INI-Datei Pfad-Spezifikationen
NGCGUI verwendet den LinuxCNC-Suchpfad, um Dateien zu finden. Der Suchpfad beginnt mit dem Standardverzeichnis, das angegeben wird durch:
[DISPLAY]PROGRAM_PREFIX = verzeichnis_name
gefolgt von mehreren Verzeichnissen, angegeben durch:
[RS274NGC]SUBROUTINE_PATH = Verzeichnis1_Name:Verzeichnis1_Name:Verzeichnis3_Name ...
Verzeichnisse (engl. directories) können als absolute Pfade oder relative Pfade angegeben werden.
-
Beispiel:
[DISPLAY]PROGRAM_PREFIX = /home/myname/linuxcnc/nc_files
-
Beispiel:
[DISPLAY]PROGRAM_PREFIX = ~/linuxcnc/nc_files
-
Beispiel:
[DISPLAY]PROGRAM_PREFIX = .. /.. /nc_files
Ein absoluter Pfad, der mit einem "/" beginnt, gibt einen vollständigen Dateisystemstandort an. Ein Pfad, der mit "~/" beginnt, gibt einen Pfad an, der im Home-Verzeichnis des Benutzers beginnt. Ein Pfad, der mit "~Benutzername/" beginnt, legt einen Pfad fest, der im Home-Verzeichnis des Benutzers beginnt.
Relative Pfade basieren auf dem Startverzeichnis, also dem Verzeichnis, das die INI-Datei enthält. Die Verwendung relativer Pfade kann das Verschieben von Konfigurationen erleichtern, erfordert aber ein gutes Verständnis der Linux-Pfadangaben.
-
./d0
is the same as d0, e.g., a directory named d0 in the startup directory -
../d1
refers to a directory d1 in the parent directory -
../../d2
refers to a directory d2 in the parent of the parent directory -
../../../d3
etc.
Mehrere Verzeichnisse können mit [RS274NGC]SUBROUTINE_PATH angegeben werden, indem sie durch Doppelpunkte getrennt werden. Das folgende Beispiel veranschaulicht das Format für mehrere Verzeichnisse und zeigt die Verwendung von relativen und absoluten Pfaden.
[RS274NGC]SUBROUTINE_PATH = ../../nc_files/ngcgui_lib:../../nc_files/ngcgui_lib/utilitysubs:/tmp/tmpngc
Dies ist eine lange Zeile, fahren Sie nicht in mehreren Zeilen fort. Wenn LinuxCNC und/oder NGCGUI nach Dateien suchen, wird die erste Datei, die bei der Suche gefunden wird, verwendet.
LinuxCNC (und NGCGUI) muss in der Lage sein, alle Unterprogramme einschließlich der Hilfsroutinen zu finden, die aus den NGCGUI Unterdateien aufgerufen werden. Es ist zweckmäßig, Utility-Subs in einem separaten Verzeichnis zu platzieren, wie im obigen Beispiel angegeben.
Die Distribution enthält das Verzeichnis ngcgui_lib und Demodateien für Präambeln, Subdateien, Postambeln und Hilfsdateien. Um das Verhalten der Dateien zu ändern, können Sie eine beliebige Datei kopieren und sie an einer früheren Stelle des Suchpfads platzieren. Das erste Verzeichnis, das durchsucht wird, ist [DISPLAY]PROGRAM_PREFIX. Sie können dieses Verzeichnis verwenden, aber es ist besser, eigene Verzeichnisse zu erstellen und sie an den Anfang des [RS274NGC]SUBROUTINE_PATH zu stellen.
Im folgenden Beispiel werden die Dateien in /home/myname/linuxcnc/mysubs vor den Dateien in ../../nc_files/ngcgui_lib gefunden.
[RS274NGC]SUBROUTINE_PATH = /home/myname/linuxcnc/mysubs:../../nc_files/ngcgui_lib:../../nc_files/ngcgui_lib/utilitysubs
Neue Benutzer können versehentlich versuchen, Dateien zu verwenden, die nicht so strukturiert sind, dass sie mit den Anforderungen von NGCGUI kompatibel sind. NGCGUI wird wahrscheinlich zahlreiche Fehler melden, wenn die Dateien nicht nach seinen Konventionen kodiert sind. Gute Praxis legt nahe, dass ngcgui-kompatible Unterdateien in ein dafür vorgesehenes Verzeichnis gelegt werden sollten und dass Präambel-, Postambel- und Hilfsdateien in separaten Verzeichnissen liegen sollten, um Versuche, sie als Unterdateien zu verwenden, zu unterbinden. Dateien, die nicht für die Verwendung als Unterdateien vorgesehen sind, können einen speziellen Kommentar enthalten: "(not_a_subfile)", so dass NGCGUI sie automatisch mit einer entsprechenden Meldung zurückweist.
5.6. Zusammenfassung der Details der INI-Datei für die Verwendung von NGCGUI
- [RS274NGC]SUBROUTINE_PATH = dirname1:dirname2:dirname3 …
-
Example:
[RS274NGC]SUBROUTINE_PATH = ../../nc_files/ngcgui_lib:../../nc_files/ngcgui_lib/utilitysubs
Note: Optional, but very useful to organize subfiles and utility files. - [RS274NGC]USER_M_PATH = dirname1:dirname2:dirname3 …
-
Example:
[RS274NGC]USER_M_PATH = ../../nc_files/ngcgui_lib/mfiles
Note: Optional, needed to locate custom user M-files. - [DISPLAY]EMBED_TAB_NAME = Name, der auf der eingebetteten Registerkarte angezeigt wird
-
Example:
[DISPLAY]EMBED_TAB_NAME = Pyngcgui
Note: The entries:EMBED_TAB_NAME
,EMBED_TAB_COMMAND
,EMBED_TAB_LOCATION
define an embedded application for several LinuxCNC GUIs. - [DISPLAY]EMBED_TAB_COMMAND = Programmname gefolgt von Argumenten
-
Example:
[DISPLAY]EMBED_TAB_COMMAND = gladevcp -x {XID} pyngcgui_axis.ui
Note: For GladeVCP applications, see the GladeVCP Chapter. - [DISPLAY]EMBED_TAB_LOCATION = Name_des_Ortes (engl. location)
-
Example:
[DISPLAY]EMBED_TAB_LOCATION = notebook_main
Note: See example INI files for possible locations.
Not required for the AXIS GUI. - [DISPLAY]PROGRAM_PREFIX = Verzeichnisname
-
Example:
[DISPLAY]PROGRAM_PREFIX = ../../nc_files
Note: Mandatory and needed for numerous LinuxCNC functions.
It is the first directory used in the search for files. - [DISPLAY]TKPKG = NGCGUI version_number
-
Example:
[DISPLAY]TKPKG = Ngcgui 1.0
Note: Required only for AXIS GUI embedding.
Specifies loading of NGCGUI AXIS tab pages. - [DISPLAY]NGCGUI_FONT = Schriftart_deskriptor
-
Example: [DISPLAY]NGCGUI_FONT = Helvetica -12 normal
Note: Optional, font_descriptor is a tcl-compatible font specifier with items for fonttype -fontsize fontweight.
Default is: Helvetica -10 normal.
Smaller font sizes may be useful for small screens.
Larger font sizes may be helpful for touch screen applications . - [ANZEIGE] NGCGUI_SUBFILE = subfile_filename
-
Example:
[DISPLAY]NGCGUI_SUBFILE = simp.ngc
Example:[DISPLAY]NGCGUI_SUBFILE = square.gcmc
Example:[DISPLAY]NGCGUI_SUBFILE = ""
Note: Use one or more items to specify NGCGUI-compatible subfiles or gcmc programs that require a tab page on startup.
A "Custom" tab will be created when the filename is "".
A user can use a "Custom" tab to browse the file system and identify preamble, subfile, and postamble files. - [DISPLAY]NGCGUI_PREAMBLE = preamble_filename
-
Example:
[DISPLAY]NGCGUI_PREAMBLE = in_std.ngc
Note: Optional, when specified, the file is prepended to a subfile.
Files created with "Custom" tab pages use the preamble specified with the page. - [ANZEIGE] NGCGUI_POSTAMBLE = postamble_filename
-
Example:
[DISPLAY]NGCGUI_POSTAMBLE = bye.ngc
Note: Optional, when specified, the file is appended to a subfiles.
Files created with "Custom" tab pages use the postamble specified with the page. - [DISPLAY]NGCGUI_OPTIONS = opt1 opt2 …
-
Example: [DISPLAY]NGCGUI_OPTIONS = nonew noremove
Note: Multiple options are separated by blanks.
By default, NGCGUI configures tab pages so that:
1) a user can make new tabs;
2) a user can remove tabs (except for the last remaining one);
3) finalized files are automatically sent to LinuxCNC;
4) an image frame (iframe) is made available to display an image for the subfile (if an image is provided);
5) the NGCGUI result file sent to LinuxCNC is terminated with an M2 (and incurs M2 side-effects).
Die Optionen
nonew
,noremove
,noauto
,noiframe
,nom2
schalten diese Standardverhaltensweisen jeweils aus.Standardmäßig wird, wenn eine Bilddatei (.png,.gif,jpg,pgm) in demselben Verzeichnis wie die Unterdatei gefunden wird, das Bild im iframe angezeigt. Bei Angabe der Option "noiframe" werden zusätzliche Schaltflächen zur Verfügung gestellt für die Auswahl von Präambel, Subdatei und Postambel sowie zusätzliche Kontrollkästchen. Die Auswahl der Kontrollkästchen sind immer mit speziellen Tasten verfügbar:
Strg-R
Umschalten von "Werte beim Lesen von Subfiles beibehalten",
Strg-E
Umschalten "Unterprogramm erweitern",
Strg-a
Umschalten "Automatisches Senden",
Strl-k
listet alle Tasten und Funktionen auf.Wenn
noiframe
angegeben ist und eine Bilddatei gefunden wird, so wird das Bild in einem separaten Fenster angezeigt und alle Funktionen sind auf der Registerkarte verfügbar. DieNGCGUI_OPTIONS
gelten für alle NGCGUI-Registerkarten mit der Ausnahme, dass die Optionennonew
,noremove
undnoiframe
nicht für durch den Anwender gestaltete (engl. custom) Registerkarten gelten. Verwenden Sie keine "Custom"-Registerkarten, wenn Sie die Möglichkeit des Benutzers einschränken wollen, Unterdateien auszuwählen oder zusätzliche Registerkarten zu erstellen. - [DISPLAY]GCMC_INCLUDE_PATH = dirname1:dirname2:…
-
Example:
[DISPLAY]GCMC_INCLUDE_PATH = /home/myname/gcmc_includes:/home/myname/gcmc_includes2
Note: Optional, each directory will be included when gcmc is invoked using the option:--include dirname
.
FIXME Keyboard shortcuts do not work in version _fr.
6. Dateianforderungen für NGCGUI-Kompatibilität
6.1. Anforderungen an eine G-code-Unterroutine (.ngc) in einer Datei
Eine NGCGUI-kompatible Unterdatei enthält eine einzelne Unterprogrammdefinition. Der Name der Subroutine muss derselbe sein wie der Dateiname (ohne das Suffix .ngc). LinuxCNC unterstützt benannte oder nummerierte Subroutinen, aber nur benannte Subroutinen sind mit NGCGUI kompatibel. Für weitere Informationen siehe das Kapitel O-Codes.
Die erste unkommentierte Zeile sollte eine sub
-Anweisung sein.
Die letzte unkommentierte Zeile sollte eine endsub
-Anweisung sein.
(info: info_text_zu_erscheinen_oben_auf_der_Tabellenseite)
; Kommentarzeile beginnend mit Semikolon
( Kommentarzeile mit Klammern)
o<examp> sub
KÖRPER_DER_UNTERROUTINE
o<examp> endsub
; Kommentarzeile beginnend mit Semikolon
( Kommentarzeile mit Klammern)
Der Hauptteil (Körper, engl. body) des Unterprogramms sollte mit einer Reihe von Anweisungen beginnen, die lokale benannte Parameter für jeden für den Unterprogrammaufruf erwarteten Positionsparameter definieren. Diese Definitionen müssen fortlaufend sein, beginnend mit #1 und endend mit der zuletzt verwendeten Parameternummer. Für jeden dieser Parameter müssen Definitionen angegeben werden (keine Auslassungen).
#<xparm> = #1
#<yparm> = #2
#<zparm> = #3
LinuxCNC betrachtet alle nummerierten Parameter im Bereich #1 bis #30 als Aufrufparameter, so dass NGCGUI Eingabefelder für jedes Auftreten von Parametern in diesem Bereich zur Verfügung stellt. Es ist eine gute Praxis, um die Verwendung von nummerierten Parametern #1 bis #30 überall sonst in der Subroutine zu vermeiden. Die Verwendung lokaler, benannter Parameter wird für alle internen Variablen empfohlen.
Jede definierende Anweisung kann optional einen speziellen Kommentar und einen Standardwert für den Parameter enthalten.
#<vname> = #n (=Standard_Wert)
oder
#<vname> = #n (kommentar_text)
oder
#<vname> = #n (=Standardwert_Kommentar_text)
#<xparm> = #1 (=0.0)
#<yparm> = #2 (Ystart)
#<zparm> = #3 (=0.0 Z Start Einstellung)
Wenn ein default_value angegeben ist, wird dieser beim Start in das Eingabefeld für den Parameter eingetragen. Wenn comment_text angegeben ist, wird dieser anstelle des Parameternamens zur Identifizierung der Eingabe verwendet.
Hinweise zu globalen benannten Parametern und NGCGUI:
(globale benannte Parameter haben einen führenden Unterstrich im Namen, wie #<_irgendeinglobalername>)
Wie in vielen Programmiersprachen ist die Verwendung von globalen Parametern mächtig, kann aber oft zu unerwarteten Konsequenzen führen. In LinuxCNC werden bestehende globale benannte Parameter bei der Ausführung von Unterprogrammen gültig sein und Unterprogramme können globale benannte Parameter ändern oder erstellen.
Von der Übergabe von Informationen an Unterprogramme unter Verwendung globaler benannter Parameter wird abgeraten, da eine solche Verwendung die Einrichtung und Pflege eines genau definierten globalen Kontexts erfordert, der schwer zu pflegen ist. Die Verwendung der nummerierten Parameter Nr. 1 bis Nr. 30 als Unterprogramm-Eingaben sollte ausreichen, um eine breite Palette von Design-Anforderungen zu erfüllen.
FIXME are input global named parameters supported or not ?
NGCGUI unterstützt einige globale benannte Eingabeparameter, aber deren Verwendung ist veraltet und hier nicht dokumentiert.
Während von global benannten Eingabeparametern abgeraten wird, müssen LinuxCNC-Subroutinen global benannte Parameter für die Rückgabe von Ergebnissen verwenden. NGCGUI-kompatible Unterdateien sind auf die Verwendung in der Benutzeroberfläche ausgerichtet. Daher sind Rückgabewerte keine übliche Anforderung. Allerdings ist NGCGUI als Testwerkzeug für Subroutinen nützlich, die global benannte Parameter zurückgeben, und es ist üblich, dass NGCGUI-kompatible Subdateien Utility-Subroutinen aufrufen, die Ergebnisse mit global benannten Parametern zurückgeben.
Um diese Verwendungen zu unterstützen, ignoriert NGCGUI globale benannte Parameter, die einen Doppelpunkt (:) in ihrem Namen enthalten. Die Verwendung des Doppelpunkts (:) im Namen verhindert, dass NGCGUI Eingabefelder für diese Parameter erstellt.
o<examp> sub
...
#<_examp:result> = #5410 (liefert den aktuellen Werkzeugdurchmesser)
...
o<helper> call [#<x1>] [#<x2>] (Aufruf einer Subroutine)
#<xresult> = #<_helper:answer> (lokalisiert sofort das globale Ergebnis des Helfers)
#<_helper:answer> = 0.0 (löscht den globalen benannten Parameter, der von der Subroutine verwendet wird)
...
o<examp> endsub
Im obigen Beispiel befindet sich das Unterprogramm in einer separaten Datei namens helper.ngc. Die helper-Routine liefert ein Ergebnis in einem globalen benannten Parameter namens #<_helper:answer.
Aus Gründen der guten Praxis lokalisiert die aufrufende Teildatei das Ergebnis sofort für die Verwendung an anderer Stelle in der Teildatei. Es wird der globale benannte Parameter genullt, der für die Rückgabe des Ergebnisses verwendet wird, um seine unbeabsichtigte Verwendung an anderer Stelle im globalen Kontext zu verhindern. (Ein Nullifizierungswert von 0,0 ist nicht immer eine gute Wahl).
NGCGUI unterstützt die Erstellung und Verkettung von mehreren Features für ein Subfile und für mehrere Subfiles. Es ist manchmal nützlich, die Reihenfolge der Unterdateien zur Laufzeit zu bestimmen, daher fügt NGCGUI einen speziellen globalen Parameter ein, der in Unterprogrammen getestet werden kann. Der Parameter heißt #<_feature:>. Sein Wert beginnt mit dem Wert 0 und wird für jedes hinzugefügte Feature inkrementiert.
Ein spezieller info-Kommentar kann überall in einer NGCGUI-kompatiblen Unterdatei eingefügt werden. Das Format ist:
(info: info_text)
Der info_text wird im oberen Bereich der Registerkarte NGCGUI in AXIS angezeigt.
Dateien, die nicht für die Verwendung als Unterdateien vorgesehen sind, können einen speziellen Kommentar enthalten, so dass NGCGUI sie automatisch mit einer entsprechenden Meldung zurückweist.
(not_a_subfile)
Eine optionale Bilddatei (.png,.gif,.jpg,.pgm) kann eine Unterdatei begleiten. Die Bilddatei kann zur Verdeutlichung der von der Teildatei verwendeten Parameter beitragen. Die Bilddatei sollte sich im gleichen Verzeichnis wie die Unterdatei befinden und den gleichen Namen mit einem entsprechenden Bildsuffix haben, z.B. könnte die Unterdatei example.ngc von einer Bilddatei examp.png begleitet werden. NGCGUI versucht, große Bilder durch Subsampling auf eine Größe mit einer maximalen Breite von 320 und einer maximalen Höhe von 240 Pixeln zu verkleinern.
Keine der Konventionen, die für die Herstellung einer NGCGUI-kompatiblen Subdatei erforderlich sind, schließen ihre Verwendung als allgemeine Subroutinendatei für LinuxCNC aus.
Die LinuxCNC-Distribution enthält eine Bibliothek (ngcgui_lib Verzeichnis), die sowohl Beispiel NGCGUI-kompatiblen Subdateien und Utility-Dateien, um die Funktionen von LinuxCNC Subroutinen und NGCGUI Verwendung zu veranschaulichen enthält. Eine weitere Bibliothek (gcmc_lib) bietet Beispiele für Unterprogrammdateien für den G-Code-Meta-Compiler (gcmc).
Weitere benutzerdefinierte Subroutinen finden Sie im Forum im Abschnitt zu Subroutinen.
6.2. Gcode-Meta-Compiler-Dateianforderungen (.gcmc)
Dateien für den Gcode-Meta-Compiler (gcmc) werden von NGCGUI gelesen und es werden Eingabefelder für die in der Datei markierten Variablen erstellt. Wenn ein Feature für die Datei fertiggestellt ist, übergibt NGCGUI die Datei als Eingabe an den gcmc-Compiler und, wenn die Kompilierung erfolgreich ist, wird die resultierende G-Code-Datei an LinuxCNC zur Ausführung gesendet. Die resultierende Datei wird als Single-File-Subroutine formatiert; .gcmc-Dateien und .ngc-Dateien können von NGCGUI gemischt werden.
Die Variablen, die für die Aufnahme in NGCGUI identifiziert wurden, werden mit Zeilen markiert, die dem gcmc-Compiler als Kommentare erscheinen.
//ngcgui: varname1 =
//ngcgui: varname2 = value2
//ngcgui: varname3 = value3, label3;
//ngcgui: zsafe =
//ngcgui: feedrate = 10
//ngcgui: xl = 0, x limit
In diesen Beispielen hat das Eingabefeld für varname1 keinen Standardwert, das Eingabefeld für varname2 hat den Standardwert 2 und das Eingabefeld für varname 3 hat den Standardwert 3 und die Bezeichnung label3 (statt varname3). Die Standardwerte müssen Zahlen sein.
Um die Änderung gültiger Zeilen in einer gcmc-Datei zu erleichtern, werden alternative Tag-Zeilenformate akzeptiert. Die alternativen Formate ignorieren abschließende Semikolons (;) und abschließende Kommentarzeichen (//). Mit dieser Bestimmung ist es oft möglich, einfach das //ngcgui: Tag zu bestehenden Zeilen in einer .gcmc-Datei hinzuzufügen.
//ngcgui: varname2 = value2;
//ngcgui: varname3 = value3; //, label3;
//ngcgui: feedrate = 10;
//ngcgui: xl = 0; //, x limit
Eine Info-Zeile, die oben auf einer Registerkarte erscheint, kann optional mit einer Zeile mit der Kennzeichnung als:
//ngcgui: info: text_to_appear_at_top_of_tab_page
Falls erforderlich, können Optionen mit einem Zeilen-Tag an den gcmc-Compiler übergeben werden:
//ngcgui: -option_name [ [=] option_value]
//ngcgui: -I
//ngcgui: --imperial
//ngcgui: --precision 5
//ngcgui: --precision=6
Die Optionen für gcmc sind mit dem Terminalbefehl verfügbar:
gcmc --help
Ein gcmc-Programm verwendet standardmäßig den metrischen Modus. Mit der Option setting kann der Modus auf Zoll eingestellt werden:
//ngcgui: --imperial
Eine eventuell verwendete Präambel-Datei kann einen Modus (g20 oder g21) festlegen, der mit dem von einer gcmc-Datei verwendeten Modus kollidiert. Um sicherzustellen, dass der gcmc-Programmmodus in Kraft ist, fügen Sie die folgende Anweisung in die .gcmc-Datei ein:
include("ensure_mode.gcmc")
und geben Sie den richtigen Pfad für gcmc include_files in der INI-Datei an, zum Beispiel:
[DISPLAY] GCMC_INCLUDE_PATH = ../../nc_files/gcmc_lib
7. DB25 Beispiel
Im Folgenden wird eine DB25 Unterroutine gezeigt. Auf dem ersten Foto sehen Sie, wo Sie die Lücken für jede Variable ausfüllen.
Dieses Foto zeigt den Backplot der DB25-Subroutine.
Dieses Foto zeigt die Verwendung der neuen Schaltfläche und der benutzerdefinierten Registerkarte zur Erstellung von drei DB25-Ausschnitten in einem Programm.
8. Erstellen eines Unterprogramms
-
Um ein Unterprogramm für die Verwendung mit NGCGUI zu erstellen, müssen der Dateiname und der Name des Unterprogramms identisch sein.
-
Die Datei muss sich in dem Unterverzeichnis befinden, auf das in der INI-Datei verwiesen wird.
-
In der ersten Zeile kann ein Kommentar des Typs
info:
stehen -
Das Unterprogramm muss von den Tags
sub
undendsub
umgeben sein. -
Die verwendeten Variablen müssen nummerierte Variablen sein und dürfen keine Nummer überspringen.
-
Kommentare und Voreinstellungen können enthalten sein.
(info: simp -- simple exemple de sous-programme -- Ctrl-U pour éditer)
o<simp> sub
#<ra> = #1 (=.6 Rayon A) ;Beispiel für einen Parameter mit einem Kommentar
#<radius_b> = #2 (=0.4) ;Beispiel für einen Parameter ohne Kommentar
#<feedrate> = #3 (Feedrate) ;Beispiel für einen Parameter ohne Voreinstellung
g0x0y0z1
g3 i#<ra> f#<feedrate>
g3 i[0-#<Radius_b>]
o<simp> endsub
vim: set syntax=asciidoc: