images/ngcgui.png
Abbildung 1. NGCGUI eingebettet in AXIS

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 is an alternate, Python implementation of 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.

  • Any gcmc (G-code-meta-compiler) program that conforms to NGCGUI conventions for tagging variables can be used. (The gcmc executable must be installed separately, see: 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) images/tool_estop.png und dann auf "Machine Power" images/tool_power.png 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" images/tool_run.png , 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
Usage:
pyngcgui [Options] [<sub_filename>]
Options requiring values:
    [-d | --demo] [0|1|2] (0: DEMO standalone toplevel)
                          (1: DEMO embed new notebook)
                          (2: DEMO embed within existing notebook)
    [-S | --subfile       <sub file name>]
    [-p | --preamble      <preamble file name>]
    [-P | --postamble     <postamble file name>]
    [-i | --ini           <INI file name>]
    [-a | --autofile      <auto file name>]
    [-t | --test          <testno>]
    [-K | --keyboardfile  <glade_file>] (use custom popupkeyboard glade file)
Solo Options:
    [-v | --verbose]
    [-D | --debug]
    [-N | --nom2]         (no m2 terminator (use %))
    [-n | --noauto]       (save but do not automatically send result)
    [-k | --keyboard]     (use default popupkeybaord)
    [-s | --sendtoaxis]   (send generated NGC file to AXIS GUI)
Notes:
      A set of files is comprised of a preamble, subfile, postamble.
      The preamble and postamble are optional.
      One set of files can be specified from cmdline.
      Multiple sets of files can be specified from an INI file.
      If --ini is NOT specified:
         search for a running LinuxCNC and use its INI file.
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_ Items
  • 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.

