Vai al contenuto
PLC Forum


Tempi ciclo tempi di un PID


frussosw

Messaggi consigliati

Buongiorno a tutti,

sono alle prese con un software scritto da altri (prevalentemente ditte tedesche) , molto complesso, in cui vengono usati diversi controllori s7-1500 in rete Profinet.

Nel software vengono gestite  numerose unità controllate in temperatura e umidità.

Ovviamente vengono usate le normali funzioni PID della Siemens, (CONT_C e CONT_S).

Però mi è venuto un dubbio perchè vedo che vengono richiamate da FB a  loro volta richiamate da OB1.

Il tempo di ciclo impostato nel parametro "CYCLE" di ogni PID è di 100 ms.

Personalmente i PID li richiamo sempre da OB di tipo interrupt a tempo (OB30, OB31 .. ecc) mentre quì vengono richiamati attraverso l' OB1 col tempo di ciclo principale del programma.

Ma in questo modo non si possono avere risultati poco precisi dei diversi PID che stanno lavorando ?

Il tempo di ciclo principale attualmente si aggira tra 60 e 100 ms, ma ovviamente è variabile 

 

Attendo  vostri preziosi consigli.

 

Flavio

 

 

Link al commento
Condividi su altri siti


49 minuti fa, frussosw scrisse:

Ma in questo modo non si possono avere risultati poco precisi dei diversi PID che stanno lavorando ?

Il tempo di ciclo principale attualmente si aggira tra 60 e 100 ms, ma ovviamente è variabile 

 

Anche quando usavo i PLC Siemens mi son sempre rifiutato di usare i regolatori PID di libreria, usavo i miei blocchi specialistici, secondo il tipo di regolazione.

Se effettivamente il regolatore PID è richiamato con un tempo variabile tra 60ms e 100ms la regoalzione è affetta da jitter non trascurabile.

 

52 minuti fa, frussosw scrisse:

Personalmente i PID li richiamo sempre da OB di tipo interrupt a tempo (OB30, OB31 .. ecc)

 

Concordo! Questo, secondo la teoria della regolazione, è l'unico modo corretto per assicurare l'assenza di jitter significativo.

Link al commento
Condividi su altri siti

C'è chi è convinto che i tedeschi siano sempre "precisi, meticolosi, perfetti". Questa è una delle tante lampanti dimostrazioni di quanto questo luogo comune sia totalmente da sfatare.

 

Temperatura ed umidità variano sempre lentamente, quindi, anche un jitter elevato probabilmente non influisce più di tanto sul risultato finale. Rimane però sempre concettualmente non corretto gestire i PID in questo modo, anche se, nelle nuove versioni (quelle del 1200/1500), il PID tiene conto del reale tempo di campionamento (che rileva in automatico) e non solo, come nelle precedenti versioni, del valore impostato.

 

Se usati nel modo corretto, per quanto a Livio non piacciano, i PID di libreria Siemens funzionano molto bene, soprattutto per regolazioni di umidità e temperatura (ma non solo).

Link al commento
Condividi su altri siti

richiamare i PID in modo asincrono può sempre creare problemi sul integrale. Il derivativo si aggiorna in modo diverso e più veloce. L'integrale no.

Programmare cosi è da dementi, non oso immaginare cosa facciano nel sw....

Modificato: da walterword
Link al commento
Condividi su altri siti

12 ore fa, STEU scrisse:

Prova a vedere nelle proprietà dell OB1 il tempo minimo e max dell tempo ciclo.

 

20 ore fa, frussosw scrisse:

Il tempo di ciclo principale attualmente si aggira tra 60 e 100 ms, ma ovviamente è variabile 

 

 

Link al commento
Condividi su altri siti

Ciao a tutti,

oggi ho controllato sia la diagnostica che i valori rilevati in OB1 come consigliato da STEU,

 

confermo ciò che ho detto prima,

 

I valori rilevati da OB1 sono :

- tempo min = 60 ms 

- tempo max = 164 ms

 

dalle rilevazioni fatte in diagnostica  il tempo resta sempre tra 60 100 ms.

qualche volta vedo che supera di poche unità  i 100 ms, 

resta il fatto che l'ho visto superare ed effettivamente mi viene un sospetto visto che i tempo dei PID è impostato a 100 ms.

