Interruzione e continuazione dei movimenti
Mentre un gruppo di assi è in movimento, il movimento può essere interrotto. Questo può essere un arresto intenzionale (MC_GroupHalt
, MC_GroupStop
), o una pausa sul percorso (MC_GroupInterrupt
), o un arresto a causa di un errore. In tutti i casi, CODESYS SoftMotion fornisce blocchi funzione per riportare il gruppo di assi sul percorso pianificato e continuarlo.
Fermare un movimento mettendo in pausa
Con l'aiuto dei blocchi funzione MC_GroupInterrupt
e MC_GroupInterruptAt
puoi mettere in pausa l'esecuzione dei movimenti comandati. Così facendo, MC_GroupInterrupt
uno stop istantaneo MC_GroupInterruptAt
una sosta in una determinata posizione. Il movimento può quindi più tardi con Gruppo_MCContinua
continua.
Il blocco funzione MC_GroupInterruptAt
fornisce l'input SMC_GroupInterruptPositionMvtRel
. Specifica una posizione di interruzione relativa a un movimento. Il movimento è referenziato dal suo SMC_Movement_Id
. La posizione all'interno del movimento è definita da un valore (reale) compreso tra 0 e 1, dove 0 è l'inizio del movimento e 1 è la fine. Una posizione tra i punti B e A viene interpretata esattamente come se non ci fosse fusione. Una posizione tra Pcominciare e B o tra A e Pdestinazione è proiettato sul percorso di fusione.

