Esempio CNC 16: funzione di sondaggio (distanza residua chiara) (G31)
Vedi il CNC16_G31.project progetto di esempio nella directory di installazione di CODESYS sotto ..\CODESYS SoftMotion\Examples.
Il progetto di esempio mostra come utilizzare la funzione di rilevamento (distanza residua chiara).
Nell'esempio, la macchina si muove in direzione X fino a raggiungere una barriera luminosa a X=50. Non appena la barriera fotoelettrica è stata raggiunta, la macchina deve fermarsi. Il G-Code rimanente deve essere elaborato a partire da questa posizione
Struttura dell'applicazione
La struttura è tipica delle applicazioni CNC. Il codice G viene letto nell'attività in backgroundPathTask). In questa attività viene eseguita anche la preelaborazione del percorso. L'interpolazione viene eseguita nel task del busMainTask).
Viene utilizzato il seguente codice G. In blocco N10, viene effettuato un posizionamento rapido per X = 20. Quindi, con G31 (funzione di rilevamento: percorso residuo libero), viene effettuato un movimento X = 100. Infine, in blocco N30, viene effettuato un movimento lineare per X = 20, Y = 50.
N10 G0 X20 F100 E1000 E-1000 N20 G31 X100 N30 G1 X20 Y50
L'interazione tra l'interpolatore e l'interprete è particolarmente importante per la funzione di sondaggio (percorso residuo chiaro).
L'interprete decodifica il codice G e genera una linea retta da
X=20aX=100per bloccoN20. Quindi interrompe la decodifica.L'interpolatore esegue il movimento lineare e contemporaneamente emette il numero della sonda come uscita
udiActProbePer il G31, il numero del campione è sempre 1Nell'applicazione, l'interpolatore viene arrestato con
bQuick_Stopnon appena l'unità supera la posizioneX=50. (Questo simula la barriera fotoelettrica.
Nel compito del bus,
SMC_SetInterpreterStartPositionil blocco funzione viene utilizzato per copiare in modo continuo la posizione corrente della macchina.
Nel
PathTask, la posizione iniziale viene assegnata all'inputSMC_NCInterpreter.piStartPosition:inter( sentences:= read.sentences, bExecute:= read.bExecute, nSizeOutQueue:= SIZEOF(bufIpo), pbyBufferOutQueue:= ADR(bufIpo), piStartPosition:= Main.setStart.StartPos);
Non appena l'interpolatore viene fermato,
bAcknProbel'input viene utilizzato per riconoscere il comando G31. In un'applicazione reale, è inoltre necessario verificare a questo punto che gli assi abbiano effettivamente raggiunto la posizione di arresto. Il SMC_Inposition a tale scopo è possibile utilizzare il blocco funzione.
Ciò fa sì che l'interprete riprenda la decodifica, ma con la posizione iniziale aggiornata in modo che il blocco seguente
N30viene avviato dalla posizioneX=55.5.
Il diagramma seguente illustra questi passaggi. I numeri tra parentesi si riferiscono alle fasi corrispondenti del processo sopra descritto

Messa in servizio
Crea l'applicazione e scaricala su un controller.
Apri la traccia e scaricala sul controller.
Avvia l'applicazione e apri la visualizzazione.