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
).
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
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
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
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}}
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 |
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 |
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.