Vai al contenuto
PLC Forum


Rampe Lineari E Non Lineari


attiliovolpe

Messaggi consigliati

Buongiorno, anche oggi ho qualcosa da chiedere, (veramente avrei tutti i giorni qualcosa da chiedere....).

Supponiamo che un uscita analogica 0-10 volt gestisca col suo segnale la regolazione di una rampa di velocità, per esempio di un azionamento;

disponendo come strumento di comando un manipolatore, joystick, con x posizioni per x velocità, per esempio 4 velocità, so come dire al software gi generare il valore di uscita per ogni singola velocità, quindi per ogni contatto del manipolatore che si chiude, avremmo in uscita nel caso delle 4 velocità 0V per la posizione di 0, 2,5V per contatto 1 chiuso, 5V per per contatti 1 & 2 chiusi, 7,5V per contatti 1 & 2 & 3 chiusi e 10V per contatti 1 & 2 & 3 & 4 chiusi, e quindi le rispettive 4 velocità in Hz o rpm impostate sull'azionemento per ogni valore di tensione.

La gestione delle velocità, di solito la faccio direttamente dall'azionamento, gestione completamente elettromeccanica, e la combinazione degli ingressi digitali DI di bordo, chiusi o aperti, corrisponde alle varie velocità impostate e secondo le rampe di accelerazione che di solito nelle mie applicazioni (carriponte) sono lineari.

La prima domanda è: nella gestione da PLC come potrebbe essere implementata la rampa di accelerazione? Ritornanodo all'esempio configurazione di cui sopra, come faccio a dire al SW di passare da una velocità all'altra secondo una rampa e non "a step" secondo la combinazione dei contatti del joystick?

