Skip to main content

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

_sm_img_function_sel.png

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.

. L'interfaccia definisce due metodi:
  1. 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 tipo T_OTHER e ha 3 argomenti di tipo T_BOOL, T_OTHER, e T_OTHER. T_OTHER sta per qualsiasi tipo (o T_BOOL, T_LREAL, oppure T_STRING]. Tutte e 3 le occorrenze di T_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);
  2. Call: Questo metodo viene chiamato durante l'elaborazione del codice G. Gli argomenti vengono passati tramite pa ingresso. L'espressione pa[0].argValue.bValue viene utilizzato per accedere al valore booleano del primo argomento. A seconda del tipo del secondo argomento pa[1].argType, il risultato è il valore restituito result.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

  1. Crea l'applicazione e scaricala su un controller.

  2. Avviare l'applicazione, passare alla visualizzazione e premere Start. Puoi usare Longline pulsante radio per impostare il valore della variabile $LONGLINE$ nel codice G per TRUE o FALSE.