Vai al contenuto
PLC Forum


314-2dp Con Posizionamento Dopo Asse Libero Sfc44 - ho un grattacapo che forse vi divertirà, ma mi serve una manina!


Alexander83

Messaggi consigliati

Buongiorno forumisti,

ho un bel quesito da farvi, sto facendo il programma di una macchina con asse rotante, alimentato da inverter ABB con profibus, encoder sull'albero motore HTL 24V pushpull sul primo ingresso veloce della mia CPU a 360 impulsi giro, collegato con segnali A B Z sui pin giusti della cpu 314-2DP.

Inoltre ovviamente c'è una fotocellula retro riflettiva che fa da zero.

Per pilotare il mio inverter ho la mia routine che funziona, alla quale passo scalando le mie word di velocità, direzione, ecc...

Ma, devo fare un POSIZIONAMENTO, per questo ho preso la cpu tecnologica.

Il fattaccio è il seguente, mentre vi scrivo ho il file A5E00105487-05 S7-300 CPU 31xC: Funzioni tecnologiche sotto mano, e vorrei usare la SFB44 per fare il posizionamento analogico.

Il problema fondamentale è che il mio inverter viene pilotato da un potenziometro, collegato anch'esso alla CPU in velocità, continuamente, cambiandone pure la direzione. SFB44 non supporta i cambi di velocità, anche perchè è un posizionamento.

Il posizionamento serve perchè mentre il mio asse è in moto orario o antiorario, l'operatore deve poter fermarlo in 2 punti precisi, IN CORSA, con opportuna rampa.

L'idea è questa: prendo la PAW che esce dalla SFB44 e la metto su uno switch software, assieme alla PEW del mio potenziometro: quando richiedo le posizioni, commuto sulla SFC44, quando ho la corsa normale commuto sulla mia pew.

Credo che correggetemi se sbaglio, posso farlo "fregando" la SFB44 mettendola in manuale, ingresso MODE_IN a 1. Primo problema: io vario la velocità con potenziometro, non ho trovato riferimenti che mi dicano se la mia velocità variabile, con la retroazione dell'encoder, mi produca l'errore nella SFB44.

Quando richiedo il posizionamento, commuto il MODE_IN a 4 o 5 e vado nel punto richiesto. Secondo problema: posso cambiare il MODE_IN da fermo, mi piacerebbe farlo facendo una rampa al momento. Posso farlo? Mi consigliate un modo?

Grazie a tutti per l'attenzione, se avete voglia rispondete! :thumb_yello:

Link al commento
Condividi su altri siti


Perchè non tifai una FC di posizionamento dedicata al tuo posizionatore? Non è difficile ne pesante, forse se è la prima volta che fai un posizionatore puoi avere qaulche problema, però una volta risolto ti ritrovi una funzione leggera, facilmente adattabile a diverse esigenze e che puoi dominare completamente al contrario delle funzioni di libreria che sono chiuse.

Se leggi qualche vecchia discussione in questa sezione trovi molte indicazioni sull'argomento "posizionatori"; c'è anche un capitolo dedicato sul mio tutorial sui controlli, però non è specifico per S7.

Link al commento
Condividi su altri siti

Beh in fondo hai ragione Livio, infatti l'idea era anche quella, volevo solo sfruttare il posizionamento di mamma Siemens praticamente solo per la sincronizzazione, però effettivamente ho pensato stanotte che una soluzione fatta in casa è meglio, grazie grazie.

Link al commento
Condividi su altri siti

Diciamo che di posizionamenti ne ho fatti con soluzioni fatte in casa e per pallettizzatori con assi LINEARI con capo e coda.

Non posso usare delle routine encoder classiche di quel tipo perchè a conteggio continuo impazziscono e inoltre sono fatte a "missioni", cioè imposto quota e velocità -> partenza azionamento -> arrivo al punto -> do ok missione effettuata.

Il problema, fondamentale a mio avviso, è che qui intanto non c'è una posizione da raggiungere (l'asse è rotante e sta andando per conto suo a velocità X), alla richiesta di cui sopra di fermata in uno dei due punti, la mia routine di posizionamento deve prendere al volo il valore dell'encoder, rallentare la rampa (quindi non fermare l'azionamento, dire posizione raggiunta, partire per un'altra missione), e arrivare in posizione voluta.

