Vai al contenuto
PLC Forum


Ottimizzazione PID


Project75

Messaggi consigliati

Buona sera, qualcuno mi potrebbe  suggerire un modo per poter ottimizzare al meglio un PID? L'ottimizzazione iniziale e  quella finale di siemens è da prendere in considerazione? O è meglio ottimizzare manualmente? Insomma vorrei, sempre gentilmente e per cortesia, una guida per ottimizzare al meglio, anche un link. Grazie mille. 

Link al commento
Condividi su altri siti


Purtroppo attualmente, causa noto incendio, non sono disponibili i files in didattica. Vedo di recuperare il mio tutorial sulle regolazioni dove si descrivono le regole generali di ottimizzazione di un PID.

Comunque detto in modo stringato, l'ottimizzazione di un PID si sviluppa in 3 fasi principali.

  1. Si escludono le parti integrale e derivativo; si parte con un proporzionale basso. Si da un gradino di riferimento di circa il 10% e si osserva il comportamento dell'uscita. Si incrementa gradualmente il guadagno sino a che la risposta inizia ad essere instabile. Si diminuice leggermente il guadagno.
  2. Si parte con un tempo di integrazione lungo, si ripetono le operazioni del punto 1 riducendo progressivamente il tempo di integrazione.
  3. Si inserisce un guadagno derivativo piccolo, si ripetono le operazioni del punto 1 aumentando progressivamente il peso del derivativo.

 

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti

8 ore fa, Livio Orsini scrisse:

Si da un gradino di riferimento di circa il 10% e si osserva il comportamento dell'uscita.

Il 10% del set_point?

Link al commento
Condividi su altri siti

2 minuti fa, Project75 scrisse:

Il 10% del set_point?

 

No, si deve usare un gradino di riferimento il cui valore corrisponde a circa il 10% del valore massimo del riferimento.

Esempio se il riferimento varia tra 0 e 10V si da un gradino di 1V.

Link al commento
Condividi su altri siti

31 minuti fa, Livio Orsini scrisse:

 

No, si deve usare un gradino di riferimento il cui valore corrisponde a circa il 10% del valore massimo del riferimento.

Esempio se il riferimento varia tra 0 e 10V si da un gradino di 1V.

Quindi se 0v=0 litri e 10v=1000 litri, devo impostare il set_point a 100 litri?

Link al commento
Condividi su altri siti

 

41 minuti fa, Project75 scrisse:

Quindi se 0v=0 litri e 10v=1000 litri, devo impostare il set_point a 100 litri?

 

Se quello è il tuo valore di riferimento, si.

Tieni presente che 10% è un dato puramente indicativo; la filosofia di ottimizzazzione è basata sulla risposta al gradino. Si usa, generalmente un gradino pari al 10% del riferimento per comodità. Si potrebbe anche usare una variazione a gradino della reazione, oppure sovrapporre un gradino di variazione ad un riferimento costante.

Il gradino può anche essere di altra entità. La cosa veramente importante è che si applichi una variazione a gradino. L'ottimizzazione ideale media è quella la cui risposta ha un poco di sovra e sotto elongazione, ovvero il fattore di smorzamento "xsi" è pari a 0.707. Questo è il miglior compromesso tra stabilità e velocità di risposta.

Un valore di "xsi" maggiore, diminuisce le oscillazioni, ma rallenta la risposta; viceversa diminuendo il fattore di smorzamento la risposta è più rapida ma si hanno molte più oscillazioni.

 

PID - Cui Prodest -

 

Questo è il diagramma di una risposta al gradino din un regolatore PID con fattore di smorzamento di 0.707

Questo è il mio tutotorial sulle regolazioni, leggilo così ti fai un'idea di cosa è un regolatore PID

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti

Grazie mille Livio. Ma l'ottimizzazione iniziale e finale che ti permette di fare siemens, va bene o no? Perché tanti la sconsigliano?

Link al commento
Condividi su altri siti

