Dieses Dokument strebt an, eine Referenz für die besten Praktiken zur allgemeinen Entwicklung von Bildschirmoberflächen zusammenzustellen und zu repräsentieren. Während es möglich ist, so ziemlich alles vielerlei etablierten Frame Works zu programmieren und mit LinuxCNC zum Laufen zu bringen, unterstützt die Einhaltung bestimmter Programmiersprachen und Konfigurations-Einstellungen dabei, den Übergang zwischen Bildschirmmasken und Entwicklern für den Support zu vereinfachen.
Das vorweg, doch ist nichts in diesem Dokument in Stein gemeißelt.

1. Sprache

Python ist derzeit die bevorzugte Sprache für Bildschirm-Masken von LinuxCNC.
Python verfügt über eine niedrige Eingangsleiste für neue Benutzer, um die Bildschirme zu ändern, um sie anzupassen.
Python verfügt über eine reiche Auswahl an Dokumentationen, Tutorials und Bibliotheken. + Es wird bereits verwendet und in die Systemanforderungen von LinuxCNC integriert.
Während C oder C++ verwendet werden konnte, grenzt es zu sehr ein, wer damit pflegen und entwickeln könnte.
Es wäre besser, Python mit C/C++-Modulen für jede Funktion zu erweitern, die es erfordert.

2. Localization of float numbers in GUIs

Different locales use different decimal separators and thousands separators. Locale-specific string-to-float functions should be avoided as they may give unexpected results. (For example the text string "1.58" in de_DE will be converted to 158 by atof()). The following guidelines (based on avoiding ambiguity rather than on "correctness" in any specific locale) are suggested if parsing float to string and vice-versa:

  • In the case of input allow either comma (,) or point(.) as a decimal separator, but reject any input that has more than one of either. Space should be accepted but not required as a thousands separator.

  • In the case of display either use point (.) consistently or use the current localisation format consistently. The emphasis here being on "consistently".

3. Grundeinstellungen

Derzeit verwenden die meisten Bildschirme eine Kombination aus INI-Dateien und Einträgen in den Einstellungsdateien, um ihre Funktionen zu konfigurieren.
INI-Textdateien werden in der Regel für die allgemeinen Maschineneinstellungsparameter verwendet, während textbasierte Einstellungsdateien für GUI-bezogene Eigenschaften (wie Töne, Größe, Farben) zuständig sind.
Es können auch andere Dateien für Übersetzungen, Stilgebung und Funktionsanpassungen verwendet werden. Diese sind stark vom zugrunde liegenden Widget-Toolkit abhängig.

3.1. INI [DISPLAY]

Der Abschnitt [DISPLAY] der INI dient der Angabe von Bildschirmeinstellungen.

3.1.1. Anzeige (engl. display)

Am wichtigsten ist die Angabe des Namens des Bildschirms, mit dem das linuxcnc-Skript geladen wird.
Das Bildschirmprogramm (engl. screen program) erkennt in der Regel Schalter wie zum Setzen von Vollbildschirm.
"title" ist für den Fenster-Titel und "icon" wird für die Symbolisierung des Fensters verwendet.

[DISPLAY]
DISPLAY = axis
TITLE = XYZA rotierende Achse
ICON = silver_dragon.png

3.1.2. Zykluszeit

Wenn einstellbar, so wird die Zykluszeit der Anzeige GUI eingestellt.
Dies ist oft die Updaterate eher als die sleep time (Dauer des Prozessor-Ruhe) zwischen Updates.
Ein Wert von 100 ms (0,1 s) ist eine übliche Einstellung, obwohl ein Bereich von 50 - 200 ms nicht aus dem Rahmen fiele.

[DISPLAY]
CYCLE_TIME = 100

3.1.3. Dateipfad

Wenn diese Funktionen im Bildschirm verfügbar sind, wird hier beschrieben, wie der zu verwendende Pfad angegeben wird.
Dabei sollte entweder von der aktuellen INI-Datei aus referenziert werden, oder das Zeichen „~“ (Tilde) für das Home-Verzeichnis bzw. absolute Pfade erlaubt sein.

MDI_HISTORY_FILE = mdi_history.txt
PREFERENCE_FILE_PATH = gui.pref
LOG_FILE = gui-log.txt

3.1.4. Jogging-Inkremente