Sempre in diagnostica il tempo più lungo segnalato è 164 ms.

 

 

 

 

 

 

 

Link al commento
Condividi su altri siti

correggo:

 

ho inserito una modifica per analizzare quante volte il tempo di ciclo supera i 100 ms.

un poche più di 3  ore sono già oltre un migliaio di volte...

 

Link al commento
Condividi su altri siti

Una scansione così lunga fa pensare che non sia solo la gestione dei PID fatta male.
Erano tempi già molto lunghi per un 300, figuriamoci per un 1500.

 

Se ti è possibile, io rivedrei tutta la gestione dei PID, a cominciqre dal tempo di campionamento.
Per regolazioni di temperatura e di umidità non serve un campionamento a 100 ms. Nella maggior parte dei casi, un campionamento a 1 secondo è già veloce.
Imposterei, come detto, il campionamento a 1 secondo e richiamerei i PID in un OB ciclico a 100 ms, suddividendo i richiami in 10 cicli.
Avresti il doppio beneficio di un richiamo a tempo ben definito, e di alleggerimento del lavoro della CPU che si troverebbe ad elaborare solo un numero ridotto di PID alla volta.

Link al commento
Condividi su altri siti

Concordo con Batta.

Ti suggerirei, se i PID sono parecchi di richiarne uno alla volta ad ogni scadenza del timer.

Ad esempio se i PID sono 10, al primo interrupt chiami il primo, al secondo il secondo e così via; dopoil decimo ritorni da capo ripetendo il ciclo. Il tempo di campionamento di ogni PID è fisso ad 1" e la CPU elabora un solo PID alla volta. Se i PID sono meno di 10 il tempo di campionamento è inferiore al secondo, se sono di più il tempo è maggiore ma, dato il tipo di controllo, non ha molta influenza, anzi forse è anche meglio.

La cosa veramente importante è che il tempo di campionamento sia fisso e costante.

Link al commento
Condividi su altri siti

 

 

Certamente Batta il tempo di scansione è molto lungo ma, come avevo già accennato, qui ne hanno fatte di tutti i colori,

pensa che per ogni allarme o warning viene richiamato un blocco FB istanziato  ovviamente con il proprio DB , 

c' è una gestione di comunicazioni TCP/IP con un MES che è di una complessità inimmaginabile e sono 35 anni suonati che lavoro sui PLC.

No comment se devo aggiungere un pulsante o una lampada, per esempio.

Non mi meraviglio che i tempi di elaborazione siano così lunghi.

Mi avete dato due ottimi suggerimenti:

effettivamente un campionamento di 100 ms è solo uno spreco di tempo e di risorse e gestire le funzioni PID  con tempi di un secondo non può che migliorare la regolazione.

Grazie Livio anche per la tua idea di richiamare un solo PID per volta, anche questa soluzione  è senza dubbio valida.

Hai ragione e concordo perfettamente sull' importanza dei tempi da rispettare il più possibile costanti.

Appena riesco a provare vi farò sapere.

Potrebbe essere utili per chiunque.

 

 

 

 

 

 

 

Link al commento
Condividi su altri siti

1 ora fa, Livio Orsini scrisse:

Ti suggerirei, se i PID sono parecchi di richiarne uno alla volta ad ogni scadenza del timer.

 

È ciò che intendevo con: "Imposterei, come detto, il campionamento a 1 secondo e richiamerei i PID in un OB ciclico a 100 ms, suddividendo i richiami in 10 cicli."

Ad ogni richiamo di OB35 si elabora un numero limitato di PID.
In base al numero totale dei PID da gestire si decide in quanti cicli di "Cyclic Interrupt" suddividere i richiami dei PID e, di conseguenza, il tempo di "Cyclic Interrupt" e il tempo di campionamento dei PID.

Questo in linea generale. Poi, potrebbero esserci dei PID che devono avere un campionamento più veloce ed altri più lento. Si possono anche configurare più ""Cyclic Interrupt" con tempi diversi ed impostare un offset in modo da evitare il richiamo simultaneo.

Link al commento
Condividi su altri siti

Grazie a tutti per le ottime idee..

speriamo che me lo facciano fare ...lavoro per una multinazionale tedesca per nulla "malleabili".

 

 

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