11 ore fa, Project75 scrisse:

siemens, va bene o no?

 

Questo non lo so, non ho mai usato i reglatori Siemens; anche con i PLC Siemens ho sempre ustato i miei

Link al commento
Condividi su altri siti

1 ora fa, Livio Orsini scrisse:

 

Questo non lo so, non ho mai usato i reglatori Siemens; anche con i PLC Siemens ho sempre ustato i miei

Suppongo blocchi artigianali fatti da te, giusto? ......

Link al commento
Condividi su altri siti

10 minuti fa, Project75 scrisse:

Suppongo blocchi artigianali fatti da te, giusto? ...

 

Cosa intendi per "artigianali"?

 

Senza alcuna falsa modestia i miei regolatori sono ottimi regolatori, professionali, studiati e progettati secondo quanto previsto dalla teoria della regolazione, ottimizzati in funzione del tipo di processo da controllare.

I regolatori di libreria, salvo casi particolari, sono progettati per impieghi generali, quindi con prestazioni che, in alcuni casi, non sono ottimali.

Link al commento
Condividi su altri siti

il 19/3/2021 at 08:50 , Livio Orsini scrisse:

i miei regolatori sono ottimi regolatori, professionali, studiati e progettati secondo quanto previsto dalla teoria della regolazione

Di questo sono sicuro, ho detto artigianali in quanto alcuni dicono di aver progettato  dei blocchi con le stesse funzioni dei pid siemens, proprio perché con quest'ultimi non si trovavano bene.

Link al commento
Condividi su altri siti

se vuoi puoi guardare un P.I. che ho scrittoio anni fa. Ho aggiunto anche la parte derivativa che se ti da fastidio la togli.

E' previsto un duty cycle, uscita con Relè statico ed analogica.

Guardalo e studialo, l'avevo scritto per S7-300, con pochi accorgimenti lo puoi riportare in TIA Portal.

FUNCTION_BLOCK FB80           // Digital regulator P.I.D Written by Walter P - Milan - Italy  05/06/2009

VAR_INPUT
Set_Point:REAL ;               // Set point value 
Feedback:REAL ;                // Feedback value process 
Kp:REAL;                       // K Proportional gain 
Ki:REAL;                       // K Integral gain 
Kd:REAL;                       // K Derivative gain 
Max_Analog:REAL;               // Maximum value for analog output 
Max_Time_Cycle:REAL;           // Maximum time cycle for PWM digital output (milliseconds)
Scan_Time:REAL;                // Scanning time of the plc 
Time_Sample:REAL;              // Time sample in OB35
Enable:BOOL;                   // Enable PWM digital P.I.D.
Reset:BOOL;                    // Reset regulator 
                               // Call this function in OB35 every 100-150 mS. Temperature regulation is fine.

END_VAR

LABEL
salto;
end_label    
    
VAR_IN_OUT

END_VAR

VAR_OUTPUT
Out_Analog_Reg:REAL ;           // Output analog regulation 
Duty_Cycle_Perc:REAL;           // Duty cycle On percentage
Wave_On_PWM:BOOL;               // Output high wave On of digital PWM 
Wave_Off_PWM:BOOL;              // Output low wave On of digital PWM 


END_VAR

VAR_TEMP
  
END_VAR

VAR
    
Error:REAL ;                   // Error for each scan 
I_Ist:REAL;                    // Istant
I:REAL ;                       // Integral memory 
D:REAL;                        // DErivative value
P:REAL;                        // Proportional component 
Last_Error:REAL;               // Error of previous scan
Accu_Timer:REAL;               // Timer Accumulator for the duty cycle PWM 
Thr_Wave_On:REAL;              // Threshold for the wave ON
Thr_Wave_Off:REAL;              // Threshold for the wave OFF
Wave_On:BOOL;                  // Wave On  
Wave_Off:BOOL;                 // Wave Off  
  