MC_GroupInterruptAt
Quando l'ID movimento specificato è sconosciuto, il blocco funzione restituisce un errore. Il movimento in corso non viene interrotto.
Se lo stato dinamico attuale del gruppo di assi non consente di raggiungere l'arresto prima della posizione di interruzione specificata, allora
SMC_GroupInterruptAt
si comporta esattamente comeMC_GroupInterrupt
: l'interruzione viene eseguita immediatamente e il gruppo di assi raggiunge l'arresto da qualche parte dietro la posizione di interruzione comandata.Tutti gli altri errori vengono gestiti esattamente come per MC_GroupInterrupt
Un'interruzione in una posizione specifica può essere interrotta con un altro movimento finché il processo di arresto nella posizione di interruzione non è ancora iniziato.
È possibile comandare un solo interrupt alla volta in una posizione specifica. Se è stato comandato un interrupt, allora deve essere completato o interrotto in modo che un altro interrupt possa essere accettato.
Quando esegui MC_GroupInterrupt
o MC_GroupInterruptAt
, dapprima viene eseguito un arresto invariante di percorso, simile a un MC_GroupHalt
. Quindi lo stato del gruppo di assi ("continua dati") viene memorizzato in una variabile trasferita dall'utente (tipo SMC_AXIS_GROUP_CONTINUE_DATA
). Ora il gruppo di assi è nello stato GroupStandby
e può essere utilizzato normalmente. Un tipico esempio potrebbe essere che il gruppo di assi sia in jog.
Puoi venire con me più tardi MC_GroupContinue
riprendere l'esecuzione interrotta. A tal fine, trasferire i "Dati continuativi" salvati. Affinché ciò funzioni senza errori, la posizione del gruppo di assi deve corrispondere alla posizione che avrà dopo l'esecuzione MC_GroupInterrupt
aveva. (Per favore, riferisci SMC_GroupGetContinuePosition
.)
Quando un movimento di tracciamento è stato interrotto (ovvero un movimento che è stato comandato rispetto a un sistema di coordinate dinamico), MC_GroupInterrupt
non si ferma assolutamente (come MC_GroupHalt
), ma relativamente al sistema di coordinate dinamiche. Ad esempio, se un pezzo viene tracciato su una tavola rotante, MC_GroupInterrupt
si ferma rispetto al pezzo. Il gruppo di assi continua a seguire il pezzo. I dati continue devono essere aggiornati SMC_GroupUpdateContinueData
se la cinematica ha assi rotanti a più periodi. Successivamente, il movimento può essere continuato con MC_GroupContinue
.
Importante
La variabile di tipo SMC_AXIS_GROUP_CONTINUE_DATA
non devono essere memorizzati in modo permanente o modificati durante una modifica online.
Suggerimento
Utilizzo del blocco funzione SMC_GroupWait
, è possibile attendere sul percorso tra due movimenti per un tempo programmabile.
Arresto del movimento da MC_GroupHalt o MC_GroupStop
Dopo un arresto del movimento attivato da MC_GroupHalt
o MC_GroupStop
, il movimento del gruppo di assi può essere ripreso come segue senza perdita di informazioni: Richiamare il blocco funzione SMC_GroupSaveContinueData
prima di chiamare MC_GroupHalt
o MC_GroupStop
. Questa POU salva lo stato corrente, la posizione corrente e tutti i movimenti comandati nel momento in cui è stato chiamato il comando di arresto o arresto. Ciò consente di continuare il movimento in seguito esattamente da questa posizione. Nota: questa NON è la posizione che il gruppo di assi aveva dopo aver raggiunto la posizione di arresto.
Comportamento prima della versione 4.12.0.0: The SMC_GroupSaveContinueData
il blocco funzione deve essere chiamato nello stesso ciclo in cui MC_GroupHalt
o MC_GroupStop
è chiamato. In questo momento, devi assicurarti che SMC_GroupSaveContinueData
viene chiamato prima MC_GroupHalt
o MC_GroupStop
. In caso contrario, i movimenti interrotti verranno rimossi dalla coda.
Comportamento dalla versione 4.12.0.0: The SMC_GroupSaveContinueData
il blocco funzione può essere richiamato in qualsiasi momento fino al primo movimento successivo al richiamo MC_GroupHalt
o MC_GroupStop
. La posizione di proseguimento è la posizione attuale del gruppo di assi al momento del primo richiamo del blocco funzionale. Il percorso salvato è costituito da tutti i movimenti che sono stati accettati prima del comando di arresto/arresto.
Per poter continuare il percorso nella posizione in cui il gruppo di assi si è fermato a causa di MC_GroupHalt
o MC_GroupStop
, SMC_GroupSaveContinueData
dovrebbe essere chiamato nel ciclo in cui MC_GroupHalt
o MC_GroupStop
imposta il Done
segnale.
Solo un'istanza di SMC_GroupSaveContinueData
può essere chiamato per gruppo di assi.
Suggerimento
Il salvataggio dello stato corrente prima del comando di arresto/stop può richiedere diversi cicli, ma è garantito che le informazioni di stato nel primo ciclo verranno salvate prima di eventuali movimenti interrotti.
Suggerimento
SMC_GroupSaveContinueData
può essere chiamato in qualsiasi momento per salvare lo stato corrente, non solo in connessione con la chiamata MC_GroupHalt
o MC_GroupStop
.
Arresto di un movimento a causa di un errore
Se un movimento viene interrotto a causa di un errore, i singoli assi di un gruppo di assi vengono arrestati singolarmente e commutati nello stato di errore. Nel processo, il TCP lascia il percorso pianificato. Ora è possibile confermare l'errore, ripristinare il gruppo di assi e spostarsi nella posizione in cui è stato rilevato l'errore. Successivamente, è possibile indicare al gruppo di assi di continuare i movimenti pianificati in precedenza.
Con il blocco funzione SMC_GroupEnableResumeAfterError
attivare la funzione per riprendere i movimenti programmati dopo un errore. Il blocco deve essere richiamato ciclicamente nel task del ciclo bus. È possibile richiamare solo un'istanza di questo blocco funzione per ogni gruppo di assi.
Se il gruppo di assi rileva un errore e passa allo stato Errorstop
, quindi salva i movimenti già accettati e le informazioni di stato necessarie in una variabile di tipo SMC_AXIS_GROUP_CONTINUE_DATA
. Quindi questa variabile contiene i "dati continui" e viene passata come input di SMC_GroupEnableResumeAfterError
.
Quindi puoi usare i movimenti Gruppo_MCContinua
riprendere più tardi. Se gli errori sono causati dai movimenti comandati (esempio: violazioni dell'area di lavoro o raggio dell'arco non valido), non possono essere eliminati in questo modo. Questi errori si ripresenteranno dopo la ripresa del movimento. Il meccanismo è più destinato agli errori di un singolo asse e ad altri eventi esterni che forzano il gruppo di assi all'arresto per errore.
MC_GroupContinue
richiede che il gruppo di assi si trovi in una posizione specifica quando il movimento continua. In caso di ripristino dell'errore, questa posizione è la posizione corrente nel momento in cui è stato rilevato l'errore. È possibile utilizzare questa posizione con il modulo funzione SMC_GroupGetContinuePosition
Interrogare.
Importante
Se un errore del gruppo di assi non consente la continuazione del movimento (come un errore interno durante la scrittura dei dati di continuazione), allora
MC_GroupContinue
eSMC_GroupGetContinuePosition
restituisce il nuovo ID di erroreSMC_AXIS_GROUP_CONTINUE_DATA_NOT_WRITTEN
.Quando un
MC_GroupStop
è attivo quando si verifica l'errore, quindi ilMC_GroupStop
di nuovo attivo anche dopo la ripresa. Il gruppo assale si è già fermato e ilMC_GroupStop
ha cancellato tutti i movimenti in sospeso, quindi non ha luogo alcun movimento.Quando si verifica un errore del gruppo di assi, l'istanza del blocco funzione del movimento attivo emette l'errore (uscite
Active
eBusy
passa aFALSE
e uscitaError
passa aTRUE
). Anche le istanze dei blocchi funzione di movimenti bufferizzati o combinati, che non sono ancora attivi, generano un errore. Dopo il riavvio, tutte queste istanze di blocchi funzione vengono reimpostate suBusy
/Active
e le loro uscite si resettano aError
/CommandAborted
.