Giovanni Segreto Inserito: 8 dicembre 2020 Segnala Share Inserito: 8 dicembre 2020 (modificato) Buonasera a tutti. Ma come funzionale coda di attesa nei plc Siemens? La CPU elabora i codici solo in run, la coda di attesa viene generata dagli eventi di allarme(ad esempio un bool che attiva l ob x) gli eventi di allarme si programmano e vengono elaborati negli ob di avvio e sono letti dalla CPU nella fase avviamento? Gli ob di allarme vengono messi dalla CPU in coda di attesa per essere successivamente elaborati in "run" in un punto casuale del programma? Modificato: 8 dicembre 2020 da Giovanni Segreto Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 9 dicembre 2020 Segnala Share Inserita: 9 dicembre 2020 9 ore fa, Giovanni Segreto ha scritto: Gli ob di allarme vengono messi dalla CPU in coda di attesa per essere successivamente elaborati in "run" in un punto casuale del programma? Se sono eventi legati ad interrupt l'attuazione è immediata, salvo il tempo di latenza dell'interrupt che, se ricordo bene, è un dato da manuale. Link al commento Condividi su altri siti More sharing options...
batta Inserita: 9 dicembre 2020 Segnala Share Inserita: 9 dicembre 2020 Ai vari OB è attribuita una priorità. OB con priorità più alta, se richiamati, interrompono OB con priorità più bassa. Per fare qualche esempio: Gli OB "Program Cycle" (tipo OB1) hanno priorità 1 Un OB a tempo ha priorità 13. Un OB MC-Servo ha priorità 26. La priorità la puoi vedere nelle proprietà dei blocchi. Per quasi tutti i blocchi è anche modificabile ma, personalmente, eviterei di stravolgere le priorità assegnate di default. Per tornare all'esempio riportato sopra, se dovessi assegnare ad un OB "MC-Servo", che serve per il motion, una priorità bassa, è chiaro che non potrei pretendere di avere buone prestazioni del motion. Link al commento Condividi su altri siti More sharing options...
Giovanni Segreto Inserita: 11 dicembre 2020 Autore Segnala Share Inserita: 11 dicembre 2020 Il 9/12/2020 alle 21:30 , batta ha scritto: Per tornare all'esempio riportato sopra, se dovessi assegnare ad un OB "MC-Servo", che serve per il motion, una priorità bassa, è chiaro che non potrei pretendere di avere buone prestazioni del motion. Perché il richiamo dei blocchi con priorità più alta non consentirebbero ai blocchi Motion di avere il movimento "aggiornato" a causa della scansione di altri blocchi? Il 9/12/2020 alle 21:30 , batta ha scritto: Ai vari OB è attribuita una priorità. OB con priorità più alta, se richiamati, interrompono OB con priorità più bassa. Quindi se mi sta eseguendo un OB con priorità 2 nel quale suo interno c'e' un evento che richiama un OB con priorità 1 stacca ob priorità 2 per cambio ad ob priorità 1? E questa la logica? Quindi un plc nella sua fase di avviamento crea le code di attesa così? Link al commento Condividi su altri siti More sharing options...
batta Inserita: 12 dicembre 2020 Segnala Share Inserita: 12 dicembre 2020 2 ore fa, Giovanni Segreto ha scritto: Perché il richiamo dei blocchi con priorità più alta non consentirebbero ai blocchi Motion di avere il movimento "aggiornato" a causa della scansione di altri blocchi? Se, ad un OB del motion, assegni una priorità bassa, potrebbe venire interrotto da altri OB con priorità più alta, e questo peggiorerebbe le prestazioni del motion. 2 ore fa, Giovanni Segreto ha scritto: Quindi se mi sta eseguendo un OB con priorità 2 nel quale suo interno c'e' un evento che richiama un OB con priorità 1 stacca ob priorità 2 per cambio ad ob priorità 1? E questa la logica? Non importa che l'evento sia all'interno dell'OB. Un OB di interrupt, per esempio, non è richiamato da nessuna parte nel programma. Per il resto, è esattamente il contrario. OB1, per esempio, ha priorità 1. Se, durante la normale esecuzione di OB1 (e di tutti i blocchi richiamati da OB1) viene avviato un OB Cyclic Interrupt che ha priorità più alta (13, se non ricordo male), l'elaborazione delle istruzioni di OB1 viene interrotta, vengono eseguite le istruzioni dell'OB con priorità più alta e, terminata l'elaborazione di questo OB, viene ripresa l'elaborazione di OB1 dal punto dove era stata interrotta. Non sono "code di attesa", sono semplicemente task con priorità diverse. Chi ha priorità più alta, interrompe il lavoro di chi ha priorità più bassa. Immagina di essere impegnato in un lavoro. Arriva il capo e ti dice: "Sospendi quello che stai facendo, che c'è un lavoro più importante da fare". Tu che fai? Ti dedichi al nuovo lavoro e, una volta terminato, riprendi il lavoro precedente da dove l'avevi abbandonato. Link al commento Condividi su altri siti More sharing options...
Giovanni Segreto Inserita: 6 gennaio 2021 Autore Segnala Share Inserita: 6 gennaio 2021 Quindi gli ob servono a stabilire quale evento è più importante di un altro e di conseguenza a dare la priorità di esecuzione ai singoli eventi che si possono verificare durante il processo? @batta Link al commento Condividi su altri siti More sharing options...
drn5 Inserita: 6 gennaio 2021 Segnala Share Inserita: 6 gennaio 2021 4 ore fa, Giovanni Segreto ha scritto: Quindi gli ob servono a stabilire quale evento No, sono gli interrupt che hanno priorità diverse e in alcune cpu come quelle della serie S7-400 puoi addirittura abbinare l'interrupt a certi OB così da poter discriminare il codice da eseguire in base all'interrupt che si scatena. Poi per alcuni OB per esempio il 35 che si aggancia ad un interrupt a tempo puoi impostare ogni quanti msec questo OB venga richiamato da quell'interrupt. Ed inoltre in alcuni casi puoi anche stabilire l'offset con il quale il tuo OB venga ritardato rispetto all'evento interrupt che lo richiama.. Link al commento Condividi su altri siti More sharing options...
Giovanni Segreto Inserita: 6 gennaio 2021 Autore Segnala Share Inserita: 6 gennaio 2021 (modificato) 48 minuti fa, drn5 ha scritto: No, sono gli interrupt che hanno priorità diverse Mi sono espresso male, Per interrupt intendi gli eventi che generano l avvio del relativo ob o comunque eventi con priorità superiore agli ob ciclici? In configurazione hardware si possono assegnare booleani ad ob di interrupt di processo? Esempio se bool 1 é true si avvia relativo ob interrupt ? Grazie @drn5 Modificato: 6 gennaio 2021 da Giovanni Segreto Link al commento Condividi su altri siti More sharing options...
drn5 Inserita: 6 gennaio 2021 Segnala Share Inserita: 6 gennaio 2021 12 minuti fa, Giovanni Segreto ha scritto: Per interrupt intendi gli eventi che generano l avvio del relativo ob o comunque eventi con priorità superiore agli ob ciclici? Per quanto riguarda questa discussione diciamo di si. 13 minuti fa, Giovanni Segreto ha scritto: assegnare booleani Se intendi se puoi "settare" un merker all'arrivo dell'interrupt dentro la configurazione hw della cpu, no. Non lo puoi fare in configurazione hardware ma dentro l'OB che viene richiamato dall'interrupt. Anche se "detta male" dentro l'OB scatenato dovresti scrivere "abbastanza" codice da gestire in modo "completo" la reazione del sistema all'evento che si è scatenato. Tieni presente che per sua natura l'interrupt è "imprevedibile" quindi potrebbe capitare che intervenga in qualsiasi parte del codice eseguito... per questo dico "abbastanza completo". Ciao 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