Radiobuttons oder eine Kombibox werden in der Regel zur Inkrementauswahl verwendet.
Die linearen Inkremente können eine Mischung aus Zoll oder Millimetern sein.
Winkel werden in Grad angegeben.
Das Wort "kontinuierlich" wird verwendet, um ein kontinuierliches Joggen anzugeben und sollte wahrscheinlich hinzugefügt werden, auch wenn es aus der INI-Linie nicht angegeben wird.

INCREMENTS = continuous, 10 mm, 1.0 mm, 0.10 mm, 0.01 mm, 1.0 inch, 0.1 inch, 0.01 inch
ANGULAR_INCREMENTS = continuous, .5, 1, 45, 90, 360

3.1.5. Maschinen-Typ Hinweis (engl. hint)

Der Bildschirm muss häufig an den Maschinentyp angepasst werden. Drehmaschinen haben andere Steuerungen und zeigen die DROs anders an. Schaumstoffmaschinen stellen den Plot unterschiedlich dar.
Die alte Methode bestand darin, Schalter wie LATHE = 1, FOAM = 1 usw. hinzuzufügen.

MACHINE_TYPE_HINT = LATHE

3.1.6. Neufestlegungen (engl. overrides)

Override (Übersteuerung) ermöglicht es dem Benutzer, Vorschub oder Spindeldrehzahl während des Betriebs anzupassen. In der Regel wird dafür ein Schieberegler oder Drehknopf verwendet.
Diese Einstellungen werden in Prozent angegeben.

MAX_FEED_OVERRIDE       = 120
MIN_SPINDLE_0_OVERRIDE    = 50
MAX_SPINDLE_0_OVERRIDE    = 120

3.1.7. Jogging-Rate

Die meisten Bildschirme verfügen über Schieberegler, um die lineare und die winkelbezogene Manuelles Verfahren (Jog)-Geschwindigkeit einzustellen.
Diese Einstellungen sollten in Maschineneinheiten pro Minute für lineare Bewegungen und in Grad pro Minute für Winkelbewegungen angegeben werden.
„Voreinstellung“ bezeichnet die Anfangsgeschwindigkeit, wenn der Bildschirm erstmals geladen wird.

DEFAULT_LINEAR_VELOCITY =
MIN_LINEAR_VELOCITY =
MAX_LINEAR_VELOCITY =

DEFAULT_ANGULAR_VELOCITY =
MIN_ANGULAR_VELOCITY =
MAX_ANGULAR_VELOCITY =

3.1.8. Spindel Handsteuerung

Manuelle Steuerung (Manual controls) für die Spindelsteuerung können aus (einer Kombination von) Tasten, Schiebereglern oder Drehknöpfen bestehen.
Sie können durch das Setzen dieser Einträge Grenzen festlegen, die unterhalb dessen liegen, was der Maschinencontroller nutzen kann.
Wenn Ihr Bildschirm mehrere Spindeln steuern kann, sollten auch Werte akzeptiert werden, die über dem angezeigten 0 liegen.

SPINDLE_INCREMENT = 100
DEFAULT_SPINDLE_0_SPEED = 500
MIN_SPINDLE_0_SPEED = 50
MAX_SPINDLE_0_SPEED = 1000

3.2. INI [MDI_COMMAND]

Einige Bildschirme verwenden Tasten, um Makro NGC-Befehle auszuführen.
Sie können wie in diesen kompakten Beispielen angegeben werden.
NGC-Befehle, die durch Doppelpunkte getrennt sind, werden vollständig ausgeführt, bevor der nächste startet.
Ein optionales Komma trennt den Text der Taste vom NGC-Code.

[MDI_COMMAND_LIST]
MDI_COMMAND_MACRO0 = G0 Z25;X0 Y0;Z0, Goto\nUser\nZero
MDI_COMMAND_MACRO1 = G53 G0 Z0;G53 G0 X0 Y0,Goto\nMachn\nZero

3.3. INI [FILTER]

In diesem Abschnitt können Sie festlegen, welche Dateien im Dateiauswahlfenster angezeigt werden und welche Filterprogramme deren Ausgabe vor der Übergabe an LinuxCNC vorverarbeiten.
Die Dateiendungen folgen diesem Muster:
PROGRAM_EXTENSION = .endung,.endung2[Leerzeichen]Beschreibung der Endungen (engl. extension)
Die Definitionen der Filterprogramme lauten wie folgt:
filter endung = auszuführendes Programm

[FILTER]
# Controls what programs are shown in the file manager
PROGRAM_EXTENSION = .ngc,.nc,.tap G-Code File (*.ngc,*.nc,*.tap)
PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image
PROGRAM_EXTENSION = .py Python Script