END_VAR
 
 
 
             BEGIN  
             
              Error:=Set_Point - Feedback ;
              
              P:=Error * Kp * 1000.0 ;
              
              I_Ist:=Error * Ki;
              
              I:=I + I_Ist ;
              
              IF I <= 0.0 THEN  I:=0.0; END_IF;
              
              IF I >= Max_Analog*0.8 THEN I:=Max_Analog*0.8; END_IF ;
			  
			  D:= (Error - Last_Error) * Kd;
			  
			  Last_Error:=Error;
              
              IF Enable=true THEN 
                  Out_Analog_Reg:=P + I + D;
              END_IF;
              
              IF Reset THEN 
                 
                 P:=0.0;
                 I:=0.0;
                 I_Ist:=0.0;
				 D:=0.0;
                 Out_Analog_Reg:=0.0;
                 Wave_On:=false;
                 Wave_Off:=false;
                 Accu_Timer:=0.0;

                 
              END_IF;             
                  
              IF Out_Analog_Reg >= Max_Analog THEN  Out_Analog_Reg:=Max_Analog;END_IF;    IF Out_Analog_Reg <= 0.0 THEN  Out_Analog_Reg:=0.0; END_IF;
              
              
              
              // STATE OF ENDED MACHINE TO GENERATE THE WAVE SQUARED ON AND OFF OF THE PWM 

 
               Thr_Wave_On:= (Max_Time_Cycle / Max_Analog) *  Out_Analog_Reg;   
               
               Thr_Wave_Off:=Max_Analog - Thr_Wave_On;
                    
              
              IF  Accu_Timer=0.0 AND Enable THEN 
              
                 Wave_On:=true;
                 Wave_Off:=false;
              
              END_IF;
            
              
              IF Wave_On=true THEN 
                
                        Accu_Timer:=Accu_Timer +  Time_Sample;
                        Duty_Cycle_Perc:=(Thr_Wave_On / Max_Time_Cycle) * 100.0;
                        
                        IF Accu_Timer >= Thr_Wave_On THEN 
                            
                            Wave_On:=false;
                            Wave_Off:=true;

                        END_IF;    
                
              END_IF;  
            
            
             IF Wave_Off=true THEN 
                
                         Accu_Timer:=Accu_Timer +  Time_Sample;
         
                        IF Accu_Timer >= Max_Time_Cycle THEN 
                            
                            Wave_Off:=false;
                            Accu_Timer:=0.0;
                            GOTO salto ;
                        END_IF;    
                
              END_IF;  


              
                           
              salto:  
              
              Wave_On_PWM:= Wave_On AND Thr_Wave_On>= 1000.0;
              Wave_Off_PWM:=Wave_Off ;
                          
                 
  ;
END_FUNCTION_BLOCK

 

Link al commento
Condividi su altri siti

2 ore fa, walterword scrisse:

se vuoi puoi guardare un P.I. che ho scrittoio anni fa. Ho aggiunto anche la parte derivativa che se ti da fastidio la togli.

E' previsto un duty cycle, uscita con Relè statico ed analogica.

Guardalo e studialo, l'avevo scritto per S7-300, con pochi accorgimenti lo puoi riportare in TIA Portal.

 

Purtroppo non uso SCL, mi verrebbe un po difficile adattare a tia portal,  proverò. Una domanda....  quindi è meglio crearsi da se un pid per avere una buona un'ottimizzazione ?

Modificato: da Project75
Link al commento
Condividi su altri siti

23 minuti fa, Project75 scrisse:

quindi è meglio crearsi da se un pid per avere una buona un'ottimizzazione ?

 

Premessa: per progettare un regolatore è indispensabile dominare bene il problema ed avere nuone basi teoriche.

 

L'uso dei regolatori di libreria può consentire dei risultati ottimi in circa il 75% delle applicazioni; se ci si accontenta di risultato buoni la percentule può arrivare anche al 90%.

 

Però tutto è subordinato ad una buona ottimizzazione del regolatore stesso.

