Funzioni G-Code specifiche per l'utente
Le CNC11_CustomFunctions.project
il progetto di esempio si trova nella directory di installazione di CODESYS sotto ..\CODESYS SoftMotion\Examples
.
Questo esempio mostra come creare funzioni personalizzate da utilizzare nelle espressioni in codice G.
Per ulteriori informazioni sulle espressioni e le funzioni in codice G, vedere: espressioni. Lì troverai un elenco di tutti gli operatori e le funzioni supportati di default.
L'esempio definisce SEL operatore conforme alla norma IEC 61131-3 in modo che possa essere utilizzato anche nel codice G.
Struttura dell'applicazione
Come di consueto per le applicazioni CNC, l'applicazione consiste nell'elaborazione del percorso (CNC_PreparePath
programma) e interpolazione (CNC
programma). Poiché l'interpolazione non differisce dagli altri esempi, l'argomento non verrà discusso ulteriormente qui
L'elaborazione del percorso viene chiamata ciclicamente ogni 20 ms nella modalità a bassa priorità PathTask
. L'interpolazione viene chiamata ciclicamente ogni 4 ms MotionTask
. L'attività in background VISU_TASK
è definito per la visualizzazione.
Nella visualizzazione, puoi iniziare a elaborare il codice G e impostare il valore della variabile $LONGLINE$
. Il codice G e il movimento della macchina (portale 3D) sono visualizzati sul lato destro della
Il codice G
CNC
LET #WIDTH : LREAL N10 G36 O#WIDTH D SEL($LONGLINE$, 40, 110) N20 F50 E100 E-100 N30 G01 X#WIDTH Y#WIDTH Z#WIDTH/2 N40 Y-#WIDTH N50 X-#WIDTH Z-#WIDTH/2 N60 Y#WIDTH N70 X0 Y0 Z0
Linea 1: Dichiarazione della variabile locale #WIDTH
di tipo LREAL
.
Linea 2, Blocco N10: Assegnazione del valore di SEL($LONGLINE$, 40, 110)
alla variabile #WIDTH
. Se il valore della variabile PLC $LONGLINE$
è TRUE
, allora il valore dell'espressione è 110; altrimenti è 40.
Nelle righe seguenti, viene attraversato un rettangolo con movimento aggiuntivo in direzione Z; la lunghezza di un lato del rettangolo è 2*#WIDTH
.
Implementazione del SEL
funzione

Per creare una funzione definita dall'utente, è necessario scrivere un blocco funzione che implementa il SMC_NC_IFunction
interfaccia.
Per ulteriori informazioni, vedere: Funzione SMC_NC_I.
GetSignature
. Il tipo restituito, il conteggio e i tipi degli argomenti della funzione vengono restituiti qui. In questo esempio,SEL
la funzione restituisce un valore di tipoT_OTHER
e ha 3 argomenti di tipoT_BOOL
,T_OTHER
, eT_OTHER
.T_OTHER
sta per qualsiasi tipo (oT_BOOL
,T_LREAL
, oppureT_STRING
]. Tutte e 3 le occorrenze diT_OTHER
deve essere dello stesso tipo.METHOD GetSignature VAR_OUTPUT resultType : SMC_GVar_Type; nNumArguments : UDINT; pType : POINTER TO SMC_GVar_Type; END_VAR VAR argTypes : ARRAY[0..2] OF SMC_GVar_Type := [SMC_GVar_Type.T_BOOL, SMC_GVar_Type.T_OTHER, SMC_GVar_Type.T_OTHER]; END_VAR resultType := SMC_GVAR_Type.T_OTHER; nNumArguments := 3; pType := ADR(argTypes);
Call
: Questo metodo viene chiamato durante l'elaborazione del codice G. Gli argomenti vengono passati tramitepa
ingresso. L'espressionepa[0].argValue.bValue
viene utilizzato per accedere al valore booleano del primo argomento. A seconda del tipo del secondo argomentopa[1].argType
, il risultato è il valore restituitoresult.argType
e la ramificazione in un'istruzione CASE.METHOD Call VAR_IN_OUT result : SMC_NC_GArgument; END_VAR VAR_INPUT pa : POINTER TO SMC_NC_GArgument; END_VA RVAR_OUTPUT eError : SMC_ERROR; END_VAR VAR g : BOOL; END_VAR g := pa[0].argValue.bValue; result.argType := pa[1].argType; CASE result.argType OF SMC_GVAR_Type.T_BOOL: result.argValue.bValue := SEL(g, pa[1].argValue.bValue, pa[2].argValue.bValue); SMC_GVAR_Type.T_STRING: result.argValue.sValue := SEL(g, pa[1].argValue.sValue, pa[2].argValue.sValue); SMC_GVAR_Type.T_LREAL: result.argValue.fValue := SEL(g, pa[1].argValue.fValue, pa[2].argValue.fValue); ELSE eError := SMC_INVALID_PARAMETER; END_CASE
Configurazione di SMC_ReadNCFile2
Un esempio di CNC_Sel
il blocco funzione viene creato in GVL_CNCFunctions
elenco globale delle variabili.
Un array aCNCFunctions
di lunghezza 1 viene inizializzato con il nome e l'istanza del blocco funzione. Questo array viene quindi collegato nella tabella funTable
di tipo SMC_NC_GFunctionTable
.
aCNCFunctions : ARRAY[0..0] OF SMC_NC_GFunction := [(stName:= 'SEL', iFunc:= GVL_CNCFunctions.g_Sel)]; funTable : SMC_NC_GFunctionTable := (numFunctions:= 1, pFunction:= ADR(aCNCFunctions)) ;
Infine, questa tabella viene passata al SMC_ReadNCFile2
blocco funzionale:
rncf2 : SMC_ReadNCFile2 := (bParenthesesAsComments:= FALSE); [...] rncf2( bExecute:= TRUE, sFileName:= sFileName, pCustomFunTable:= ADR(funTable), pvl:= ADR(varList));
Messa in servizio
Crea l'applicazione e scaricala su un controller.
Avviare l'applicazione, passare alla visualizzazione e premere
Start
. Puoi usareLongline
pulsante radio per impostare il valore della variabile$LONGLINE$
nel codice G perTRUE
oFALSE
.