# Zuordnung spezieller 'filter'-Programme basierend auf der Dateierweiterung
png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
py = python3

3.4. INI [HAL]

Die meisten Bildschirme werden HAL Pins benötigen. Diese müssen verbunden werden nachdem der Bildschirm diese angelegt hat.

3.4.1. Postgui Hal-Datei

Diese Dateien sollten eine nach der anderen in dieser Reihenfolge ausgeführt werden, nachdem alle GUI HAL Pins angelegt wurden.

[HAL]
POSTGUI_HALFILE = keypad_postgui.hal
POSTGUI_HALFILE = vfd_postgui.hal

3.4.2. Postgui Halcmd

Diese Dateien sollte nacheinander unter Bewahrung der Reienfolge ausgeführt werden, nachdem alle POSTGUI Dateien ausgeführt wurden.

[HAL]
POSTGUI_HALCMD = show pin qt
POSTGUI_HALCMD = loadusr halmeter

4. Erweiterte Konfiguration

4.1. GUI Elemente einbetten

Es ist eine gängige und sehr nützliche Anpassung, dass Benutzer kleine Panels unabhängig erstellen können, die in den Hauptbildschirm eingebettet werden können. Manche Bildschirme erlauben die Einbettung von Fremdprogrammen von Drittanbietern, andere nur Panels, die auf dem nativen Widget-Toolkit basieren.
Üblicherweise werden diese in Registerkarten oder seitlichen Panel-Widgets eingebettet.
So beschreiben Sie den optionalen Titel, den Ladebefehl und den Namen des Positions-Widgets:

EMBED_TAB_NAME=Vismach demo
EMBED_TAB_COMMAND=qtvcp vismach_mill_xyz
EMBED_TAB_LOCATION=tabWidget_utilities

4.2. Dialoge für Benutzermeldungen

Benutzerdialogs werden verwendet, um wichtige Informationen (in der Regel Fehler) anzuzeigen, die der Benutzer als relevant einstuft.
Einige bleiben sichtbar, bis das Problem behoben ist, andere erfordern eine Bestätigung, wieder andere eine Ja-/Nein-Auswahl.
Ein HAL-I/O-Pin kann den Dialog aufrufen; der Dialog setzt den I/O-Pin zurück und legt ggf. Ausgangspins für die Antwort fest.

[DISPLAY]
MESSAGE_BOLDTEXT = Dies ist eine rein informative Nachricht
MESSAGE_TEXT = Dies ist von geringer Priorität
MESSAGE_DETAILS = Drücke OK zum Löschen
MESSAGE_TYPE = okdialog status
MESSAGE_PINNAME = bothtest
MESSAGE_ICON = INFO

Dieser Stil liefert mehrere Nachrichten, die durch eine Nummer definiert sind.
Dieses Beispiel zeigt 3 mögliche Nachrichten, die sich auf eine VFD-Fehlernummer beziehen.

[DISPLAY]
MULTIMESSAGE_ID = VFD

MULTIMESSAGE_VFD_NUMBER = 1
MULTIMESSAGE_VFD_TYPE = okdialog status
MULTIMESSAGE_VFD_TITLE = VFD Fehler: 1
MULTIMESSAGE_VFD_TEXT = Die ist der längere Text FÜR MESSAGE NUMMER 1
MULTIMESSAGE_VFD_DETAILS = DETAILS für VFD Fehler 1
MULTIMESSAGE_VFD_ICON = WARNING

MULTIMESSAGE_VFD_NUMBER = 2
MULTIMESSAGE_VFD_TYPE = nonedialog status
MULTIMESSAGE_VFD_TITLE = VFD Fehler: 2
MULTIMESSAGE_VFD_TEXT = Die sist der längere Text FÜR MESSAGE NUMMER 2
MULTIMESSAGE_VFD_DETAILS = DETAILS für VFD Fehler 2
MULTIMESSAGE_VFD_ICON = INFO

MULTIMESSAGE_VFD_NUMBER = 3
MULTIMESSAGE_VFD_TYPE = status
MULTIMESSAGE_VFD_TITLE = VFD Fehler: 3
MULTIMESSAGE_VFD_TEXT = Dies ist der längere Text FÜR Error MESSAGE NUMMER 3.
MULTIMESSAGE_VFD_DETAILS = Bei Erscheinen dieser Nachricht besteht Handlungsbedarf.
MULTIMESSAGE_VFD_ICON = WARNING