Vai al contenuto
PLC Forum


chimata della fb41


Enrico Grieco

Messaggi consigliati

Enrico Grieco

ciao a tutti, ho fatto un programma per s7 300 con step 7 che utilizza circa un decina di controlli pid (la fb 41) al momento ho chiamato questi blocchi funzionali , ognuno con la sua db ed  i suoi parametri tutte dalla OB 35, che però è diventata piuttosto pesante. Vorrei quindi per ogni controllo fare una funzione con la corrispondente chiamata della bf 41 e chiamare queste funzioni dall'ob 35 che diventerebbe solo un lungo elenco di call. E' una cosa possibile oppure si perde la cadenza di chiamata garantita dalla ob 35?

Link al commento
Condividi su altri siti


11 ore fa, Enrico Grieco scrisse:

E' una cosa possibile oppure si perde la cadenza di chiamata garantita dalla ob 35?

 

Se tutti i PID avessero rigorosamente sempre la medesima durata non ci sarebbero problemi perchè ogni PID avrebbe sempre lo stesso periodo di esecuzione.

Questo stato, però, non è possibile, quind man mano che si effetuano le chiamate il perido varia anche significativamente, specialmente gli ultimi chiamati. Questo comporta problemi di stabilità perchè introduce un rumore di jitter.

 

Spero che tu debba regolare processi abbastanza lenti con PID che abbiano periodi abbastanza lunghi. In questo caso si programma il periodo di interrupt di OB35 piuttosto piccolo e si richiama un PID alla volta, ad ogni occorenza di OB35

Link al commento
Condividi su altri siti

Enrico Grieco

si i sistemi hanno una dinamica piuttosto lenta, siva dia secondi ai tanti minuti ed al momento in effetti tutto va bene e forse conviene lasciare tutto com'è. Dal punto di vista teorico però un modo per fare le cose bene potrebbe essere creare tante OB con interrupt ciclico (il tia le chiama così) e chiamare da ognuna il singolo controllo pid?

Link al commento
Condividi su altri siti

1 ora fa, Enrico Grieco scrisse:

OB con interrupt ciclico (il tia le chiama così) e chiamare da ognuna il singolo controllo pid?

No, si richiamano tutte da OB35, come ti ho scritto sopra.

 

Esemepio.

Hai 10 PID da richiamare con periodo di 300ms.

OB35 sarà richiamato dal suo interrupt ogni 30ms.

All'interno di OB35 si crea un contatore 0...9, si richiama il PID corrispondente al contatore; al ritorno si incrementa il contatore.

Link al commento
Condividi su altri siti

Enrico Grieco

Ho capito.. mi sembra una soluzione molto pulita.. la devo mettere in pratica... visto che mi sono trovato a programmare questo plc.. almeno che provi a fare un lavoro migliore possibile, almeno per le mie capacità

Grazie molte!!

Link al commento
Condividi su altri siti

Quote

Vorrei quindi per ogni controllo fare una funzione con la corrispondente chiamata della bf 41 e chiamare queste funzioni dall'ob 35 che diventerebbe solo un lungo elenco di call. E' una cosa possibile oppure si perde la cadenza di chiamata garantita dalla ob 35?

Non solo è possibile, ma direi consigliato.
Per risolvere i problemi di jitter già citati da Livio, potresti fare così:
Dici che i processi sono tutti piuttosto lenti. Supponiamo ti vada bene un tempo di campionamento di 1 secondo.
Imposti tempo di OB35 a 100 ms (valore di default). All'interno di OB35 fai un contatore da 1 a 10 che incrementi ad ogni ciclo.

Quando il contatore è uguale ad 1 chiami il PID 1, quando il contatore è 2 chiamo il PID 2, e così via.

Ogni PID verrà quindi richiamato esattamente ogni 1000 ms.
Se hai bisogno di un tempo di campionamento più veloce, diciamo 100 ms, imposti OB35 a 10 ms.

Se hai più di 10 PID in alcuni cicli ne puoi richiamare 2. Il tempo di elaborazione di FB41, anche con le CPU più modeste, è inferiore al millisecondo.
Se metti un paio di PID uno in coda all'altro nello stesso ciclo, non è certo questa frazione di millisecondo che ti creerà problemi di jitter.

 

Ooops... Non avevo letto l'ultima risposta di Livio.

 

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