Per poter ottimizzare bene il regolatore bisogna avere un minimo di conoscenza delle problematiche di regolazione e controllo. Inoltre è indispensabile conoscere bene il regolatore ch si andrà ad usare.

Per questo motivo è indispensabile studiarsi bne ed approfonditamente il manuale.

 

Puoi prendere il miglior regolatore possibile, ma se non sai cosa stai facendo e come va usato ed ottimizzato i risultati saranno sempre scadenti.

Purtroppo non esistono scorciatoie, per poter fare certi lavori bisogna imparare. Dal forum si possono ottenere consigli, ma il grosso del lavoro devi farlo tu.

 

Link al commento
Condividi su altri siti

Niente è meglio di quello che si prova sulla propria pelle.

E' chiaro che devi studiare la teoria etc etc etc 

Se poi non capisci un linguaggio strutturato vicino al linguaggio dell'uomo allora......hai ancora tanto da capire e studiare.

Per adattarlo al TIa Portal non devi fare altro che dichiarare le variabili nella tendina piuttosto che nel file.

Per il codice copi e incolli e guardi cosa succede.

Questo è un approccio vero e reale visto che tutti i giorni sei qua a chiedere cose di qualsiasi tipo....

Comunque il codice è li sopra a disposizione di chiunque.

ciao

Modificato: da walterword
Link al commento
Condividi su altri siti

1 ora fa, walterword scrisse:

Se poi non capisci un linguaggio strutturato vicino al linguaggio dell'uomo allora......hai ancora tanto da capire e studiare.

Infatti ho ancora tanto da imparare, se mai si inizia mai si arriva.  Grazie mille a tutti 

 

1 ora fa, walterword scrisse:

Per adattarlo al TIa Portal non devi fare altro che dichiarare le variabili nella tendina piuttosto che nel file

Dal momento che non capisco questo linguaggio, potresti spiegarmi più dettagliatamente? Grazie ancora

Link al commento
Condividi su altri siti

14 ore fa, Project75 scrisse:

quindi è meglio crearsi da se un pid per avere una buona un'ottimizzazione ?

I PID di libreria Siemens funzionano benissimo per tutte le comuni regolazioni.
Il PID è un algoritmo praticamente standard. Se tu imposti lo stesso calcolo su due calcolatrici, avrai sempre il medesimo risultato.
Se l'algoritmo usato è lo stesso, un PID Siemens ti darà lo stesso risultato di un qualsiasi altro PID.
Poi, se ci si crea un regolatore personalizzato, si possono apportare modifiche all'algoritmo standard, ma qui si entra in un campo piuttosto complesso.

Per sapere se ti conviene usare il PID Siemens o se hai bisogno di un regolatore specifico per il tuo caso, dovremmo almeno sapere cosa ci devi fare, con questo PID.

In ogni caso, se prima non impari ad usare un PID di libreria, come puoi pensare di costruirti un regolatore con caratteristiche specifiche?

Link al commento
Condividi su altri siti

31 minuti fa, batta scrisse:

I PID di libreria Siemens funzionano benissimo per tutte le comuni regolazioni.
Il PID è un algoritmo praticamente standard. Se tu imposti lo stesso calcolo su due calcolatrici, avrai sempre il medesimo risultato.
Se l'algoritmo usato è lo stesso, un PID Siemens ti darà lo stesso risultato di un qualsiasi altro PID.
Poi, se ci si crea un regolatore personalizzato, si possono apportare modifiche all'algoritmo standard, ma qui si entra in un campo piuttosto complesso.

Per sapere se ti conviene usare il PID Siemens o se hai bisogno di un regolatore specifico per il tuo caso, dovremmo almeno sapere cosa ci devi fare, con questo PID.

In ogni caso, se prima non impari ad usare un PID di libreria, come puoi pensare di costruirti un regolatore con caratteristiche specifiche?

Grazie batta, ne dico una, ho da regolare una Valvola modulante a 1 metro cubo l'ora, misuratore di portata con range 0/50 metro cubo.

