Kombination von G-Code und ST

Ein GST-Programm

<g-code>
<g-code>
! <st-code>
<g-code>
<g-code>
{
<st-code>
<st-code>
! <g-code>
<st-code>
<st-code>
}
<g-code>
<g-code>

Eine GST-Datei besteht aus Sequenzen von G-Code und Sequenzen von ST-Code, die wie oben gezeigt verschachtelt werden können. Jedes Programm startet im Modus G-code. Der Modus kann mit einem Ausrufezeichen ('!') für eine Zeile auf ST umgeschaltet werden. Der ST-Modus endet automatisch am Ende der Zeile.

Alternativ kann ein Satz von ST-Code mit geschweiften Klammern ('{'...'}') definiert werden. Diese Notation ist praktischer, um eine lange Sequenz von ST-Code in einem GST-Programm zu definieren. Innerhalb des ST-Satzes kann der G-Codemodus für eine Zeile mit dem Ausrufezeichen aktiviert werden. Dabei endet der G-Codemodus automatisch am Ende der Zeile.

G-Code Satz

<address><value> <address>=<G-Expression> <address>{<ST-Expression>}

Eine Zeile von G-Code wird als Satz bezeichnet. Sie besteht aus einer Folge von Wörtern. Ein Wort ist eine Kombination aus einer Adresse (z.B. G oder X) und einem Wert. Ein Wert kann durch ein Literal (z. B. 2.54), durch einen G-Ausdruck (z. B. 2*foo+1) oder durch einen ST-Ausdruck (z. B. sin(foo**2)-1) definiert werden.

G-Code Ausdruck

<address>=a+b-c*d/e

Das Ergebnis des Ausdrucks wird als Wert des Wortes verwendet. Die vier Grundrechenarten ('+', '-', '*', '/') können in einem G-Ausdruck verwendet werden. Sie werden wie erwartet ausgewertet, d.h. alle Operationen sind links-assoziativ und '*', '/' haben einen höheren Vorrang als '+', '-'. Variablen, die in ST deklariert wurden, können auch in einem G-Ausdruck (in Bezug auf ihren Geltungsbereich) verwendet werden.

Alle Berechnungen werden mit dem Typ LReal (64-Bit-Fließkomma gemäß IEEE 754) durchgeführt. Der Wert einer ST-Variablen wird gemäß den Konvertierungsregeln von ST implizit in den Typ LReal konvertiert. Wenn ein Typ (z.B. STRING) nicht konvertiert werden kann, wird ein Fehler ausgegeben.

Kombination von G-Code und ST 1:

EINSCHRÄNKUNG:

ST-Variablen, die eine Zahl in ihrem Namen enthalten (z. B. x0), können nicht in einem G-Ausdruck verwendet werden, um Verwechslungen mit einem G-Code wie X0 zu vermeiden. Diese Einschränkung gilt nicht für ST-Ausdrücke.

Kombination von G-Code und ST 2:

EINSCHRÄNKUNG:

Array-Variablen, Struktur-Variablen und Objekte können nicht in einem G-Ausdruck verwendet werden. Diese Einschränkung gilt nicht für ST-Ausdrücke.

Kombination von G-Code und ST 3:

EINSCHRÄNKUNG:

Klammern sind in einem G-Ausdruck nicht erlaubt, da sie zur Kennzeichnung von Kommentaren in G-Code verwendet werden. Aus demselben Grund sind auch keine Funktionsaufrufe möglich. Diese Einschränkungen gelten nicht für ST-Ausdrücke.

Eingebetteter ST-Ausdruck

<address>{<ST-Expression>}

Das Ergebnis des ST-Ausdrucks wird als Wert des Wortes verwendet. Es muss in LReal umgewandelt werden können. Im Grunde ist ein ST-Ausdruck ST-Code, der auf der rechten Seite einer Zuweisung platziert werden kann. Ein anderer ST-Code (z.B. eine ST-Anweisung) ist nicht zulässig. Umfangreiche Berechnungen können jedoch in einer ST-Funktion gekapselt werden, die dann in dem ST-Ausdruck aufgerufen wird.

Kombination von G-Code und ST 4:

Ein ST-Ausdruck sollte keine Nebeneffekte haben, da die Auswertungsreihenfolge von ST-Ausdrücken im Allgemeinen nicht definiert ist und sich in Zukunft ändern kann. Außerdem ist diese Art der Programmierung, bei der Seiteneffekte eingesetzt werden, ein schlechter Programmierstil. Zum Beispiel sollte ein ST-Ausdruck keine Funktion aufrufen, die G-Code enthält.

Beispiel:

G00 X0 Y0 Z0
! VAR   i : INT;   END_VAR
G01 Z-1 F6000
{
FOR i := 1 TO 5 DO
!G01 X=i*10 Y{ (i MOD 2) *10 }
END_FOR;
}
Kombination von G-Code und ST 5:

Abbildung "Beispiel Ausdrücke".

Unterdrückung von G-Code-Sätzen

/<n> <G-Code block>

Die Ausführung eines G-Code Satzes kann bedingt unterdrückt werden. Wenn '/<n>' vorangestellt ist und das n-te Bit in einer internen Disable-Maske gesetzt ist, wird der Satz unterdrückt (nicht ausgeführt). Die Disable-Maske kann von der SPS und über die ST-Funktion disableMaskSet eingestellt werden. Wenn n nicht angegeben wird, hat es standardmäßig den Wert 0. [Siehe Abschnitt Unterdrückung von G-Code-Sätzen.]