Jump to content
PLC Forum


Calcolare Errore Di Inseguimento Pid - esiste una formula, anche empirica?


emanuele.croci
 Share

Recommended Posts

emanuele.croci

Ciao a tutti,

Devo realizzare una applicazione in albero elettrico piuttosto grossolano (mi vergogno persino a chiamarlo così, in quanto si tratta di avere un errore max intorno ai 4-5 mm con una velocità che si aggira sui 30 mm/s).

Lo farei con 2 motori AC, ciascuno pilotato da inverter vettoriale e dotato di encoder incrementale.

Controllo PID in cui lo slave insegue la posizione del master, implementato su PLC S7-300.

La mia sensazione è che, opportunamente tarato, andrà senza problemi ma.... è saggio fidarsi delle sensazioni?

Vorrei così sapere se qualcuno ha una formula (anche empirica) o un modello matematico per stimare in queste situazioni l'errore di inseguimento massimo.

Sono consapevole del fatto che la soluzione esatta del problema necessita di dati dettagliatissimi (normalmente non disponibili) sui PLC, inverter ecc... utilizzati e magari comporta la risoluzione di equazioni differenziali....

Quindi punto direttamente sulla formula empirica!

Qualcuno ha idee in merito?

Grazie e saluti,

Emanuele

Link to comment
Share on other sites


Livio Orsini

Se leggi il mio tutor sulle regolazioni, il link lo trovi in testa al forum comunque te lo copio: qui, troverai che il problema albero elettrico è stato trattato, in modo eminentemente pratico, ma abbastanza detagliato.

Poi, se la cosa ti può interesasre, posso dirti che anni fa ho ottenuto buoni risultati con un S7-214. Il lopp veniva chiuso oni 10 msec usando un interrupt sul timer.

L'errore di inseguimento teorico, molto teorico a transitorio esaurito, è pari a +/- 1impulso di encoder. Ti consiglio di non affidarti esclusivamente alla retroazione di PID, ma di impiegare anche il feed forward. Ti sconsiglio vivamente dall'usare il PID interno di Siemens.

Per quanto riguarda l'errore max dipende dalla dinamica del sistema e da...come hai ottimizzato il regolatore. Comunque ti posso garantire che, facendo le cose decenti, a regime dovresti avere e < 5-6 impulsi

Edited by Livio Orsini
Link to comment
Share on other sites

emanuele.croci

Ciao Livio,

Grazie per la risposta!

Mi ero già letto in passato alcune parti del tuo tutor, ma il cap.6.2 sugli alberi elettrici mi era sfuggito.

Sono d'accordo sull'uso del feed forward, pensavo di passare come f.f. allo slave l'uscita analogica di pilotaggio del master.

Perché consigli di non usare il PID Siemens? L'ho usato svariate volte in passato e mi pare OK (io uso solo CPU della serie 300, forse il PID è diverso da quello della serie 200).

Certo è vero che il PID Siemens è piuttosto lento e non credo di poterlo ciclare a meno di 50ms, cosa che corrisponde a circa 15 impulsi encoder alla velocità massima.

Pensi che in queste situazioni si possa restare entro l'errore di 5-6 impulsi ?

(cosa che per me è ottima, in quanto corrisponde circa a 0.5-0.6 mm); nota che, se taro bene l'inverter vettoriale, l'errore di velocità dovrebbe essere <1% già in anello aperto.

Ciao,

Emanuele

Link to comment
Share on other sites

Livio Orsini
Certo è vero che il PID Siemens è piuttosto lento e non credo di poterlo ciclare a meno di 50ms, cosa che corrisponde a circa 15 impulsi encoder alla velocità massima

Questa è una ragione del perchè non uso il PID Siemens; poi non lo uso perchè non ne condivido la filosofia e perchè ritengo che faccia uso di parecchi passaggi inutili.

Se guardi l'esempio di posizionatore con 214 allegato al tutor (retroazione da LVDT e chiusura dell'anello su una servovalvola) vedrai che tutto il regolatore viene richiamato ogni 10ms ed impiega meno 6 ms nel caso pessimo. Con una CPU della serie 300 nuova dovremmo stare su 1-2 ms.

Attenzione: puoi regolare anche a 100 ms ed ottenere una buona precisione a regime, se i tuoi azionamenti sono precisi e stabili. I problemi ce lo hai durante i transitori: accelerazioni, prese di carico, etc.. Più il compinamento è lento, minore sarù la banda passante del tuo sistema e quindi maggiore l'errore istantaneo.

Per il ff: se il rapporto tra i due assi è sempre 1:1, o molto vicino (1:1.05 p.e.) puoi usare direttamente il riferimento del master come riferimento dello slave a cui sommerai la correzzione. Altrimenti ti conviene generare un fieed forward che tiene conto del rapporto impostato. Se usi un feed forward errato ottieni un risultato peggiore di un regolatore con assenza di feed forward