Beispiel einer AXIS-GUI-basierten INI
[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:

Item:    [DISPLAY]TKPKG = Ngcgui_ttt version_number
Example: [DISPLAY]TKPKG = Ngcgui_ttt 1.0
Note:    Mandatory, specifies loading of ngcgui_ttt in an AXIS tab page named ttt.
         Must follow the TKPKG = Ngcgui item.

Item:    [DISPLAY]TTT = path_to_truetype-tracer
Example: [DISPLAY]TTT = truetype-tracer
Note:    Optional, if not specified, attempt to use /usr/local/bin/truetype-tracer.
         Specify with absolute pathname or as a simple executable name,
         in which case the user PATH environment will used to find the program.

Item:    [DISPLAY]TTT_PREAMBLE = preamble_filename
Example: [DISPLAY]TTT_PREAMBLE = in_std.ngc
Note:    Optional, specifies filename for preamble used for ttt created subfiles.

5.5. INI File Path Specifications

NGCGUI uses the LinuxCNC search path to find files. The search path begins with the standard directory specified by:

[DISPLAY]PROGRAM_PREFIX = verzeichnis_name

gefolgt von mehreren Verzeichnissen, angegeben durch:

[RS274NGC]SUBROUTINE_PATH = Verzeichnis1_Name:Verzeichnis1_Name:Verzeichnis3_Name ...
Verzeichnisse

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

Absolute Pfade

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

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.

Beispiel für mehrere Verzeichnisse:
[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.

Beispiel für das Hinzufügen eines Benutzerverzeichnisses:
[RS274NGC]SUBROUTINE_PATH = /home/myname/linuxcnc/mysubs:../../nc_files/ngcgui_lib:../../nc_files/ngcgui_lib/utilitysubs

New users may inadvertently try to use files that are not structured to be compatible with NGCGUI requirements. NGCGUI will likely report numerous errors if the files are not coded per its conventions. Good practice suggests that NGCGUI-compatible subfiles should be placed in a directory dedicated to that,purpose and that preamble, postamble, and helper files should be in separate directory(ies) to discourage attempts to use them as subfiles. Files not intended for use as subfiles can include a special comment: "(not_a_subfile)" so that NGCGUI will reject them automatically with a relevant message.

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.

By default, if an image (.png,.gif,jpg,pgm) file is found in the same directory as the subfile, the image is displayed in the iframe. Specifying the noiframe option makes available additional buttons for selecting a preamble, subfile, and postamble and additional checkboxes. Selections of the checkboxes are always available with special keys:
Ctrl-R Toggle "Retain values on Subfile read",
Ctrl-E Toggle "Expand subroutine",
Ctrl-a Toggle "Autosend",
Ctrl-k lists all keys and functions.

If noiframe is specified and an image file is found, the image is displayed in a separate window and all functions are available on the tab page. The NGCGUI_OPTIONS apply to all NGCGUI tabs except that the nonew, noremove, and noiframe options are not applicable for "Custom" tabs. Do not use "Custom" tabs if you want to limit the user’s ability to select subfiles or create additional tab pages.

[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

An NGCGUI-compatible subfile contains a single subroutine definition. The name of the subroutine must be the same as the filename (not including the .ngc suffix). LinuxCNC supports named or numbered subroutines, but only named subroutines are compatible with NGCGUI. For more information see the O-Codes chapter.

Die erste unkommentierte Zeile sollte eine sub-Anweisung sein.
Die letzte unkommentierte Zeile sollte eine endsub-Anweisung sein.

examp.ngc:
(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)

The body of the subroutine should begin with a set of statements that define local named parameters for each positional parameter expected for the subroutine call. These definitions must be consecutive beginning with #1 and ending with the last used parameter number. Definitions must be provided for each of these parameters (no omissions).

Nummerierung der Parameter
#<xparm> = #1
#<yparm> = #2
#<zparm> = #3

LinuxCNC considers all numbered parameters in the range #1 thru #30 to be calling parameters, so NGCGUI provides entry boxes for any occurrence of parameters in this range. It is good practice to avoid use of numbered parameters #1 through #30 anywhere else in the subroutine. Using local, named parameters is recommended for all internal variables.

Jede definierende Anweisung kann optional einen speziellen Kommentar und einen Standardwert für den Parameter enthalten.

Ausdruck/Anweisung (engl. statement) Prototyp
#<vname> = #n (=Standard_Wert)
oder
#<vname> = #n (kommentar_text)
oder
#<vname> = #n (=Standardwert_Kommentar_text)
Beispiele für Parameter
#<xparm> = #1 (=0.0)
#<yparm> = #2 (Ystart)
#<zparm> = #3 (=0.0 Z Start Einstellung)

If a default_value is provided, it will be entered in the entry box for the parameter on startup. If comment_text is included, it will be used to identify the input instead of the parameter name.

Globale benannte Parameter

Hinweise zu globalen benannten Parametern und NGCGUI:

(globale benannte Parameter haben einen führenden Unterstrich im Namen, wie #<_irgendeinglobalername>)

As in many programming languages, use of globals is powerful but can often lead to unexpected consequences. In LinuxCNC, existing global named parameters will be valid at subroutine execution and subroutines can modify or create global named parameters.

Passing information to subroutines using global named parameters is discouraged since such usage requires the establishment and maintenance of a well-defined global context that is difficult to maintain. Using numbered parameters #1 thru #30 as subroutine inputs should be sufficient to satisfy a wide range of design requirements.

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.

While input global named parameters are discouraged, LinuxCNC subroutines must use global named parameters for returning results. Since NGCGUI-compatible subfiles are aimed at GUI usage, return values are not a common requirement. However, NGCGUI is useful as a testing tool for subroutines which do return global named parameters and it is common for NGCGUI-compatible subfiles to call utility subroutine files that return results with global named parameters.

To support these usages, NGCGUI ignores global named parameters that include a colon (:) character in their name. Use of the colon (:) in the name prevents NGCGUI from making entryboxes for these parameters.

Beispiel für globale benannte Parameter
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

In the above example, the utility subroutine will be found in a separate file named helper.ngc. The helper routine returns a result in a global named parameter named #<_helper:answer.

For good practice, the calling subfile immediately localizes the result for use elsewhere in the subfile and the global named parameter used for returning the result is nullified in an attempt to mitigate its inadvertent use elsewhere in the global context. A nullification value of 0.0 may not always be a good choice.

NGCGUI supports the creation and concatenation of multiple features for a subfile and for multiple subfiles. It is sometimes useful for subfiles to determine their order at runtime, so NGCGUI inserts a special global parameter that can be tested within subroutines. The parameter is named #<_feature:>. Its value begins with a value of 0 and is incremented for each added feature.

Zusatzfunktionen

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)

An optional image file (.png,.gif,.jpg,.pgm) can accompany a subfile. The image file can help clarify the parameters used by the subfile. The image file should be in the same directory as the subfile and have the same name with an appropriate image suffix, e.g. the subfile example.ngc could be accompanied by an image file examp.png. NGCGUI attempts to resize large images by subsampling to a size with maximum width of 320 and maximum height of 240 pixels.

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.

The LinuxCNC distribution includes a library (ngcgui_lib directory) that includes both example NGCGUI-compatible subfiles and utility files to illustrate the features of LinuxCNC subroutines and NGCGUI usage. Another library (gcmc_lib) provides examples for subroutine files for the 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.

Formate für variable Tags
//ngcgui: varname1 =
//ngcgui: varname2 = value2
//ngcgui: varname3 = value3, label3;
Beispiele für Variablen-Tags
//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.

To make it easier to modify valid lines in a gcmc file, alternate tag line formats accepted. The alternate formats ignore trailing semicolons (;) and trailing comment markers (//). With this provision, it is often makes it possible to just add the //ngcgui: tag to existing lines in a .gcmc file.

Alternative Variablen-Tag-Formate
//ngcgui: varname2 = value2;
//ngcgui: varname3 = value3; //, label3;
Beispiele für alternative Variablen-Tags
//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:

Info-Tag
//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:

Option line tag format
//ngcgui: -option_name [ [=] option_value]
Beispiele für Options-Zeilen-Tags
//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

The following shows the DB25 subroutine. In the first photo you see where you fill in the blanks for each variable.

images/ngcgui-db25-1.png

Dieses Foto zeigt den Backplot der DB25-Subroutine.

images/ngcgui-db25-2.png

Dieses Foto zeigt die Verwendung der neuen Schaltfläche und der benutzerdefinierten Registerkarte zur Erstellung von drei DB25-Ausschnitten in einem Programm.

images/ngcgui-db25-3.png

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 und endsub umgeben sein.

  • Die verwendeten Variablen müssen nummerierte Variablen sein und dürfen keine Nummer überspringen.

  • Kommentare und Voreinstellungen können enthalten sein.

Unterprogramm-Skelett Beispiel
(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: