Skip to main content

ReadNCFile2 con modificatore di token

Le CNC12_TokenModifier.project il progetto di esempio si trova nella directory di installazione di CODESYS sotto ..\CODESYS SoftMotion\Examples.

Questo esempio mostra come modificare il codice G durante l'importazione per convertire l'unità di velocità del percorso (parola F) da mm/min a mm/s inserendo il codice G. 1/60.0 * prima del valore della velocità durante la lettura del codice G per la parola F. F6000 quindi diventa F 1/60.0 * 6000, che viene successivamente elaborato dal SMC_NCInterpreter blocco funzionale per F100. In casi semplici, puoi saltare la moltiplicazione per 1/60 e basta regolare il valore (ad esempio, da 6000 fino a 100). Tuttavia, la moltiplicazione è più generale perché funziona anche quando si utilizzano variabili F $SPEED$ diventa F 1/60.0 * $SPEED$.

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 è diversa dagli altri esempi, non verrà discussa 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.

È possibile iniziare a elaborare il codice G nella visualizzazione. Il codice G e il movimento della macchina (portale 3D) sono visualizzati sul lato destro della

Il codice G

CNC_PathSpeed

N10 G01 X1000 F6000
N20 Y1000

In questo codice G, la velocità del percorso in blocco N10 è impostato con F6000 fino a 6000 mm/min. Tuttavia, i blocchi funzionali CNC prevedono la velocità del percorso in mm/s. Vengono comandati due movimenti lineari X=1000 e poi a X=1000, Y=1000.

Elaborazione dei token

Le SMC_ReadNCFile2 e SMC_ReadNCFromStream i blocchi funzione forniscono la capacità di eseguire le proprie trasformazioni quando viene letto il codice G. Qui stiamo usando con SMC_ITokenModifier interfaccia, che viene passata tramite aTokenModifier input.

Questa interfaccia funziona su «token». Queste sono le parti base del codice G in cui viene suddiviso il testo del codice G all'avvio dell'elaborazione

Esempio 54. Esempio
N50 G36 O$plc_variable$ D'TextTest' X-1 (Comment)

Questo codice G è suddiviso come segue:

Testo

SMC_TOKENTYPE

SMC_TOKENVALUE

N

identifer

stValue = 'N'

50

number

fValue = 50.0

G

identifer

stValue = 'G'

36

number

fValue = 36.0

O

identifer

stValue = 'O'

$plc_variable$

variable

stValue = 'plc_variable'

D

identifer

stValue = 'D'

'TextTest'

strLiteral

stValue = 'TextTest'

X

identifer

stValue = 'X'

-

operator

stValue = '-'

1

number

fValue = 1.0



Le informazioni che non sono necessarie per l'ulteriore elaborazione (ad esempio, spazi bianchi, interruzioni di riga e commenti) non vengono visualizzate nell'elenco dei token.

Quando il SMC_ITokenModifier l'interfaccia è implementata, l'elenco dei token può essere adattato aggiungendo nuovi token, eliminando i token e modificando i valori dei token.

. L'interfaccia definisce due metodi:
  • Start: inizializzazione del blocco funzionale. Lo stato interno viene ripristinato

  • Call: Chiamata di questo metodo durante l'elaborazione del codice G. I token possono essere letti e rimossi dalla coda di input e aggiunti alla coda

Attuazione

. Il flusso di elaborazione in PLC_PRG è il seguente:
  • Tutti i token vengono spostati dalla coda di input alla coda di output.

  • Se viene rilevata una parola F, allora due nuovi token, 1/60 e *, vengono aggiunti dopo il token per «F» e prima del token per il valore della velocità.

Le Call il metodo contiene la logica per elaborare i token. È utile spostare prima i token dalla coda di inputtokensIn) in una coda temporanea (m_tmpQueue), li elabora lì e poi li sposta nella coda di output (tokensOut). La coda temporanea non è assolutamente necessaria per adattare la velocità del percorso, ma semplifica la struttura del programma nei

Metodo: chiamata

Inizialmente, il sistema attende STATE_RUNNING stato fino all'inizio dell'elaborazione (quando i token sono disponibili nella coda di input e c'è ancora spazio nella coda di output).

IF NOT SMC_NC_CanProcessTokens(tokensIn, tokensOut) THEN
    // Wait until processing can proceed
    RETURN;
END_IF

Quindi un token viene spostato dalla coda di input alla coda temporanea.

IF m_tmpQueue.IsEmpty() THEN
    // Move the next token from the in-queue to the tmp-queue.
    pt := tokensIn.GetFromStart(0);
    m_tmpQueue.Append(pt^);
    tokensIn.RemoveFirst();
END_IF

L'elaborazione effettiva viene effettuata nel ConvertSpeed metodo.

IF NOT m_tmpQueue.IsEmpty() THEN
    // The actual processing is done here
    ConvertSpeed();
END_IF

Alla fine del metodo, un token viene spostato dalla coda temporanea alla coda di output.

Metodo: ConvertSpeed

Viene selezionato il primo token della coda temporanea.

Se un identificatore con il valore F viene trovato, quindi vengono aggiunti due token aggiuntivi: il numero 1/60.0 e l'operatore *.

(La dimensione della coda temporanea è selezionata in modo tale che altri due token entrino nella coda oltre a quello della coda di input).

tk := m_tmpQueue.GetFromStart(0)^;

IF tk.tokenType = SMC_TokenType.identifier THEN
    tk.GetString(pbyString => pby, iSize => iSize);
    // 70 = ASCII code for F (path velocity)
    IF iSize = 1 AND pby^ = 70 THEN
        // Insert the number 1/60
        SMC_Token_InitNumber(
            tk:= tkNumber,
            value:= 1/60.0,
            srcPos:= tk.srcPos);
        m_tmpQueue.Append(tkNumber);

        // Insert operator '*' for multiplication
        SMC_Token_InitOperator(
            tk:= tkOperator,
            value:= '*',
            srcPos:= tk.srcPos);
        m_tmpQueue.Append(tkOperator);
    END_IF
END_IF

Messa in servizio

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

  2. Avviare l'applicazione, passare alla visualizzazione e premere Start.