Link al commento
Condividi su altri siti

37 minuti fa, Project75 scrisse:

Grazie batta, ne dico una, ho da regolare una Valvola modulante a 1 metro cubo l'ora, misuratore di portata con range 0/50 metro cubo

 

Detto così ... non da alcuna indicazione.

Potrebbe funzionare bene con un PID scolastico come potrebbe essere necessario un regolatore sofisticatissimo. Dipende dall'intero processo, dalle precisioni richieste e dai tempi di risposta necessari

 

Comunque concordo con quantoscive Batta. Prima dovresti almeno conoscere gli elementi fondamentali dellaregolazione, poi conoscere abbastanza bene come usare il regolatore di libreria. Dopo, se i risultati non sono sufficienti, potresti pensare a farti un tuo regolatore specifico.

 

1 ora fa, batta scrisse:

un PID Siemens ti darà lo stesso risultato di un qualsiasi altro PID.

 

Su questo sono d'accordo solo in parte. Diciamo, tanto per dare delle indicazioni, che nel 70% delle applicazioni potrebbe anche essere così, nell'altro 30% un regolatore studiato ad hoc darà prestazioni migliori in precisione e velocità di risposta.

Link al commento
Condividi su altri siti

Si certo ho usato anche io FB41 e compagnia bella.

Funzionano senza problemi.

Con il vecchio 200 i PID erano ancora più veloci e semplici del 300/400

Facevo riscaldamenti e raffreddamenti , peccato che i progettisti del sistema mettevano la termocoppia sul tubo di mandata acqua calda invece di metterlo sul corpo da riscaldare. In questo la regolazione va a farsi benedire, dopo qualche settimana l'avevano capita. 

Modificato: da walterword
Link al commento
Condividi su altri siti

Adelino Rossi
Quote

ho da regolare una Valvola modulante a 1 metro cubo l'ora, misuratore di portata con range 0/50 metro cubo.

Senza entrare nel merito dei pid, anche la valvola è dimensionata per un campo 0-50mc?

Hai l'impianto per 50mc e lo vuoi regolare pid a 1mc?  

 

Link al commento
Condividi su altri siti

Praticamente e un impianto di depurazione, l'acqua, con un unico tubo,  per caduta, deva andare in due vasche, in una deve andare 1 metro cubo la restante parte, 9 metri cubi, nell'altra.

Link al commento
Condividi su altri siti

applicazione che rientra nel dominio dei dosaggi.

Ti basta lavorare bene con il proporzionale seguendo le specifiche di Clint e poi lavorare sul integrale inteso come memoria etc

I parametri dipendono dalla distanza che c'e' tra la valvola di immissione acqua e le vasche.

L'integrale ti permette di chiudere in anticipo prima che la quantità sia superiore o inferiore , devi fare delle prove reali per impostare bene  i parametri.

Evidentemente devi avere un feedback sui livelli delle due vasche o tanks che essi siano.

Questo lo ottieni con sensori di livello analogici opportunamente scalati e normalizzati per quelli che sono i parametri di SetPoint etc

Modificato: da walterword
Link al commento
Condividi su altri siti

Ciao Walterword

ho studiato il tuo PID, volevo farti un paio di domande se permetti.

1) Perchè nel proporzionale moltiplichi per 1000?

2)L'utilizzo di questo PID va bene per la regolazione delle temperarture?

3)Può andare bene in base alla tua esperienza per la regolazione in velocità (NON posizione) di un motore?

 

grazie

Link al commento
Condividi su altri siti

il pid che ho scritto è nato proprio per temperature che venivano gestite da termoregolatori commerciali, fori nel quadro etc.

Per la temperatura spacca il decimo.

Moltiplico per 1000 perchè inserisco un proporzionale in ordine di grandezza basso , tipo 1.7 , 2.5

Per portarlo in range dei 27000 e rotti  o 16648 lo moltiplico per 1000

Modificato: da walterword
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...