Vai al contenuto
PLC Forum


Rampe E Gestione Velocità


suppaman

Messaggi consigliati

Salve a tutti.

Sto cercando di crearmi dei blocchi fb/fc per la gestione di rampe di accelerazione/decelerazione.

Tramite la funzione cerca ho letto numerose discussioni interessanti riguardo questo argomento, ma nella maggior parte dei casi si parlava di posizionamenti con controllo di tempo velocità ecc.. e mi hanno un po confuso le idee dato che quello che mi interessava al momento è qualcosa di molto semplice, ovvero dato il setpoint di velocità, e l'accelerazione, devo generare il riferimento per piu motori che devono seguire tutti lo stesso riferimento.

Ho capito che per avere una rampa corretta è necessario lavorare con l'ob a interrupt,quindi richiamerei la funzione nell'OB35, ma non riesco a capire come calcolare il gradino di rampa, ovvero di quanto deve incrementare la velocità ad ogni scansione del blocco.

Spero in qualche suggerimento per andare avanti e capire bene come fare in modo che poi in futuro saprò adattare la cosa in base all'esigenza specifica.

Grazie.

Link al commento
Condividi su altri siti


Una volta che hai deciso il tempo dell'interupt dell'OB35 hai determinato il quanto di tempo minimo per la tua rampa, o tic di sistema.

Ora devi stabilire anche il gradino minimo di riferimento.

Facciamo un esempio per facilitare la comprensione.

Ipotizziamo di avere un interrupt ogni 10 ms. Ipotizziamo anche di avere un D/A da 12 bit, quindi 2047 punti per 10V (4096 -10v /+10v).

Ora ipotizza di voler accelerare da 0 alla massima velocità in 10": 10 s / 10 ms equivalgono a 1000 tics.

Dividi i punti del D/A per i tics totali: 2047 / 1000 = 2,047; in pratica ad ogni interrupts sommi 2,047 al tuo valore precedente.

Se usi la somma in real minimizzi la non linearità dovuta agli arrotondamenti.

Se la velocità da raggiungere è inferiore alla massima è sufficiente fare un confronto tra il valore da raggiungere ed il valore dopo la somma.

Link al commento
Condividi su altri siti

Dunque se ho ben capito il tuo ragionamento, questa cosa implica comunque che io imposti un tempo. Perchè se voglio accelerare da 0 a Vmax in 10secondi avrò un determinato gradino di velocità, mentre se aumento o diminuisco il tempo avrò rispettivamente una rampa piu lenta o piu veloce.

Quello che intendevo fare io però non era questo, cioè avevo in mente di impostare soltanto l'accelerazione in m/s^2 o mm/s^2 a seconda dei casi, e poi passargli il riferimento di velocità.

Forse non ero stato chiaro all'inizio su come intendevo impostarlo, o forse non ho capito la tua spiegazione

Grazie intanto per la tua risposta

Link al commento
Condividi su altri siti

Forse non ero stato chiaro all'inizio su come intendevo impostarlo,

Effettivamente..Anche perchè, usualmente, si imposta il tempo di rampa.

Comunque non cambia nulla. Al riferimento massimo corrisponderà comunque la velocità massima. Se tu passi come parametro l'accelerazione in m/s2 o in mm/s2, ricavi il tempo necessario per passare da 0 alla massima velocità.

Il metodo è sempre quello: alla fine devi conoscere il gradino di incremento di riferimento nel differenziale minimo di tempo. In altri termini devi calcolare il dv/dt che, guarda caso, è l'accelerazione.

Chiarisco con un esempio.

Hai una macchina la cui velocità massima corrisponde a 10 m/s a cui vuoi imporre un'acelerazione di 1 m/s2.

Dall'equazione del moto uniformemente acelerato hai:

vM = v0 + a * t ===> 10 = 0 + 1 * t ===> t = 10"

Ricavato t applichi quanto scritto prima.

Link al commento
Condividi su altri siti

Ok perfetto ora ci sono.

Grazie mille sei stato chiarissimo e gli esempi mi sono stati di aiuto.

Ora proverò a scrivere qualcosa di funzionante poi vi farò sapere come è andata.

Grazie ancora

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