Skip to main content

Implementazione di un blocco funzionale di preelaborazione del percorso

Vedi il CNC14_PathPreprocessing.project progetto di esempio nella directory di installazione di CODESYS sotto ..\CODESYS SoftMotion\Examples.

Il progetto di esempio mostra come implementare un nuovo blocco funzione di preelaborazione del percorso.

preelaborazione del percorso viene generalmente utilizzata per modificare il percorso letto dal codice G. Ciò consente di implementare funzioni come la correzione del raggio dell'utensile o la levigatura degli angoli. Tuttavia, è anche possibile integrare funzioni specifiche per una particolare macchina o applicazione come blocco funzionale di preelaborazione del percorso

Per ulteriori informazioni sulla preelaborazione dei percorsi, vedere quanto segue: Preelaborazione del percorso e dimensioni della coda.

Per un esempio di come utilizzare un blocco funzione di preelaborazione del percorso, vedere quanto segue: Esempio CNC 03: esecuzione della preelaborazione del percorso in linea.

Limitazione del cambio di tangente

L'esempio mostra un'applicazione di taglio 2D. È necessario utilizzare un coltello per tagliare lungo un percorso definito dal codice G. Il SMC_TRAFO_GantryCutter2 la trasformazione viene utilizzata per determinare l'angolo del coltello in base alla tangente corrente del percorso.

La sfida è che il coltello non deve ruotare troppo velocemente, altrimenti il taglio non sarà netto. La limitazione della velocità angolare del coltello viene risolta nel progetto di esempio mediante il blocco funzionale Path-Preprocessing appena creato LimitTangentVelocity. Cambia la velocità di avanzamento sul percorso in modo che la velocità di variazione della tangente non superi un valore massimo configurabile

Il codice G è un semplice rettangolo con angoli smussati.

_sm_img_example_preprocessing_function_block1.png

La traccia mostra il risultato dell'esecuzione: la velocità dell'asse C, che corrisponde alla velocità di rotazione del coltello, viene visualizzata in arancione. È limitato a 45°/s come specificato

_sm_img_example_preprocessing_function_block2.png

Struttura dell'applicazione

La struttura è tipica delle applicazioni CNC. Il codice G viene letto nell'attività in background e qui avviene anche la preelaborazione del percorso. L'interpolazione viene eseguita nel

Le LimitTangentVelocity il blocco funzione mostra i passaggi e gli stati necessari per un blocco funzionale di preelaborazione del percorso.

Il principio di base è che il blocco funzione legge, elabora e quindi scrive gli elementi del percorso (tipo SMC_GEOINFO) dalla coda di input (poqDataIn) alla coda di output (poqDataOut). Gli elementi vengono rimossi dalla coda di input

La logica per modificare la velocità di avanzamento si trova nelle righe 102-138. La funzione ausiliaria ComputeMaxCurvature calcola la curvatura massima che può verificarsi su un determinato elemento del percorso.

// Our velocity limitation comes here. This modifies an element from the
// input queue and copies the modified element to the output queue.
// Finally, the element is removed from the input queue

m_geo := pgeo^; // Copy the element
 // Note: the feature flags set in the G-Code with G38/G39 can be queried
 // by reading pgo^.dwFeatureFlags, like this:
 IF (SHR(m_geo.dwFeatureFlags, featureFlag) AND 1) = 1 THEN
     // feature is turned on

     ok := ComputeMaxCurvature(m_geo, kappa=> kappa_max);
     IF NOT ok THEN
         // Curvature cannot be computed
         m_state := STATE_ERROR;
         ErrorID := SMC_INVALID_PARAMETER;
         OnExit();
         RETURN;
     END_IF

     // Compute maximum allowed path velocity based on maximum curvature
     // and maximum allowed angular velocity
     IF kappa_max = 0 THEN
         // No curvature, no limitation necessary
         vel := m_geo.dVel;
     ELSE
         vel := m_maxAngularVelocity_rad / kappa_max;
     END_IF

     IF velMin < 0 OR vel < velMin THEN
         velMin := vel;
     END_IF

     // Set new maximum velocity for the element
     m_geo.dVel := MIN(m_geo.dVel, vel);
 ELSE
     // feature is turned off
 END_IF

Messa in servizio

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

  2. Avviare l'applicazione.

  3. Apri la traccia e scaricala sul controller.

  4. Scrivi il valore TRUE alle variabili Path.bExecute e PLC_PRG.bStart.

  5. È possibile tenere traccia dell'elaborazione del codice G nella traccia.