Vai al contenuto
PLC Forum


Dubbi Su Gestione Interrupt Su Somachine


Messaggi consigliati

Salve ragazzi,scrivo per chiedere un chiarimento su un problema che ho trovato nella stesura di un programma.

Sto per usare per la prima volta una cpu m258 per comandare 6 azionamenti lexium 32,un inverter a32 e una ventina di cilindri pneumatici. Funzionamento molto banale,ma per la prima volta mi trovo a fare i conti con un ingresso ad interrupt.

Premetto che so bene cos'è un interrupt,e so anche come configuarare un evento interrupt con soMachine,il problema è che non so cosa scrivere nella task che viene richiamata dall'evento.Mi spiego meglio.

Io vorrei che alla chiusura di un contatto del plc(al quale andrà collegato un sensore laser,probabilmente,o comunque di precisione)uno dei brushless si fermasse nel più breve tempo possibile,e soprattutto nello stesso tempo(non voglio cioè che la fermata sia influenzata dal tempo di scansione)

Per questo ho pensato ad un interrupt.

Dunque il motore frulla a circa 700 rpm...come potrei fare?supponiamo che io usi il blocco'move velocity' o 'move jog'. Nella mia mente perversa pensavo che se in un normale task setto il bit che chiamo "cmd_move",il quale fa muovere il motore,potrei resettare tale bit nella task richiamata dall'interrupt.

Non so perchè ma non ne sono del tutto convinto... :toobad:

Inoltre,se resetto tale bit nella task richiamata dall'interrupt,lo stato si 'congela'e quindi non lo posso ri-settare?

Chiedo umilmente vostro aiuto :worthy:

Grazie in anticipo

Matteo

Link al commento
Condividi su altri siti


usa il blocco stop

certo che fermare una macchina con un tempo più breve del tempo di scansione la vedo dura,

stiamo parlando di millesimi di secondo e se consideriamo le inerzie meccaniche .. boh ...

ciao

Link al commento
Condividi su altri siti

Ciao, non ho detto di voler fermarla in un tempo piu breve del ciclo di scansione, ma di voler fermarla senza che il tempo di ciclo influisca sul tempo di fermata.

Se uso il blocco stop, non credo che sia richiamato diversamente da altri blocchi.. Sbaglio?

Link al commento
Condividi su altri siti

il tempo di scansione dipende dalla pesantezza del programma è questo dato lo puoi sapere solo tu,

comunque non vedo il problema, solitamente il ciclo è talmente veloce che difficilmente influirà sul tempo di fermata,

poi come dicevo questo lo puoi valutare solo tu in base all'applicazione

il blocco stop è il blocco stop!

come fa ad essere richiamato diversamente? .. può solo fermare l'inverter

oppure non ho capito cosa stai chiedendo

ciao

Link al commento
Condividi su altri siti

Premetto che so bene cos'è un interrupt,e so anche come configuarare un evento interrupt con soMachine,il problema è che non so cosa scrivere nella task che viene richiamata dall'evento.

Dipende da come comandi il drive. In tutti i drive, degni di questo nome, c'è un comando che porta a zero istantaneamente il riferimento di velocità, escludendo l'eventuale rampa.

Nella routine di servizio all'interrupt devi solamente attivare questo comando. Se, ad esempio, questo comando corrisponde ad un ingresso dignitale del drive, devi connettere l'ingresso ad un'uscita del del PLC, uscita che dovrai comandare direttamente, ovvero senza passare dai registriimmagnine. In questo modo il camando si attiva con un minimo ritardo, quello di latenza dell'interrupt e quello necessario ad eleaborare l'istruzione di scrittura, più il ritardo tipico dell'uscita fisica.

Link al commento
Condividi su altri siti

comunque non vedo il problema, solitamente il ciclo è talmente veloce che difficilmente influirà sul tempo di fermata,

Qui non sono totalmente d'accordo, o meglio, credo che la cosa sia relativa. Se hai un motore che gira a 30-40 rpm qualche ms di ritardo non fa gran differenza, ma se sta frullando a 5000 rpm credo la differenza si veda, eccome..

Link al commento
Condividi su altri siti

uscita che dovrai comandare direttamente, ovvero senza passare dai registri immagnine.

Buongiorno sig.Livio e grazie della risposta

mi corregga se sbaglio:scrivere direttamente un uscita significa attivarla immediatamente(come fosse un bit interno) invece di aspettare la fine del ciclo di scansione. Questo metodo va usato con le dovute cautele in quanto l'uscita,se scritta piu volte,cambierà stato piu volte rendendo imprevedibile il comportamento della macchina. Sbaglio?

Quello che volevo dire nel primo post era appunto questo:tra usare un interrupt ,scrivendo direttamente l'uscita senza passare dai registri immagine,e gestire tutto con i tempi del plc(che sono senz'altro brevi ma a mio parere non trascurabili) credo che passi una gran differenza,che aumenta in maniera esponenziale con la velocità del motore.

Questo almeno nella mia testa,perchè non sono ancora riuscito a fare nessuna prova pratica.

Un altro dubbio è il seguente:una volta richiamata correttamente la task ad evento(immagino nel mio caso evento esterno,in quanto la condizione richiamante è l'attivazione di un sensore)

dentro cosa sarebbe meglio mettere? un bit semprevero,che setta l'uscita fisica che comanda lo stop(naturalmente scrivendola direttamente)?

In questo caso,supponendo che il sensore sia rimasto attivo,significa che richiama continuamente quella task impedendomi di fatto di poter resettare quella uscita,o la richiama una sola volta e poi torna alla normale scansione?

Grazie anticipatamente

Matteo

Link al commento
Condividi su altri siti

Un programma medio, con una CPU decente, oggi gira in qualche ms (1ms - 5ms). Se questi tempi e questo jitter è compatibile con la tua applicazione, non usare interrupt.

Se non è compatibile usa l'interrupt come ho descritto. Scrivere direttamente l'uscita non è un problema, basta fare in modo che venga scritta solo e soltanto dove e come si vuole. Con un poco di organizzazione e attenzione non è difficile.

Nella routine di servizio dell'interrupt si scrive, in questo caso, solo la'ttivazione dello stop rapido e la sua memoria. Nel resto del programama, prima di agire sui comandi di quel drive si verivicherà lo stato di quella memoria.

Anche la rimozione del comando di stop rapido, ed il reset della memoria, potranno avvenire nel ciclo normale, verificando che occorrano le opportune condizioni.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...