Ausdrücke

Funktion:

Ab der Version 4.4.0.0 ist es möglich, mathematische, boolesche und Zeichenketten-Ausdrücke zu verwenden. Dazu müssen die Funktionsbausteine SMC_ReadNCFile2 und SMC_NCInterpreter verwendet werden (anstelle von SMC_ReadNCFile und SMC_NCDecoder).

Info

Ausdrücke funktionieren nur im Online-Decoder (nicht im CNC-Editor).

Ausdrücke können im G-Code prinzipiell an zwei Stellen verwendet werden:

  • Als Werte von G-Wörtern (ein G-Wort besteht aus Adresse und Wert, z.B. "G1")

  • Als Übergabeparameter bei Unterprogrammaufrufen

Siehe auch

Syntax - Allgemeines

Ein Ausdruck kann aus folgenden Elementen bestehen:

  • Zahl- und Stringliterale

  • globale und lokale Variablen

  • Infix-Operatoren und Funktionen

  • Kommata und Klammern

Zur Strukturierung von Ausdrücken können in gleichberechtigter Weise runde (falls nicht zur Kennzeichnung von Kommentaren verwendet) und geschweifte Klammern verwendet werden. Das heißt, der Ausdruck (1 + 2} * 3 ist zulässig

Info

Der Funktionsbaustein SMC_ReadNCFile2 besitzt einen neuen Modus (Eingang bParenthesesAsComments), bei dem runde Klammern keine Kommentare sind. Statt dessen werden mehrzeilige Kommentare dann mit (* eingeleitet und mit *) geschlossen. In diesem neuen Modus können sowohl geschweifte als auch runde Klammern für Ausdrücke verwendet werden

Ein Leerzeichen nach der G-Adresse ist nur dann erforderlich, wenn diese von SMC_ReadNCFile2 nicht als eigenständiges Token erkannt würde, Beispiel: X abs{-2} statt Xabs{-2}.

Anders als in ST müssen einstellige Funktionen nicht zwingend mit Klammern aufgerufen werden, Beispiel: sin 3.

Jeder Teilausdruck wird während des Parsens einem der drei Typen BOOL, LREAL oder STRING zugeordnet. Entsprechend erwartet jeder Infix-Operator und jede Funktion eine bestimmte Folge von Argumenttypen, bei deren Nichteinhalten (falscher Typ, zu wenige oder zu viele Argumente) ein Fehler zurückgegeben wird.

Einschränkungen:

  • Satznummern müssen Zahlliterale sein.

  • Sprungmarken (x in L!x) dürfen aus rein technischen Gründen keine lokalen Variablen enthalten.

Siehe auch

Beispiele

N01 G36 O$var$ D concat{'prefix_', concat{$var$, '_suffix'}}
N02 G1 X$var$ + sin{pi + 3 * #locvar}
N03 G20 L0 K NOT {myfun{$var$, expt{2, #locvar}} XOR myfun{0, 0}}

Unterstützte Operatoren und Funktionen

Infix-Operatoren

Zeichen

Typ

Argumente

Präzedenz

MOD

LREAL

LREAL, LREAL

14

*

LREAL

LREAL, LREAL

13

/

LREAL

LREAL, LREAL

13

+

LREAL

LREAL, LREAL

12

-

LREAL

LREAL, LREAL

12

=

BOOL

BOOL, BOOL

10

=

BOOL

LREAL, LREAL

10

=

BOOL

STRING, STRING

10

<>

BOOL

BOOL, BOOL

10

<>

BOOL

LREAL, LREAL

10

<>

BOOL

STRING, STRING

10

>

BOOL

LREAL, LREAL

10

<

BOOL

LREAL, LREAL

10

>=

BOOL

LREAL, LREAL

10

<=

BOOL

LREAL, LREAL

10

AND

BOOL

BOOL, BOOL

6

XOR

BOOL

BOOL, BOOL

5

OR

BOOL

BOOL, BOOL

4

Funktionen

Zeichen

Typ

Argumente

-

LREAL

LREAL

ABS

LREAL

LREAL

MAX

LREAL

LREAL, LREAL

MIN

LREAL

LREAL, LREAL

NOT

BOOL

BOOL

TRUE

BOOL

FALSE

BOOL

SIN

LREAL

LREAL

COS

LREAL

LREAL

TAN

LREAL

LREAL

ASIN

LREAL

LREAL

ACOS

LREAL

LREAL

ATAN

LREAL

LREAL

EXP

LREAL

LREAL

LN

LREAL

LREAL

SQRT

LREAL

LREAL

EXPT

LREAL

LREAL, LREAL

FLOOR

LREAL

LREAL

CEIL

LREAL

LREAL

PI

LREAL

LEN

LREAL

STRING

CONCAT

STRING

STRING, STRING

Definition eigener Funktionen

Es ist möglich, eigene Funktionen hinzuzufügen oder eine vorhandene Implementierung zu überschreiben (beim Parsen des G-Codes werden Funktionen zuerst in den Anwenderfunktionen gesucht).

Dazu muss das Interface SMC_NC_IFunction implementiert und eine globale Instanz des entsprechenden Bausteins über die Struktur SMC_NC_GFunctionTable dem SMC_NCTokenParser zugänglich gemacht werden.

Für den Rückgabetyp und die Typen der Argumente wird die Enumeration SMC_GVar_Type verwendet. Der dort enthaltene Eintrag T_OTHER kann als Platzhalter für einen Typ verwendet werden: Beim Parsen wird überprüft, dass alle Argumente, die in der Signatur einem T_OTHER entsprechen, den gleichen Typ haben. Der Typ ist beliebig.

Fehlerbehandlung

Bei Syntaxfehlern werden nach Möglichkeit die genaue Position des fehlerhaften Tokens und seine Länge ausgegeben. Die Fehlerposition steht in SMC_ReadNCFile2.errorPos.

Siehe auch