Link to comment
Share on other sites

emanuele.croci

OK, è chiaro.

Mi sono letto il tuo codice pseudo C del cap. 3 e mi sembra semplice da implementare.

(non ho capito qual è l'esempio con CPU 214)

Non mi resta che provare per credere.

Ti ringrazio,

Ciao

Emanuele

Link to comment
Share on other sites

Livio Orsini

E' uno degli esempi allegati al tutior. Comunque la funzione in pseudo C è praticamente la copia e la base di tutti i miei PID.

Attenzione, come ho scritto nel tutor, potrebbero esserci degli errori, un paio li ho visto e/o me li hanno segnalati. Dovrebbero essere errori veniali ma potrebbero comporteare malfunzionamenti, tipo rest dell'integrale non voluto (è solo per fare un esempio)

Link to comment
Share on other sites

  • 2 weeks later...
emanuele.croci

Ciao,

un aggiornamento....

Ho provato a scrivere una FB basata sull'esempio in pseudo C del tutor.

L'ho prontamente battezzata "PID veloce", per dare un'idea del motivo che la faceva esistere.

Chiaramente scritta in AWL si è un po' "allungata" per la macchinosità dei confronti e le necessarie conversioni di formato numerico INT, DINT, REAL, ecc....

Comunque, alla fine era lunga 1/4 rispetto a quella della Siemens (300byte vs. 1200)

Ho provato ad inserire in un programma vuoto 10 chiamate al mio PID e 10 chiamate al PID Siemens e a caricarlo in una CPU 314C.

Risultato sorprendente!

Sia il mio PID che il Siemens ciclano a 5-6ms per 10 chiamate, cioè 0.5-0.6 ms a chiamata!

Non ho idea di come sia fatto dentro il PID Siemens, perché è protetto, ma a me sembra stupefacente, considerando che mi mancano un sacco di funzioni rispetto al Siemens (banda morta,ritardo,selettori vari...).

Qualcuno ha un'idea in merito?

Ciao, Emanuele

Link to comment
Share on other sites

Livio Orsini

Se vuoi misurare l'effettivo tempo di esecuzione di una funzione di un PLC devi agire nel modo seguente:

1 - Prima della chiamata della funzione oppure, se possipile è anche meglio, come prima operazione della funzione si setta un'uscita analogica direttamente ad un valore alto. Perchè un'uscita analogica? perchè è quella che ha meno ritardo.

2 - Al ritorno, o come ultima istruzione della funzione, si resetta direttamente a zero la medesima uscita.

3 - Con un oscilloscopio si misura il tempo di esecuzione della funzione.

Da ultimo tieni presente che le funzioni di sistema Siemens possono essere inserite ad un livello diverso delle funzioni scritte da un utente. Cioè tutte quelle operazioni di confronto e conversione che occupano un sacco di spazio in AWL, possono essere scrite in modo molto più ottimizzato da chi può accedere a livelli più bassi.

Link to comment
Share on other sites

  • 1 month later...
emanuele.croci

Aggiorno la situazione:

ho provato la macchina e, alle velocità che mi interessano, riesco a stare in un errore di +- 1 imp.encoder

alzando le velocità arrivo anche a 3-4 impulsi encoder di differenza, sempre molto buono.

Quando faccio l'arresto talvolta mi sale a 7-8 impulsi, comunque ottimo.

Questo con tempo ciclo OB35 di 20ms (potrei abbassare a 10ms...mi tengo un margine) e SENZA USARE la regolazione vettoriale dell'inverter (anche questa me la tengo di margine).

Dando allo slave il riferimento del master con una piccola variazione a compensare gli offset degli ingressi analogici e utilizzando il regolatore PID preso dall'esempio di Livio (potevo anche usare il Siemens, ma il fatto di poterlo modificare mi da più sicurezza).

Questo è quanto!

Grazie e saluti, Emanuele

Link to comment
Share on other sites

Livio Orsini

Fa piacere sapere se e come sono stati risolti i problemi, il tuo, caro Emanuele, è stap un ottimo comportamento.

Se posso permettermi un ultima osservazione, ti consiglierei l'uso del vetoriale se devi lavorare sotto i 5 Hz.

Per quanto riguarda il tempo di campionamento 20ms potrebbero essere sufficienti

Link to comment
Share on other sites

emanuele.croci

Ciao Livio,

Grazie a te per l'aiuto!

Avrò modo di approfondire gli altri consigli, tra un paio di settimane andrò all'estero per la relativa messa in servizio.

Grazie e Ciao,

Emanuele

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...