Skip to main content

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).

  1. L'interprete decodifica il codice G e genera una linea retta da X=20 a X=100 per blocco N20. Quindi interrompe la decodifica.

  2. L'interpolatore esegue il movimento lineare e contemporaneamente emette il numero della sonda come uscita udiActProbePer il G31, il numero del campione è sempre 1

  3. Nell'applicazione, l'interpolatore viene arrestato con bQuick_Stop non appena l'unità supera la posizione X=50. (Questo simula la barriera fotoelettrica.

    _sm_img_example_cnc16_1.png
  4. Nel compito del bus, SMC_SetInterpreterStartPosition il blocco funzione viene utilizzato per copiare in modo continuo la posizione corrente della macchina.

    _sm_img_example_cnc16_2.png
  5. Nel PathTask, la posizione iniziale viene assegnata all'input SMC_NCInterpreter.piStartPosition:

    inter(
        sentences:= read.sentences,
        bExecute:= read.bExecute,
        nSizeOutQueue:= SIZEOF(bufIpo),
        pbyBufferOutQueue:= ADR(bufIpo),
        piStartPosition:= Main.setStart.StartPos);
  6. Non appena l'interpolatore viene fermato, bAcknProbe l'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.

    _sm_img_example_cnc16_4.png
  7. Ciò fa sì che l'interprete riprenda la decodifica, ma con la posizione iniziale aggiornata in modo che il blocco seguente N30 viene avviato dalla posizione X=55.5.

Il diagramma seguente illustra questi passaggi. I numeri tra parentesi si riferiscono alle fasi corrispondenti del processo sopra descritto

_sm_img_example_cnc16_5.png

Messa in servizio

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

  2. Apri la traccia e scaricala sul controller.

  3. Avvia l'applicazione e apri la visualizzazione.