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
N50 G36 O$plc_variable$ D'TextTest' X-1 (Comment)
Questo codice G è suddiviso come segue:
Testo | SMC_TOKENTYPE | SMC_TOKENVALUE |
|---|---|---|
| identifer | stValue = 'N' |
| number | fValue = 50.0 |
| identifer | stValue = 'G' |
| number | fValue = 36.0 |
| identifer | stValue = 'O' |
| variable | stValue = 'plc_variable' |
| identifer | stValue = 'D' |
| strLiteral | stValue = 'TextTest' |
| identifer | stValue = 'X' |
| operator | stValue = '-' |
| 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.
Start: inizializzazione del blocco funzionale. Lo stato interno viene ripristinatoCall: 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
Tutti i token vengono spostati dalla coda di input alla coda di output.
Se viene rilevata una parola F, allora due nuovi token,
1/60e*, 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_IFMessa in servizio
Crea l'applicazione e scaricala su un controller.
Avviare l'applicazione, passare alla visualizzazione e premere
Start.