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,SELla funzione restituisce un valore di tipoT_OTHERe ha 3 argomenti di tipoT_BOOL,T_OTHER, eT_OTHER.T_OTHERsta per qualsiasi tipo (oT_BOOL,T_LREAL, oppureT_STRING]. Tutte e 3 le occorrenze diT_OTHERdeve 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 tramitepaingresso. L'espressionepa[0].argValue.bValueviene utilizzato per accedere al valore booleano del primo argomento. A seconda del tipo del secondo argomentopa[1].argType, il risultato è il valore restituitoresult.argTypee 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 usareLonglinepulsante radio per impostare il valore della variabile$LONGLINE$nel codice G perTRUEoFALSE.