La seconda domanda è: volendo invece impostare una rampa non lineare (a bordo dell'azionamento so come fare, il quesito riguarda la gestione da PLC), per esempio ad "S" o ad "U", come faccio a dirlo al SW?

So che l'argomento è abbastanza complesso, so che magari occorre scrivere le routine in SCL, il compilatore SCL è installato sul mio PC, mi piacerebbe capire l'argomento e magari vedere qualche routine di esempio per capire come implementare questo tipo di configurazioni e i rispettivi calcoli nel SW.

Grazie in anticipo per le eventuali risposte.

PS: l'argomento nasce dal fatto che il cliente attuale mi chiede di implementare il "soft starting" dei motori perchè secondo lui allungherebbe la vita delle parti meccaniche quali riduttori, giunti, ecc.

Avendo già delle rampe abbastanza lunghe, quasi 8s per uno span del ponte di circa 35 metri, se tocco ancora le rampe dopo mi contestano la riduzione della performance delle gru che potrebbe intaccare la produzione. Parlo di una grande acciaieria negli Emirati Arabi e le gru in oggetto caricano il forno di preriscaldo a monte del laminatoio e svuotano l'area a valle dell'impianto portando il prodotto a magazzino o direttamente nell area di carico camion per la spedizione.

Tre di queste gru hanno a bordo il PLC (S7), le altre tre sono diverse e completamente "elettromeccaniche"

Link al commento
Condividi su altri siti


Premessa.

Questo è un argomento generale che prescinde dalla specificità del PLC usato se non nei particolari dell'implementazione.

La generazione di una rampa lineare non è altro che un integrazione nel tempo di un differenziale di velocità.

I limiti sono essenzialmente 2: il minimo differenziale di tempo ed il minimo differenziale di velocità.

Nel caso di rampe analogiche il differenziale minimo di velocità è dato dalla risoluzione minima del D/A.

Per fare un ragionamento più generale possibile facciamo un esempio che prescinda dalle scalature tipiche dei PLC Siemens, scalature che sono spiegate molto bene da Batta in una precedente discussione.

Ammettiamo di avere 10 V suddivisti in 4095 passi, ovvere un classico D/A da 12 bits più segno.

Ora è necessario conoscere il minimo differenziale di tempo ammissibile con il PLC in uso.

Questo dipende dal tipo di CPU usata e dalla applicazione. Normalmente, con le attuali prestazioni, interruzioni di 10 ms sono compatibili con il 99.9% dei PLC e delle applicazioni.

Con questi 2 parametri si determina la rampa più veloce con il massimo della risoluzione.

Con i dati di esempio si passerebbe da 0 al massimo della velocità in 40.95 secondi. Se la mia applicazione richiede una rampa più veloce, e non posso ridurre il differenziale di tempo, dovrò per forza di cose diminuirne la risoluzione, cioè quantizzare più discretamente la velocità.

Se ad esempio la rampa richiesta prevede un tempo di accelerazione massimo di 5", non potendo diminuire il differenziale di tempo, dovrò dare un differenziale di velocità pari a 8 conuts di D/A (19.5 mV a passo).

Nella pratica, se si vuole un tempo preciso, si genera un interrupt a tempo (OB35) di 10 ms; ad ogni interruzione si somma all'attuale valore del D/A un valore corrispondente al differenziale di velocità calcolato. Nel caso in esempio si sommerebbe 8 counts, ovvero la sequenza del D/A sarebbe 0, 8, 16, 28,........4082, 4088, 4096.

Nel caso in esame si notano 2 particolarità.

Il valore finale è pari a 4096, che eccede il limite di 4095, da questo si deduce che è sempre necesario effettuare ad ogni somma un confronto con il valore limite onde evitare fenomeni spiacevoli come il passaggio istantaneo dal massimo positivo al massimo negativo.

Il numero dei passi effettuati è pari a 512 in luogo dei 500 necessari per ottenere i 5" previsti, questo è dovuto al necessario troncamento dei decimali. Se si necessita di maggior precisione di tempo si deve effetture l'ìntegrazione in real, oppure prevedere ogni tot passi un passo maggiore di un'unità.

Nel caso di rampa negativa, ovvero di decelerazione, il conteggio si effettuerà sottraento il differenziale di velocità dal numero massimo di passi del D/A.

E' evidente che posso fermare la rampa a qualsiasi valore di velocità, è sufficiente che abbia un parametro corrispondente al massimo valore di velocità richiesto.

Se dovessi generare una rampa non lineare la procedura è simile. La variante consiste nell'adottare un differenziale di velocità non costante.

Per prima cosa è necessario stabilire il tipo di rampa che si deve adottare.

Nelle macchine utensili, ad esempio, son molto usate le rampe paraboliche. In altri termini la rampa non viene generata in base ad un'eqauzione della retta, come nel caso precedente, ma in base ad un'eqauzione della parabola.

Nei casi come la tua applicazione si preferisce, solitamente, usare una rampa ad "S", ovvero una rampa lineare raccordata nel tratto iniziale e finale da 2 tratti di parabola, oppure da 2 raccordi esponenziali.

Partendo dall'esempio precedente, per un tempo di accelerazione massimo di circa 5" si potrebbe ipotizzare una maggior pendenza del tratto lineare, ad esempio un differenziale pari a 16 counts, con un tratto iniziale esponenziale quadratico: 1, 2, 4, 8, 16, 32, 48, 64, .....

Questo per esemplificare con numeri interi però, a mio giudizio, è più utile usare numeri reali per poter avere una migliore risoluzione dei differenziali.

Se non ricordo male, nella sezione didattica dovrebbe esserci un'esempio di funzione per geenrare uan rampa ad "S".

Spero che questo primo messaggio ti abbia dato qualche spunto su cui ragionare ed, eventualnente, porre domande su questioni specifiche.

Link al commento
Condividi su altri siti

zanellatofabio

Se non ti manca il coraggio, vai sul sito oscat.de e cerca la documentazione oscat-basic-docu-english.pdf .

Troverai la funzione SRAMP che serve appunto per generare rampe ad esse .

La libreria oscat è scaricabile sia per codesys che per s7 .

Ciao

Link al commento
Condividi su altri siti

Grazie per la dritta, intanto chia ha voglia continuasse a rispondere, magari le cose "spiegate" e non solo copiate son meglio.

Grazie Livio.

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