Nesus Inserito: 15 febbraio 2013 Segnala Share Inserito: 15 febbraio 2013 Salve a tutti, sto rifacendo da capo un vecchio programma sviluppato su vecchi numalogic westinghouse in una bella stazione S7-300, solo che attualmente mi sto scontrando con i famigerati PID. Facendo un piccolo riassunto, in base a quanto ho capito e a come viene configurato il pid, lo si può far funzionare in maniera proporzionale, integrativa o derivativa , queste tre tipologie possono essere quindi combinate tra di loro. Viste singolarmente la tipologia proporzionale lavora su piccole variazione del punto di riferimento ( quindi banalmente posso pensare ad un sistema che controlla e corregge delle temperature applicate a metalli di grande massa che hanno variazioni molto lente nel tempo) invece per quanto riguarda la tipologia integrativa da quanto ho capito viene applicata in aggiunta alla precedente tipologia in quanto lavora bene sul problema dell'offset quindi variazioni repentine del punto di riferimento, ovvero corregge questo cambiamento evitando oscillazioni prolungate ed in conclusione per quanto riguarda la tipologia derivativa questa ha una funzione di controllo della velocità di variazione del regolante quindi penso "l'aggiustaggio" in un dato tempo dell'uscita. Detto questo non riesco ad adattare una caratteristica impostata nei vecchi PID ovvero come vedete nel doc1.pdf allegato ( il tabulato di parametrizzazione dei PID WH ) bene o male ho ritrovato le stesse config del CONT_C ( richiamato nell'OB32 da 1 sec) tranne che lo Neg/Pos Slew limit che a differenza siemens non so se possa essere correlato, lavorandolo con qualche formuletta, al time lag? Il time lag leggendo la guida del pic è solo ed esclusivamente applicato se si utilizza anche la componente derivativa nel pid? altrimenti è inutile settarlo? Nel tabulato non ho ben capito come tirano fuori quel 7 in quasi tutti i pic e 50 nel tic 46. inizialmente ho provato a fare una formula del tipo il Vmax (espresso in percentuale 100 ) / lo Slewlimit ed applicandolo al posto del timelag solo che viene attivato in tutti i PID anche quelli senza la componente derivativa e comunque viene fuori un numero che non è molto coerente :/ secondo voi quindi come potrei adattarlo alla config per i siemens? Qui di seguito vi incollo come ho impostato i vari pid in base ai tabulati. ( ho settato un valore standard di setpoint e di ingresso, giusto per testare i vari comportamenti con la funzione "messa in servizio" del tia portal variando a mano l'ingresso con uno strumento che genera 4-20ma) CALL CONT_C , "PID12" COM_RST :=FALSE MAN_ON :=FALSE PVPER_ON :=TRUE P_SEL :=TRUE I_SEL :=TRUE INT_HOLD :=FALSE I_ITL_ON :=FALSE D_SEL :=FALSE CYCLE :=T#1S SP_INT :=46.0 PV_IN := PV_PER :="P_pic_12" MAN := GAIN :=90.0 TI :=T#0MS TD := TM_LAG := DEADB_W :=10.0 LMN_HLM :=100.0 LMN_LLM :=0.0 PV_FAC :=1.0 PV_OFF :=0.0 LMN_FAC :=1.0 LMN_OFF :=0.0 I_ITLVAL := DISV := LMN :="Measurement".OUT_pic12 LMN_PER := QLMN_HLM := QLMN_LLM := LMN_P := LMN_I := LMN_D := PV := ER := [/code] [code] CALL CONT_C , "PID13" COM_RST :=FALSE MAN_ON :=FALSE PVPER_ON :=TRUE P_SEL :=TRUE I_SEL :=TRUE INT_HOLD :=FALSE I_ITL_ON :=FALSE D_SEL :=TRUE CYCLE :=T#1S SP_INT :=46.0 PV_IN := PV_PER :="P_pic_12" MAN := GAIN :=90.0 TI :=T#0MS TD :=T#0MS TM_LAG :=2 DEADB_W :=10.0 LMN_HLM :=100.0 LMN_LLM :=0.0 PV_FAC :=1.0 PV_OFF :=0.0 LMN_FAC :=1.0 LMN_OFF :=0.0 I_ITLVAL := DISV := LMN :="Measurement".OUT_pic13 LMN_PER := QLMN_HLM := QLMN_LLM := LMN_P := LMN_I := LMN_D := PV := ER := CALL CONT_C , "PID15" COM_RST :=FALSE MAN_ON :=FALSE PVPER_ON :=TRUE P_SEL :=TRUE I_SEL :=TRUE INT_HOLD :=FALSE I_ITL_ON :=FALSE D_SEL :=TRUE CYCLE :=T#5S SP_INT :=46.0 PV_IN := PV_PER :="P_pic_12" MAN := GAIN :=3.0 TI :=T#0MS TD :=T#0MS TM_LAG :=2 DEADB_W :=10.0 LMN_HLM :=100.0 LMN_LLM :=0.0 PV_FAC :=1.0 PV_OFF :=0.0 LMN_FAC :=1.0 LMN_OFF :=0.0 I_ITLVAL := DISV := LMN :="Measurement".OUT_pic15 LMN_PER := QLMN_HLM := QLMN_LLM := LMN_P := LMN_I := LMN_D := PV := ER := [/code] [code] CALL CONT_C , "PID18" COM_RST :=FALSE MAN_ON :=FALSE PVPER_ON :=TRUE P_SEL :=TRUE I_SEL :=TRUE INT_HOLD :=FALSE I_ITL_ON :=FALSE D_SEL :=TRUE CYCLE :=T#1S SP_INT :=46.0 PV_IN := PV_PER :="P_pic_12" MAN := GAIN :=0.1 TI := TD := TM_LAG := DEADB_W :=10.0 LMN_HLM :=100.0 LMN_LLM :=0.0 PV_FAC :=1.0 PV_OFF :=0.0 LMN_FAC :=1.0 LMN_OFF :=0.0 I_ITLVAL := DISV := LMN :="Measurement".OUT_pic18 LMN_PER := QLMN_HLM := QLMN_LLM := LMN_P := LMN_I := LMN_D := PV := ER := CALL CONT_C , "TIC40" COM_RST :=FALSE MAN_ON :=FALSE PVPER_ON :=TRUE P_SEL :=TRUE I_SEL :=TRUE INT_HOLD :=FALSE I_ITL_ON :=FALSE D_SEL :=FALSE CYCLE :=T#5S SP_INT :=46.0 PV_IN := PV_PER :="P_pic_12" MAN := GAIN :=3.0 TI :=1 TD := TM_LAG := DEADB_W :=10.0 LMN_HLM :=100.0 LMN_LLM :=0.0 PV_FAC :=1.0 PV_OFF :=0.0 LMN_FAC :=1.0 LMN_OFF :=0.0 I_ITLVAL := DISV := LMN := LMN_PER := QLMN_HLM := QLMN_LLM := LMN_P := LMN_I := LMN_D := PV := ER := [/code] [code] CALL CONT_C , "TIC46" COM_RST :=FALSE MAN_ON :=FALSE PVPER_ON :=TRUE P_SEL :=TRUE I_SEL :=FALSE INT_HOLD :=FALSE I_ITL_ON :=FALSE D_SEL :=FALSE CYCLE :=T#1S SP_INT :=46.0 PV_IN := PV_PER :="P_pic_12" MAN := GAIN :=50.0 TI := TD := TM_LAG := DEADB_W :=5.0 LMN_HLM :=100.0 LMN_LLM :=0.0 PV_FAC :=1.0 PV_OFF :=0.0 LMN_FAC :=1.0 LMN_OFF :=0.0 I_ITLVAL := DISV := LMN := LMN_PER := QLMN_HLM := QLMN_LLM := LMN_P := LMN_I := LMN_D := PV := ER := Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 16 febbraio 2013 Segnala Share Inserita: 16 febbraio 2013 Forse non hai ben chiaro cosa sia un regolatore PID, almeno deduco questo dalle tue parole; ti consiglio, nel caso, di documentarti bene, altrimenti rischi di non riuscire ad ottimizzare i parametri del PID di libreria, oltre a rischaire di configurarlo male. Se ti vuoi documentare in rete ci sono molti documenti a tutti i livelli; nella sezione didattica del forum trovi anche un mio tutorial sulle regolazioni che è impostato dal punto di vista pratico, con la teoria ridotta al minimo indispensabile. Comunque riassumendo. Azione proporzionale. Genera istantaneamente una correzione proporzionale all'errore ed al coefficiente di guadagno impostato. Se impostom, p.e., un guadagno di 2 un errore pari a 3 genrerà una correzione par a 6. Azione integrale. Genera una correzione che è la sommatoria nel tempo dell'errore istantaneo moltiplicato il fattore di correzione impostato. Iol tempo di integrazione corrisponde al tempo impiegato dall'azione integrale, ad eguagliare l'azione proporzionale ad errore costante. Serve ad annullare completamente l'errore. Infatti è anche detta "Reset". Azione derivativa. Genera una correzione proprozionale alla derivata dell'errore, quindi rafforza o diminuisce l'azione della correzione proporzionale. Il tempo di campinamento dovrai sceglierlo in modo che sia molto piccolo rispetto ai tempi di risposta della variabile da controllare. Se, ad esempio, controlli la velocità di un motore, il tempo di campionamento sarà dell'ordine dei millisecondi; se controlli una temperatura sarà dell'ordine dei secondi o più. PS NUMALOGIC evoca ricordi della mia gioventù, quandom alvoravo una grande azienda milanese, un nome storico della elettromeccanica italiana oramai scomparso. Link al commento Condividi su altri siti More sharing options...
batta Inserita: 16 febbraio 2013 Segnala Share Inserita: 16 febbraio 2013 Oltre a quanto detto da Livio sui PID in generale, vediamo cosa si può dire su come hai configurato la funzione PID di Siemens. 1) Hai collegato all'ingresso PV_PER l'ingresso analogico, ed hai lasciato i parametri PV_FAC e PV_OFF ai valori di default, rispettivamente 1.0 e 0.0. In questo modo il segnale 4-20 mA (0..27648) viene convertito in 0.0-100.0. Per capire se è corretto, dovrei sapere cosa c'è collegato sull'ingresso analogico. Visto che devi fare un controllo di temperatura, ci sono due modi normalmente usati per leggere la temperatura: collegamento diretto di RTD (o TC) a modulo per RTD (o per TC), oppure collegamento di RTD (o TC) a convertitore con uscita in tensione o in corrente. Nel caso di utilizzo di un convertitore, devi impostare i valori di PV_FAC e PV_OFF in modo da scalare correttamente il segnale. Se guardi il manuale in linea (schema a blocchi di CONT_C), vedi che l'ingresso PV_PER viene elaborato da CRP_IN che converte il segnale ±27648 in ±100.0%. Il segnale così convertito viene successivamente elaborato da PV_NORM, che effettua una normalizzazione utilizzando i parametri PV_FAC e PV_OFF. Lo scopo di queste conversioni è di far corrispondere il segnale analogico (0..27648 o ±27648) alla grandezza reale da misurare. Se per la lettura della temperatura utilizzi un trasduttore con segnale in tensione o in corrente, devi impostare PV-FAC e PV_OFF in modo che il segnale analogico 0..27648 venga convertito nella temperatura corrispondente. Esempio: trasduttore da RTD a 4..20 mA con campo da -50 °C a +200 °C. Come detto in precedenza, il segnale 4..20 mA (0..27648) viene convertito da CRP_IN in 0..100 %. Questo 0..100 % deve essere convertito in -50..+200 °C. Abbiamo quindi una escursione totale di 250 °C e un offset di -50 °C. Visto che la funzione PV_NORM esegue il calcolo: OUT = IN * PV_FAC + PV_OFF, dovresti impostare PV_FAC = 2.5 e PV_OFF = -50. Se invece per la lettura della temperatura utilizzi un modulo per RTD (o per TC), da questo modulo non esce un valore 0..27648, ma direttamente la lettura della temperatura in decimi di grado centigrado. In questo caso, collegare l'ingresso analogico all'ingresso PV_PER sarebbe sbagliato. Dovresti convertire la lettura in REAL, dividere per 10 (per avere il valore espresso in °C), collegare questa variabile all'ingresso PV_IN e impostare PVPER_ON = FALSE. 2) Lo stesso discorso fatto in ingresso per PV_FAC e PV_OFF vale, in uscita, per LMN_FAC e LMN_OFF. Per sapere se quello che hai fatto è corretto, dovrei sapere dove va a finire "Measurement".OUT_pic12. Nel tuo caso, otterrai un valore da 0 a 100%. Per pilotare un attuatore tramite uscita analogica, dovrai convertire questo 0..100 in 0..27648. Se vuoi comandare direttamente l'uscita analogica, la devi collegare a LMN_PER. 3) Con i parametri da te impostati (GAIN = 90 e TI = 0), questo PID non funzionerà come un PID ma come un controllo ON/OFF, o anche peggio. Abilitare il controllo integrale e impostare il tempo integrale = 0, è sbagliatissimo. Praticamente significherebbe dare un valore infinito alla componente integrale. Se questo non succede, è solo perché la funzione CONT_C non esegue la divisione per zero. Questi errori (guadagno esagerato e TI = 0) sono presenti anche nella configurazione dei vecchi regolatori. Per il guadagno, si spiega osservando che il PID lavora con valori ±32767, e non con valori normalizzati. Un errore di 1 °C comporterebbe una correzione proporzionale di 90. Ma si parla di 90 su 32767, ovvero una correzione dello 0.275 %. Anche ipotizzando che la temperatura sia in decimi di grado anziché in gradi, la correzione proporzionale per un errore di 1 °C sarebbe del 2.75%. Nel PID Siemens invece, con i limiti di uscita impostati tra 0 e 100 (come nel tuo caso), un errore di un grado comporterebbe una correzione del 90%. Per quanto riguarda invece il tempo integrale = 0, questo è sicuramente un valore errato anche per il vecchio regolatore. Molto probabilmente, l'integrale non veniva calcolato. Link al commento Condividi su altri siti More sharing options...
batta Inserita: 16 febbraio 2013 Segnala Share Inserita: 16 febbraio 2013 Il time lag leggendo la guida del pic è solo ed esclusivamente applicato se si utilizza anche la componente derivativa nel pid? altrimenti è inutile settarlo? Sì, serve solo per la derivata. Ho visto poi che dai tabulati della vecchia configurazione su alcuni regolatori c'è "Reverse Action Selected = 1". Se stai regolando una temperatura, un'azione diretta è per il riscaldamento, mentre un'azione inversa è per il raffreddamento. Nel PID Siemens, per ottenere un'azione inversa, devi impostare GAIN negativo. Link al commento Condividi su altri siti More sharing options...
Nesus Inserita: 16 febbraio 2013 Autore Segnala Share Inserita: 16 febbraio 2013 PS NUMALOGIC evoca ricordi della mia gioventù, quandom alvoravo una grande azienda milanese, un nome storico della elettromeccanica italiana oramai scomparso. Parli forse della breda? Comunque sia, pensa che da noi sono ancora installati e funzionanti da almeno 23 anni, 24h/24, 7 giorni su 7, circa 20 plc numalogic e diciamo che quelli più "critici" li sto rimpiazzando con gli s7, ma comunque devo dire che sono dei veri e propri carri armati solo ora dopo tutto questo tempo cominciano ad avere qualche problemino ed è difficile reperire i pezzi di ricambio visto che abbiam finito le scorte quindi rimpiazzandoli con gli s7 cannibalizziamo i pezzi in più Se capitate a Frascati ve lo faccio fare molto volentieri un giretto per gli impianti per farvi rivivere un pò di passato con questi cimeri ^^ Tornando ai pid innanzitutto grazie per le risposte mi avete chiarito molto sull'argomento ed ora ho molto materiale in più da approfondire e testare, ero arrivato nei test in una fase di stallo tanto per la cronaca sono 3 regolatori di pressione espressi in bar( rispettivamente max valore raggiunto 4-7-10 bar, 1 regolatore di pressione espresso in mmH2O (max 204 mmH2O), 2 temperature in °C ( essendo interne che misurano l'ambiente penso il loro range sia -117°C a +155°C ma devo verificare) i quali vanno a manovrare delle valvole regolabili di un circuito di azoto liquido. Ho visto poi che dai tabulati della vecchia configurazione su alcuni regolatori c'è "Reverse Action Selected = 1". Se stai regolando una temperatura, un'azione diretta è per il riscaldamento, mentre un'azione inversa è per il raffreddamento. Si PIC 13 e PIC 18 questi sono di pressione in ingresso a delle tanks una utilizzata come separatore di fase e l'altra come serbatoio di raccolta però dai disegni vedo che il flusso va in un solo senso, approfondirò comunque per capire il significato del reverse in questo pid che eventualmente potrebbe spiegare una pressione negativa?. 3) Con i parametri da te impostati (GAIN = 90 e TI = 0), questo PID non funzionerà come un PID ma come un controllo ON/OFF, o anche peggio. Abilitare il controllo integrale e impostare il tempo integrale = 0, è sbagliatissimo. Praticamente significherebbe dare un valore infinito alla componente integrale. Se questo non succede, è solo perché la funzione CONT_C non esegue la divisione per zero. Questi errori (guadagno esagerato e TI = 0) sono presenti anche nella configurazione dei vecchi regolatori. Per il guadagno, si spiega osservando che il PID lavora con valori ±32767, e non con valori normalizzati. Un errore di 1 °C comporterebbe una correzione proporzionale di 90. Ma si parla di 90 su 32767, ovvero una correzione dello 0.275 %. Anche ipotizzando che la temperatura sia in decimi di grado anziché in gradi, la correzione proporzionale per un errore di 1 °C sarebbe del 2.75%. Nel PID Siemens invece, con i limiti di uscita impostati tra 0 e 100 (come nel tuo caso), un errore di un grado comporterebbe una correzione del 90%. Per quanto riguarda invece il tempo integrale = 0, questo è sicuramente un valore errato anche per il vecchio regolatore. Molto probabilmente, l'integrale non veniva calcolato Si in effetti ON / OFF è proprio il comportamento che ho notato nella simulazione e sinceramente non so perchè hanno impostato quei parametri, spesso e volentieri hanno comunque utilizzato degli escamotage per ovviare a problemi sorti nel tempo. comunque per questi PID parliamo sempre di pressione tranne che nel pid dove il guadagno è a 50 che si parla probabilmente di una temperatura dove anche lo slew rate è sempre messo a 50 Citazione Il time lag leggendo la guida del pic è solo ed esclusivamente applicato se si utilizza anche la componente derivativa nel pid? altrimenti è inutile settarlo? Sì, serve solo per la derivata. è sbagliato a questo punto se dico che il time lag potrebbe essere una specie di slew rate anche se calcolato in maniera differente? ( in fatto pratico il time lag è la componente di tempo che si da per far si che la regolazione derivativa avvenga nel tempo stabilito giusto? oppure è possibile che hanno utilizzato il fattore di slew rate aggiunto al posto del tempo derivativo o in aggiunta ad esso visto che è impostato in quasi tutte le vecchie config dei pic(anche nelle situazione dove non c'è il td?)? Il tempo di campinamento dovrai sceglierlo in modo che sia molto piccolo rispetto ai tempi di risposta della variabile da controllare. Se, ad esempio, controlli la velocità di un motore, il tempo di campionamento sarà dell'ordine dei millisecondi; se controlli una temperatura sarà dell'ordine dei secondi o più. quindi da come hai scritto controllando temperature e pressioni è giusto che il tempo di campionamento sia stato impostato ad 1 secondo Link al commento Condividi su altri siti More sharing options...
batta Inserita: 16 febbraio 2013 Segnala Share Inserita: 16 febbraio 2013 è sbagliato a questo punto se dico che il time lag potrebbe essere una specie di slew rate anche se calcolato in maniera differente? Non ho idea di cosa sia lo slew rate, quindi su questo non ti so rispondere. oppure è possibile che hanno utilizzato il fattore di slew rate aggiunto al posto del tempo derivativo o in aggiunta ad esso visto che è impostato in quasi tutte le vecchie config dei pic(anche nelle situazione dove non c'è il td?)? Anche su questo non ti so dare una risposta. Io comunque non prenderei le impostazioni attuali come Vangelo. Tanto per dire, ci troviamo con un Tempo Integrale = 0, e questo NON può essere un valore corretto e, a parte il PIC 15, anche dove è abilitata l'azione derivativa, ci troviamo con un Tempo Derivata = 0, che significa nessuna azione (in un tempo = 0 la variabile di processo non può subire variazioni). Nel PIC 15 poi, il Td è impostato ad 1 minuto. Probabilmente si tratta di un sistema con variazioni molto lente (ipotesi avallata anche dal tempo di campionamento di 5 secondi). Se non si tratta di un processo estremamente lento, 1 minuto di derivata è un tempo enorme. quindi da come hai scritto controllando temperature e pressioni è giusto che il tempo di campionamento sia stato impostato ad 1 secondo Senza conoscere le caratteristiche dei sistemi da controllare (velocità di variazione della variabile di processo e ritardo di risposta in primis), è impossibile dare una risposta. Se prima, con tempo di campionamento di 1 secondo funzionavano bene, probabile che il tempo sia corretto. Ma, soprattutto per le regolazioni di pressione, non si può escludere che tempi più brevi possano apportare miglioramenti. Solo chi conosce l'impianto può dare una risposta. E lo stesso vale anche per l'impostazione dei parametri Kc, Td e Ti. Tieni presente che, se il parametro "Batch Unit Hi Limit = 1023" è il valore massimo dell'uscita del PID, nel nuovo PID lavorerai con un valore massimo di uscita circa 10 volte più piccolo (100). Il guadagno attuale, in questo caso, andrebbe almeno ridotto di 10 volte. Sempre che i valori di SP e PV vengano utilizzati con la stessa unità di misura. Per dire, se considero la pressione in bar oppure in mbar, tutto cambia con un rapporto di 1 a 1000; se passo la temperatura i gradi centigradi o in decimi di grado, tutto cambia in rapporto di 1 a 10. Potresti partire, tanto per inserire dei valori che non saranno ottimali ma almeno sensati, calcolando il guadagno considerando con quale errore intendi avere il 100% di correzione proporzionale. Se, per esempio, vuoi avere il 100% di proporzionale con un errore di 20 °C, in un PID dove SP e PV sono espressi in °C, il guadagno dovrà essere Kc = 100 / 20 = 5. Link al commento Condividi su altri siti More sharing options...
Nesus Inserita: 17 febbraio 2013 Autore Segnala Share Inserita: 17 febbraio 2013 spieghi meglio di un professore grazie mille applicherò tutti questi consigli e vi terrò informati ^^ Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora