Discussione:Controllo PID
![]() | Questa voce rientra tra gli argomenti trattati dal progetto tematico sottoindicato. Puoi consultare le discussioni in corso, aprirne una nuova o segnalarne una avviata qui. | ||||
|
![]() | La voce è stata monitorata per definirne lo stato e aiutarne lo sviluppo. Ha ottenuto una valutazione di livello sufficiente (gennaio 2009). | |||||||||
| ||||||||||
Monitoraggio effettuato nel gennaio 2009 |
Pseudocodice
Non so per quale motivo è stata eliminata l'unica cosa utile (presente invece in wikieng) della pagina, l'implementazione pratica del PID (ovviamente non si possono calcolare integrali e derivate algebriche di valori campionati (di funzioni sconosciute). E non è possibile per la maggior parte dei PLC fare un analisi in frequenza. Naturalmente è utile per capire il perchè il controllore PID è fatto in questo modo una base matematica.
Scusa l'ignoranza, ma che vuol dire "pseudocodice"? Che nono corrisponde a nessun linguaggio di programmazione reale? In questo caso penso sia molto più utile avere un'implementazione scritta in qualche linguaggio di programmazione specifico, così almeno si può provare. Ad esempio si potrebbe inserire un esempio con il linguaggio utilizzato in Matlab (Simulink), che viene spesso utilizzato in ambito ingegneristico.--Aushulz (msg) 20:24, 9 ott 2009 (CEST)- Come non detto. Leggendo la discussione al Bar di matematica ho capito che lo pseudocodice è meglio di altri linguaggi di programmazione. --Aushulz (msg) 23:53, 9 ott 2009 (CEST)
- In effetti non avevo letto quella decisione, mi pare coerente con lo spirito di wikipedia. Il codice l'ho preso da wikipedia eng. Ciskje (msg)
- Come non detto. Leggendo la discussione al Bar di matematica ho capito che lo pseudocodice è meglio di altri linguaggi di programmazione. --Aushulz (msg) 23:53, 9 ott 2009 (CEST)
Errori!
Quest'articolo è pieno di errori!!! --212.141.219.138 (msg) 15:18, 18 dic 2008 (CET)
- È una battuta? Se ti riferisci all'occorrenza della parola "errore" nella voce, sappi che si presenta solo 5 volte. Se pensi che ci siano errori grammaticali, puoi correggerli (io non ne trovo). Se ti riferisci alla wikificazione, accomodati pure, ogni miglioramento della voce è ben accetto. --Aushulz (msg) 15:44, 18 dic 2008 (CET)
- Intendo proprio errori nei concetti, anche gravi! Non ho ancora letto la voce interamente e al momento non ho tempo di correggerla, ma lo farò al più presto. Ho letto solo velocemente la sezione di "azione integrale", e ti assicuro che è sbagliata! Ad esempio:
- "L'azione integrale "sente" se c'è differenza tra i due valori di misura e set point. Se i due valori sono coincidenti, l'azione integrale è nulla. Se invece c'è differenza tra i due valori, l'azione integrale si manifesta..."
- oppure:
- "Appena i due valori coincideranno, l'azione integrale si annulla e la corsa dell'organo finale di regolazione cessa di variare per tale causa."
- Assolutamente no!! E' proporzionale all'integrale, non al valore istantaneo!! Se l'errore si annulla, non si annulla l'azione integrale!--212.141.219.138 (msg) 17:45, 18 dic 2008 (CET)
- Effettivamente c'erano ampi margini di miglioramento. Ho riscritto l'articolo cercando di renderlo più "enciclopedico", cioè più comprensibile ai profani. Se uno vuole tutti i dettagli la bibliografia è lì per quello. 193.175.53.21 (msg) 12:00, 3 lug 2009 (CEST)
- All'utente 193.175.53.21: hai ridotto drasticamente le dimensioni della voce. Non ho dato una lettura prima e dopo del tuo intervento, comunque se hai eliminato alcune parti per rendere la voce più chiara, puoi prendere in considerazione l'idea di scrivere le parti che hai tolto nelle voci più specifiche o creare nuove voci che contengano tali argomenti. --Aushulz (msg) 14:27, 3 lug 2009 (CEST)
Buongiorno, ho letto il codice, ma non capisco alcune cose e sono presenti degli errori concettuali oltre che di codifica: Innanzitutto il calcolo delle 3 grandezze deve avvenire contemporaneamente e sulla stessa base di tempo, altrimenti hai un sistema che è lentissimo (oltre che potenzialmente non funzionante): prendiamo il caso dell'integrale, solo per fare questa procedura passa 0,1s... ok finchè devi regolare la temperatura in una stanza, ma se hai qualcosa un attimo più veloce nei cambiamenti non ci stai più dietro. Fare un integrale su 20 acquisizioni (0,1s) e e poi fare il differenziale su 0,05s che senso ha? Bisogna usare la stessa base di tempo che è la base di variazione dell'errore (quindi dell'ingresso) Poi vengono determinati i valori del PID sulla base dell'acquisizione dell'A/D... ma la base di calcolo (l'ingresso del PID) è l'errore (differenza tra setpoit e valore misurato)! nell'integrale il discorso della "media mobile" (che di fatto non viene utilizzata, e non capisco nemmeno a cosa dovrebbe servire, visto che cambiare "a" significa solo di fatto cambiare il dx, ) non viene poi utilizzato, il dx è di fatto un termine costante, il delay dovrebbe essere pari al dx e non un numero puro, Ki non è inizializzato. Nella derivata... manca la derivata! è solo la differenza tra due valori successivi, bisogna dividere per il dx (che anche in questo caso è pari a quei 5ms del delay) Le funzioni prendono tutte "grandezza" in ingresso... e poi non la usano, così come la funzione errore, è scritta e non viene usata.
Ho dei seri dubbi che questo codice possa essere funzionante, se non per pura fortuna
correzioni nel codice per arduino
time, previoustime e interval è inutile identificarlo come float, anzi dopo poco tempo si azzererebbero per overflow, in genere le variabili contenti millis() vanno specificate come unsigned long
Collegamenti esterni modificati
Gentili utenti,
ho appena modificato 1 collegamento esterno sulla pagina Controllo PID. Per cortesia controllate la mia modifica. Se avete qualche domanda o se fosse necessario far sì che il bot ignori i link o l'intera pagina, date un'occhiata a queste FAQ. Ho effettuato le seguenti modifiche:
- Aggiunta del link all'archivio https://web.archive.org/web/20130202172939/http://www2.eie.ucr.ac.cr/~valfaro/docs/Ziegler%26Nichols.pdf per http://www2.eie.ucr.ac.cr/~valfaro/docs/Ziegler%26Nichols.pdf
Fate riferimento alle FAQ per informazioni su come correggere gli errori del bot.
Saluti.—InternetArchiveBot (Segnala un errore) 03:57, 14 mar 2019 (CET)
Codice
La prima parte in pseudo-codice è chiarissima, concisa e esente da errori.
Invece il codice presentato come esempio fa solo confusione. Questo codice si riferisce a una implementazione particolare, che risente pesantemente del contesto per cui è stata scritta. La misura della derivata viene fatta tra il campione attuale e tre campioni indietro nel tempo e questo è un trucco per diminuire il rumore di quantizzazione. Un trucco valido solo nel contesto del processore per cui è stato scritto il firmware e legato alla tempistica della particolare implementazione per cui è stato pensato.
Per me il codice presentato come esempio sarebbe da eliminare. Bisognerebbe piuttosto ampliare la sezione sui metodi di calcolo per i coefficienti Kp, Ki e Kd, che è il vero punto critico di questi algoritmi.
Se volete controllare le mie conoscenze, sono Livio, il creatore del Theremino System.
Saluti a tutti. Livio
Mi scuso se ho sbagliato il punto di intervento, non sono un esperto di questa enciclopedia. Eventualmente correggete il mio messaggio...— Questo commento senza la firma utente è stato inserito da 87.8.213.160 (discussioni · contributi).
- Per quanto riguarda lo pseudocodice, a tempo discreto quale è e deve essere, dt non dovrebbe essere usato nelle operazioni di calcolo.
- Circa l'implementazione per quel PIC un'implementazione reale non mi dispiace, però dovrebbero essere esplicitati i trucchetti, altrimenti passa l'idea che siano operazioni generiche. Se non ricordo male la velocità dell'ADC della 16F penso che il ritardo per approssimare la derivata sia pure troppo. --Vito (msg) 12:04, 2 giu 2019 (CEST)
Concordo appieno con Vituzzu e anche secondo me il ritardo per approssimare la derivata è troppo.
Inoltre c'è un grosso errore nei coefficienti del Metodo Ziegler–Nichols.
- Nella colonna Ki il valore della seconda riga "1,2 * Kp / Pu" dovrebbe invece essere "Kp * Pu / 1.2"
- E il valore della terza riga "2 * Kp / Pu" dovrebbe invece essere "Kp * Pu / 2"
Controllare in questa pagina : https://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method
Se non si fanno queste correzioni si calcola un valore di Ki notevolmente maggiore, che porta sicuramente il sistema in oscillazione.
Saluti Livio