frussosw Inserito: 12 giugno 2021 Segnala Share Inserito: 12 giugno 2021 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 More sharing options...
Livio Orsini Inserita: 12 giugno 2021 Segnala Share Inserita: 12 giugno 2021 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 More sharing options...
batta Inserita: 12 giugno 2021 Segnala Share Inserita: 12 giugno 2021 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 More sharing options...
walterword Inserita: 12 giugno 2021 Segnala Share Inserita: 12 giugno 2021 (modificato) 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: 12 giugno 2021 da walterword Link al commento Condividi su altri siti More sharing options...
STEU Inserita: 12 giugno 2021 Segnala Share Inserita: 12 giugno 2021 Prova a vedere nelle proprietà dell OB1 il tempo minimo e max dell tempo ciclo. Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 13 giugno 2021 Segnala Share Inserita: 13 giugno 2021 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 More sharing options...
frussosw Inserita: 14 giugno 2021 Autore Segnala Share Inserita: 14 giugno 2021 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 More sharing options...
frussosw Inserita: 14 giugno 2021 Autore Segnala Share Inserita: 14 giugno 2021 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 More sharing options...
batta Inserita: 14 giugno 2021 Segnala Share Inserita: 14 giugno 2021 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 More sharing options...
Livio Orsini Inserita: 14 giugno 2021 Segnala Share Inserita: 14 giugno 2021 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 More sharing options...
frussosw Inserita: 14 giugno 2021 Autore Segnala Share Inserita: 14 giugno 2021 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 More sharing options...
batta Inserita: 14 giugno 2021 Segnala Share Inserita: 14 giugno 2021 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 More sharing options...
walterword Inserita: 15 giugno 2021 Segnala Share Inserita: 15 giugno 2021 esatto metti in OB35 per esempio un interrupt a 50 ms e poi con un contatore richiami un pid o due alla volta Link al commento Condividi su altri siti More sharing options...
frussosw Inserita: 21 giugno 2021 Autore Segnala Share Inserita: 21 giugno 2021 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 More sharing options...
batta Inserita: 21 giugno 2021 Segnala Share Inserita: 21 giugno 2021 "Malleabile" e "tedesco" non possono stare nella stessa frase. Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 21 giugno 2021 Segnala Share Inserita: 21 giugno 2021 1 ora fa, batta scrisse: "Malleabile" e "tedesco" non possono stare nella stessa frase. 👍 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