Vai al contenuto
PLC Forum


P.i.d Siemens - FB41


BRUNO_regg

Messaggi consigliati

Buongiorno e buon anno a tutti,

normalmente utilizzo il blocco FB41 della Siemens come controllo P.I.D.

per regolare livelli o pressioni (es. livello:sonda capacitiva 4..20mA lettura livello -> gestione P.I.D ->segnale 4..20 mA per comando valvola modulante).

Come parametri di controllo utilizzo solo i Gain e TI.

Il blocco FB41 viene richiamato dall'OB35, mentre la lettura e scrittura dei dati e delle periferie vengono effettuati in un altro blocco letto dall'OB1...e fin qui penso che sia tutto corretto.

Non sempre riesco ad ottenere un funzionamento stabile della valvola di comando, ma la valvola tende a aprire e chiudere di continuo. Ho provato a regolare TI e Gain (normalmente gain 0,5..2,0 e TI 60..90 sec.), ma in alcune applicazioni proprio non riesco ad ottenere un funzionamento corretto.

Il blocco OB35 viene letto ogni 10ms (lo utilizzo anche per altre funzioni) e i parametri CYCLE e TM_LAG dell'FB41 sono impostati rispettivamente a 100ms e 2s.

Queste sono le impostazioni che normalmente utilizzo, le applicazioni sono sempre diverse e non chiedo una risoluzione del problema on-line, semplicemente chiedo a chi ha piu' esperienza di me se ci sono altri parametri da gestire tra la marea di dati dell'FB41.

Grazie

Link al commento
Condividi su altri siti


Ciao Dago,

ho provato a utilizzare il parametro "banda morta". Si, migliora la stabilita',

pero' inserisce anche un certo ritardo di lettura che a volte puo' dare problemi e

non risolverli.

Ciao e grazie

Link al commento
Condividi su altri siti

Il blocco OB35 viene letto ogni 10ms (lo utilizzo anche per altre funzioni) e i parametri CYCLE e TM_LAG dell'FB41 sono impostati rispettivamente a 100ms e 2s.

Dici che OB35 è richiamato ogni 10ms perché ti serve anche per altre cose. Ma FB41 viene richiamata ad ogni ciclo? Se è così devi impostare 10ms anche nel parametro CYCLE oppure (secondo me molto meglio) richiamare FB41 ogni 10 cicli di OB35.

Il parametro TM_LAG influenza solo la derivata, che tu non stai utilizzando.

Che processo devi controllare? Quanto è rapido il sistema? Con che valori di PV e di SP lavori?

Prova a disattivare l'integrale, e se l'uscita del PID è ancora instabile riduci il guadagno. Quando sei riuscito ad ottenere un sistema stabile attiva nuovamente l'integrale e parti con valori di tempo integrale elevati. Riduci poi gradualmente il tempo integrale. Se poi hai fattori esterni che creano disturbo, potresti provare ad attivare anche la derivata, per avere un pid più reattivo in caso di reazioni rapide della variabile di processo.

Tieni presente che nella mia esperienza lavorativa mi sono trovato a gestire PID con guadagni bassissimi e parte integrale elevata, ed altri con guadagni piuttosto elevati e parte integrale quasi nulla.

Se descrivi meglio il sistema che devi controllare forse ti potremo dare un aiuto migliore. Se poi hai la possibilità di registrare l'andamento della variabile di processo e dell'uscita del PID in un grafico, postalo.

Link al commento
Condividi su altri siti

Ciao Batta,

queste sono le impostazioni che normalmente utilizzo:

CALL "CONT_C" , "DB6-dati PID livello"

COM_RST :=

MAN_ON :=

PVPER_ON:=FALSE

P_SEL :=

I_SEL :="DB6-dati PID livello".I_SEL <--TRUE

INT_HOLD:=

I_ITL_ON:=

D_SEL :="DB6-dati PID livello".D_SEL <--FALSE

CYCLE :=T#100MS

SP_INT :="DB6-dati PID livello".SP_INT <--NORMALIZZATO 0.. 300.0

PV_IN :="DB6-dati PID livello".PV_IN <-- NORMALIZZATO COME SP_INT

PV_PER :=

MAN :=

GAIN :="DB6-dati PID livello".GAIN <--NON SUPERIORE A 5.0

TI :="DB6-dati PID livello".TI <-- CIRCA 70 SECONDI

TD :="DB6-dati PID livello".TD

TM_LAG :=T#2S

DEADB_W :=

LMN_HLM :="DB6-dati PID livello".LMN_HLM <-- LIMITE ALTO 100.0

LMN_LLM :=0.000000e+000

PV_FAC :=

PV_OFF :=

LMN_FAC :=

LMN_OFF :=

I_ITLVAL:=

DISV :=

LMN :="DB6-dati PID livello".LMN <--NORMALIZZATO 0..100.0

LMN_PER :=

QLMN_HLM:=

QLMN_LLM:=

LMN_P :=

LMN_I :=

LMN_D :=

PV :=

ER :=

Tutti gli altri dati non sono stati modificati rispetto DB originale Siemens

Un'altra domanda:

Il segnale di disturbo a che cosa serve e come si gestisce?

A.. dimenticavo, il sistema che gestisco e' un serbatoio da circa 80lt, con una sonda capacitiva e una valvola modulante come ingresso prodotto.

Ciao e grazie

