Vai al contenuto
PLC Forum


Dubbi su Task Cycle cicliche


The Running Man

Messaggi consigliati

The Running Man

Buonasera a tutti,

 

Ipotizziamo di avere due task

 

 

 Task 1 : priorità 1 cycle time : 4ms

 Task 2 : priorità 5 cycle time : 10ms

 

se la task 1 viene richiamata ogni 4 ms e ha una priorità maggiore rispetto alla Task due, quando viene effettivamente richiamata la task 2 che ha una priorità minore?

 

Grazie a tutti 

Link al commento
Condividi su altri siti


Ma di che apparecchiatura stiamo parlando?

Comunque in generale si può dire che esiste uno schedulatore che gestisce i task.

E' il sistema operativo che gestisce quando farli partire in base al timing e che gestisce le risorse in modo corretto.

Se il manuale dell'apparecchatura dice che un task viene eseguito ogni 10ms questo avviene, naturalmente poi ci sarà la gestione del watchdog che si assicura che il tempo destinato dallo schedulatore ad un determinato task non venga superato, ad es per un programma troppo lungo.

Link al commento
Condividi su altri siti

  • 3 weeks later...
The Running Man

 

grazie mille per la risposta, ma forse era poco chiara la mia domanda, come apparecchiatura parlavo di una basata sul codesys,

 

di seguito l'immagine di esempio di 3 task con priorità diverse

 

https://..codesys.com/api-content/2/core_Modbus_Configuration_Editor/3.5.14.0/en/_images/_task_diagram_standard.png

(1) Read inputs from input buffer       (2) IEC task
(3) Write outputs to output buffer      (4) Bus cycle
(5) Input buffer                        (6) Output buffer
(7) Copy data to/from bus
(9) Bus cycle task, priority 1, 1 ms
(10) Bus cycle task, priority 5
(11) Bus cycle task, priority 10, interrupted by task 5

 

Se ho 3 task che vengno rispettivamente richiamate 

 

task 1 ogni 1ms priorità 1

task 2 priorità 5

task 3 priorità 10

 

 

è corretto che viene eseguita una sola task alla volta? se la task 1 viene richiamata ogni 1ms  ed ha la priorità maggiore quando vengono eseguite le altre ?

se in base alle priorità le altre task vengono interrotte dalla task 1 quando queste vengono effettivamente eseguite? 

 

grazie

Link al commento
Condividi su altri siti

Nel caso di richiesta di esecuzione contemporanea, viene eseguita prima quella con priorità più elevata, e le altre subito dopo, sempre in base alla priorità assegnata.

Link al commento
Condividi su altri siti

The Running Man

 

Quello l'ho capito, ma vediamo se riesco a spiegarmi meglio

 

Abbiamo due Task

 

TASK 1   ogni 5ms priorità 1

TASK 2  ogni 10ms prorità 5

 

 

se la TASK1 viene richiamata ogni 5ms, dopo 10ms è stata richiamata 2 volte, e dopo 10ms dovrebbe venire anche richiamata anche la TASK2 oltre che nuovamente la TASK1,ma se la TASK1 ha una priorità maggiore viene prima eseguita la TASK1,e dopo verrebbe ancora richiamata la TASK1.

Qundi non capisco quando effettivamente viene eseguita una task con priorità minore se quella con priorità maggiore viene sempre eseguita.

 

 

Grazie

 

 

 

 

 

 

 

 

 

Link al commento
Condividi su altri siti

38 minuti fa, The Running Man ha scritto:

ma se la TASK1 ha una priorità maggiore viene prima eseguita la TASK1,e dopo verrebbe ancora richiamata la TASK1.

No, appena terminata la task1, viene eseguita la task2.
Significa che la task due, anziché dopo 10 ms precisi, andrà in esecuzione dopo 10.01 ms (dipende da quanto tempo serve per eseguire la task1), ma non salta certo il suo ciclo.
Se i tempi non vengono rispettati (con un po' di tolleranza), il sistema lo segnala.

Link al commento
Condividi su altri siti

La TASK 1 viene chiamata a: 5 ms, 10 ms, 15 ms ecc

La TASK 2 viene chiamata poco dopo i 10 ms appena è finita la TASK 1

 

oops sovrapposto!

Modificato: da rguaresc
Link al commento
Condividi su altri siti

The Running Man

 

adesso mi è tutto più chiaro, quindi se la task con la priorità più alta viene richiamata ogni 5ms ed il suo tempo di esecuzione è molto vicino a questi 5ms nascono dei problemi per il richiamo delle altre task, giusto?

 

 

 

 

 

 

 

 

 

 

 

Link al commento
Condividi su altri siti

Se richiami ogni 5 ms una task che ne richiede 4 per la sua esecuzione, hai sbagliato tutto, completamente.
Lo scopo di queste task è di eseguire operazioni ad intervalli di tempo regolari, ma devono contenere solo le istruzioni indispensabili, in modo che la loro esecuzione sia rapida.

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