Detta così sembra anche semplice, eppure sembra più difficile.

Oppure è solo sabato e ho la testa in panne.... :huh:

Hai fatto qualcosa di simile Livio?

Link al commento
Condividi su altri siti

Non so, forse non ho capito bene io. Comunque provo a fare un'ipotesi e poi verifichiamo se è adatta altuo scopo.

Se non ho capito male l'asse è rotante, cioè ogni posizione si ripete ad ogni rivoluzione completa.

Per esemplificare meglio usiamo dei numeri. poniamo che il tuo encoder solidale all'asse rotante generi 1000 impulsi ad ogni rivoluzione completa dell'asse.

Sempre per facilitarci il compito poniamo che l'encoder disponga di un impulso di zero.

Lego questo impulso ad un ingresso veloce ad interruzione che al riconoscimento del fronte mi azzera il conteggio. Quindi ad ogni rivoluzione totalizzerò 1000 implusi e quindi il conteggio sarà azzerato in automatico. Se, durante una rivoluzione, s'inverte il senso di rotazione un onesto contatore avanti-indietro deconta sino al raggiungimento dello zero; raggiunta questa posizione l'impulso di zero azzerera comunque il conteggio. Continuando in questa direzione il conteggio sarà in complemento a 2, ovvero sarà un numero negativo. Se il contatore è, ad esempio, un 16 bits si avrà la sequenza: ......3, 2, 1, 0, FFFFh, FFFEh, FFFDh, etc., etc.. Rggiunto il valore FC18h l'impulso di zero azzere riportando il tutto al valore 0.

Basta memorizzarei tragurdi di rallentamento e fermata nelle due notazioni e comparare per entrambe.

Il riferimento di velocità per l'asse bisogna farlo passare comunque per il PLC. Se l'operatore deve, per comodità, impostare il riferimento a mezzo potenziometro è conveniente far leggere il valore al PLC e dare il riferimento corrispondente. Commutare da riferimento manuale a riferimento auomatico potrebbe creare grossi inconvenienti, specie se i due riferimenti differiscono abbondantemente.

All'atto della richiesta di fermata la funzione leggerà il valore del contatore, comparandolo con i traguradi impostati. Raggiunto il traguardo procederà a ridurre il riferimento secondo al rampa prevista. Ovviamente il segno del riferimento è dedotto dal formato del conteggio.

E' forse più lungo a spiegarsi che a farsi.

Link al commento
Condividi su altri siti

Un sistema che utilizzo spesso e che mi ha sempre dato buoni risultati, è il seguente:

- imposto la velocità massima da raggiungere durante il posizionamento

- calcolo quanto spazio mi serve per arrestarmi da quella velocità con la rampa desiderata

- se sono dentro questo spazio calcolo la velocità massima con la formula V = SQRT(2aS)

dove:

V = velocità

S = spazio (distanza dal traguardo)

a = accelerazione

La formula si ottiene, con pochi passaggi, da quella classica del moto uniformemente accelerato S = 0.5*a*t^2

- se la velocità attuale è inferiore alla velocità da raggiungere, incremento la velocità a step regolari

- se la velocità da raggiungere è inferiore alla velocità attuale, limito immediatamente la velocità attuale al valore della velocità da raggiungere, oppure applicando una rampa (utile nel caso di riduzioni brusche della velocità da raggiungere, dovute magari a cambio al volo di impostazioni), come nel caso dell'accelerazione, ma con una pendenza un po' più ripida di quella che ho impostato per la normale rampa di decelerazione.

In questo modo, se la decelerazione è dovuta al risultato del calcolo della velocità, la pendenza sarà quella impostata per la decelerazione.

Se invece mi trovo una riduzione di velocità a gradino, la rampa di decelerazione sarà un po' più ripida, ma pur sempre una rampa.

Basta poi aggiungere qualche altro piccolo controllo (tipo velocità minima e quote correttive per il punto di inizio della rampa e per il comando di stop) per ottenere un sistema che può essere strapazzato in tutti i modi, senza vincoli di dover interrompere un job in corso per poter cambiare un parametro.

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