Modificato: da BRUNO_regg
Link al commento
Condividi su altri siti

... Non è che, per caso, l'instabilità del controllo di modulazione della valvola proporzionale ce l'hai quando entra il prodotto fin quasi al livello del capacitivo? Che sensore stai usando? Per esperienza personale, con gli Aeco capacitivi ho avuto problemi di ridondanza del segnale; quella volta ho risolto regolando la sensibilità e schermando il sensore con carta spagna.

Link al commento
Condividi su altri siti

Importante sarebbe conoscere quanto è veloce il sistema. Per dire, con la valvola aperta, quanto tempo si impiega, all'incirca, per riempire il serbatoio? Stiamo parlando di un ciclo di 5 secondi o di 2 ore? I 70 secondi di tempo integrale possono essere troppi (nel qual caso avresti un'azione integrale blanda), oppure troppo pochi (e creare quindi instabilità).

Comunque, seguendo le indicazioni del precedente post, dovresti riuscire a risolvere il problema. Prima si cerca la stabilità, poi si cerca di migliorare i tempi di risposta.

Link al commento
Condividi su altri siti

1 - 10ms come tempo di campionamento per un controllo del tipo che hai citato mi smebrano un periodo inutilmente troppo breve. Meglio sarebbe salire di un ordine come ti suggerisce batta.

2 - Se il clock di sistema anche per altri processi devi verificare che lo FB41 sia richiamato sempre nel medesimo istante. Meglio sarebbe se fosse la prima funzione ad essere richiamata.

3 - Lettura delle variabili di ingresso e scrittura delle variabili di uscita devono essere eseguite sempre nel medesimo istante, quindi sincrone con FB41.

4 - Dal difetto che descrivi c'è anche un problema di ottimizzazione dei parametri. Comincia a lavorare in proporzionale puro, poi inserisci l'integrale. Il derivativo usalo solo se è indispensabile.

Link al commento
Condividi su altri siti

Buongiorno a tutti,

ho provato a impostare lo stesso tempo di richiamo dell'OB35 al parametro "CYCLE" e in effetti il sistema e' migliorato. Poi tramite un "loop" ho richiamato il blocco FB41 ogni 100ms (con CYCLE impostato a 100ms) perche' anche a me sembrava inutile richiamarlo ogni 10ms.

Quello che mi ha "fregato", e' che nell'. in linea della Siemens non c'é scritto che CYCLE deve avere lo stesso tempo di richiamo del blocco FB35 ma riporta la seguente descrizione:

CYCLE TIME >= 1ms T#1s SAMPLE TIME / Tempo di campionamento Il tempo tra i richiami di blocco deve essere costante. L'ingresso "Tempo di campionamento" indica il tempo tra i richiami di blocco.

Ok, comunque l'importante e' risolvere o eventualmente migliorare il funzionamento del sistema.

Vi chiedo un'altra cosa: Come mai il blocco vuole richiamato in OB100? Ho provato con richiamo o senza, ma non ho trovato grosse differenze.

Un'altra cosa: A cosa serve l'ingresso DISV segnale di disturbo?

Per rispondere a Batta, ti dico che il tempo di riempimento e' di circa 5 minuti (durante le prove di collaudo perche' non abbiamo portata), ma in produzione dal cliente sara' di 1..2 minuti.

Ciao e grazie a tutti

Link al commento
Condividi su altri siti

Per funzionare bene il PID deve essere richiamato ad intervalli il più regolari possibili.

CYCLE TIME >= 1ms T#1s SAMPLE TIME / Tempo di campionamento Il tempo tra i richiami di blocco deve essere costante. L'ingresso "Tempo di campionamento" indica il tempo tra i richiami di blocco.

Forse non è chiarissimo, ma l'interpretazione corretta è la seguente:

- Il tempo tra i richiami del blocco deve essere costante. Fin qui tutto chiaro, ed è anche spiegato perché è meglio il richiamo in un OB a tempo.

- L'ingresso "Tempo di campionamento" indica il tempo tra i richiami di blocco. Qui si deve indicare ogni quanto tempo viene richiamato il blocco. Sei tu che decidi ogni quanto tempo eleborare il PID, e sei tu che devi dire alla funzione PID ogni quanto tempo viene elaborata.

Dallo schema a blocchi nell'. di FB41 DISV è un segnale che si somma all'uscita del PID, prima del controllo dei limiti e della normalizzazione del valore.

Personalmente non l'ho mai utilizzato.

Con un tempo di riempimento attuale di 5 minuti un tempo integrale di 70 secondi potrebbe essere troppo basso.

Considerazione questa fatta puramente a spanne.

La regolazione del PID andrà fatta comunque nelle condizioni reali di lavoro, e dovrai scegliere se privilegiare la rapidità di risposta o la stabilità. Non c'è però una regola per stabilire quale sia il giusto compromesso: dipende esclusivamente dalla tua applicazione.

Link al commento
Condividi su altri siti

Dallo schema a blocchi nell'help di FB41 DISV è un segnale che si somma all'uscita del PID, prima del controllo dei limiti e della normalizzazione del valore

Può essere usato per inserire una funzione tipo feedforward. Inserire un feddforward oltre ad aumentare la velocità di risposta permette di avere valori di correzzione integrale molto contenuti. Ovviamente se la funzione è stata ottimizzata nel modo corretto.

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