Il tempo di ciclo del task è uno dei valori pratici che gli ingegneri possono utilizzare per comprendere come si comporta un'applicazione di comando durante l'esecuzione. Se un task impiega più tempo del previsto, ciò può influire sulla tempistica dei processi, sulla sincronizzazione, sulla risoluzione dei problemi e sulla stabilità del sistema.

CODESYS è un ambiente di sviluppo per la programmazione di applicazioni di comando conforme a IEC 61131-3. È utilizzato nei sistemi di automazione e controllo in cui i task devono essere eseguiti in modo affidabile entro condizioni temporali definite.

Nei progetti CODESYS il monitoraggio del tempo di ciclo effettivo del task può aiutare gli ingegneri a ottimizzare le prestazioni, identificare i colli di bottiglia e rilevare comportamenti temporali che potrebbero influenzare la sequenza della macchina. Questo aspetto è particolarmente importante quando i task di controllo, i task di comunicazione o le funzioni correlate al movimento devono rimanere entro una specifica finestra temporale.

Questo tutorial mostra due modi per misurare il tempo di ciclo effettivo di un task in CODESYS:

  • Utilizzando la funzione integrata TIME()
  • Utilizzando la libreria CmpIecTask

Entrambi i metodi possono essere utili. La scelta giusta dipende dalla precisione che vi serve e da quanto profondamente desiderate analizzare il comportamento del task.

Il tempo di ciclo del task descrive quanto dura un task o un'operazione specifica all'interno di un sistema di comando. In un'applicazione di comando questo valore vi aiuta a comprendere se il codice viene eseguito entro l'intervallo di tempo previsto.

Monitorare il tempo di ciclo del task può supportare diversi compiti tecnici:

  • Verificare se un task rimane entro il suo tempo di ciclo configurato
  • Identificare le sezioni di codice che aumentano il tempo di esecuzione
  • Rilevare variazioni temporali inattese
  • Supportare la risoluzione dei problemi durante la messa in servizio
  • Migliorare la sincronizzazione dei processi
  • Contribuire a stabilizzare il comportamento del comando

Un tempo di ciclo stabile del task non risolve tutti i problemi di comando, ma fornisce agli ingegneri un punto di partenza utile. Se il tempo di ciclo effettivo è più lungo del previsto o varia notevolmente, potrebbe essere necessaria un'analisi più approfondita dell'applicazione.

In CODESYS un task definisce quando e come un programma o una funzione vengono eseguiti. Il tempo di ciclo del task è il tempo necessario per completare quell'esecuzione.

Ad esempio, un task ciclico può essere configurato per essere eseguito ogni pochi millisecondi. Se il codice all'interno del task richiede troppo tempo, il comando potrebbe non completare il task entro la finestra temporale prevista. Ciò può influire sulle prestazioni, sulla sincronizzazione del processo o sul comportamento del movimento.

Misurare il tempo di ciclo del task può risultare complesso perché il valore effettivo può essere influenzato da diversi fattori:

  • Carico del sistema
  • Latenza della rete
  • Prestazioni dell'hardware
  • Configurazione del task
  • Architettura del software
  • Comportamento di comunicazione
  • La quantità e la struttura del codice all'interno del task

È per questo motivo che il metodo di misurazione è fondamentale. Per i controlli di base può essere sufficiente un semplice metodo di temporizzazione. Potrebbe essere necessario un metodo più preciso quando si richiedono temporizzazioni a livello di microsecondi o informazioni specifiche del task.

Un modo semplice per misurare il tempo trascorso in CODESYS è utilizzare la funzione TIME() integrata.

La logica di base è facile:
1. Registrare l'ora di inizio prima che la sezione di codice venga eseguita
2. Eseguire il codice che si desidera misurare
3. Registrate l'ora di fine dopo che la sezione di codice è stata eseguita
4. Sottrarre l'ora di inizio dall'ora di fine
5. Utilizzare il risultato come il tempo trascorso misurato

Nell'esempio, due cicli FOR vengono usati per simulare un task dispendioso in termini di tempo. La funzione TIME() registra il tempo prima e dopo la sezione del ciclo, e la differenza tra questi valori fornisce una stima della durata del task.

Questo metodo può essere utile quando si desidera un'indicazione rapida della durata di una sezione di codice.

L'esempio mostra un tempo di ciclo misurato del task che di solito varia da 6 a 8 millisecondi. È possibile aggiungere una traccia per monitorare la variabile misurata nel tempo. Nell'esempio, il tempo di ciclo occasionalmente salta a 10 millisecondi.

Quella variazione è importante. Se un task di movimento morbido è configurato con un tempo di ciclo di 4 millisecondi o inferiore, superare quel tempo di ciclo configurato può causare eccezioni. Ciò rende la sincronizzazione dei task particolarmente rilevante per applicazioni con requisiti rigorosi di movimento o sincronizzazione.

La funzione TIME() è utile perché è semplice. Richiede poco codice, è facile da comprendere e può essere aggiunta rapidamente a un progetto esistente.

Può essere una buona opzione quando:

  • Serve un rapido controllo temporale
  • La risoluzione in millisecondi è sufficiente
  • Desiderate misurare una specifica sezione di codice
  • L'applicazione non richiede dati temporali ad alta precisione

Tuttavia, anche la funzione TIME() ha dei limiti. Fornisce valori con una risoluzione a livello di millisecondi. Ciò potrebbe non essere sufficientemente preciso per applicazioni che necessitano di un'analisi a livello di microsecondi.

Questo metodo richiede anche un tracciamento manuale del tempo. Occorre definire dove inizia la misurazione, dove termina e come viene calcolato il tempo trascorso. Ciò è accettabile per controlli semplici, ma può risultare meno conveniente quando sono necessarie informazioni specifiche sui tempi di esecuzione del task all'interno di un programma più ampio.

Per una misurazione più precisa del tempo di ciclo del task, la libreria CmpIecTask è generalmente l'opzione migliore.

La libreria CmpIecTask è inclusa con CODESYS. Questa libreria fornisce funzioni per accedere alle informazioni dal gestore dei task IEC.

Una volta aggiunta la libreria a un progetto CODESYS, l'inizializzazione richiede solo una minima quantità di codice. Dopo l'inizializzazione il programma può accedere a una struttura con informazioni dettagliate sui task, inclusi valori come il tempo di ciclo effettivo del task e il tempo medio del ciclo.

Questo approccio è più specifico per i task rispetto alla misurazione manuale del tempo prima e dopo una sezione di codice. Invece di creare la propria logica di temporizzazione, si utilizzano le informazioni sui task fornite attraverso la libreria.

Nell'esempio originale viene utilizzato lo stesso carico di lavoro simulato in modo che i metodi di misurazione possano essere confrontati. La differenza è che la libreria CmpIecTask gestisce le informazioni sul tempo di ciclo del task in maniera più diretta.

La libreria CmpIecTask fornisce numerosi vantaggi quando occorre un tempo di esecuzione dei task più preciso.

Innanzitutto, può essere integrata in modo flessibile in diverse parti del programma. Ciò semplifica l'accesso alle informazioni sui task senza inserire manualmente le misurazioni dei tempi di inizio e fine attorno a ogni sezione del codice.

In secondo luogo, la libreria gestisce la registrazione e il calcolo delle informazioni sui tempi di ciclo dei task. Ciò riduce il lavoro manuale e diminuisce il rischio di errori nella logica di misurazione.

In terzo luogo, la libreria fornisce valori con una risoluzione a livello di microsecondi. Questa è più precisa rispetto ai valori ottenuti con la funzione TIME() e può essere importante per applicazioni con requisiti di temporizzazione più rigorosi.

Lo svantaggio principale è che la libreria deve essere aggiunta al progetto CODESYS. Tuttavia, per molte applicazioni, si tratta di un piccolo compromesso rispetto alla maggiore precisione e alle informazioni specifiche sul task che fornisce.

Entrambi i metodi possono aiutarvi a comprendere la temporizzazione dei task, ma non sono ugualmente adatti a tutte le situazioni.

Usate la funzione TIME() quando vi serve un controllo semplice e rapido, e la risoluzione a livello di millisecondi è sufficiente. È facile da implementare e utile per confronti temporali di base.

Utilizzate la libreria CmpIecTask quando vi servono informazioni più precise sui task, desiderate evitare la logica di temporizzazione manuale o necessitate di una risoluzione a livello di microsecondi per l'analisi delle prestazioni.

Per task di movimento, task di sincronizzazione o applicazioni di comando con requisiti di temporizzazione più restrittivi, la libreria CmpIecTask è solitamente la scelta migliore.

Il timing dei task in CODESYS è particolarmente rilevante quando le prestazioni del comando, il comportamento del movimento o la sincronizzazione della macchina devono essere valutati durante la messa in servizio o la risoluzione dei problemi.

Nell'ambiente software di Festo, CODESYS può essere parte di un più ampio flusso di lavoro di ingegneria e controllo. Festo AX Controls supporta il controllo deterministico in tempo reale nella programmazione standard secondo IEC 61131-3, incluso CODESYS, e supporta anche i linguaggi ad alto livello come C/C++, C# e Python.

Festo Automation Suite supporta la messa in servizio, la programmazione e la diagnosi. Può trasferire dispositivi AX Controls come CEPE dalla topologia all'ambiente di programmazione CODESYS senza ulteriori passaggi di configurazione, consentendo agli utenti di continuare direttamente con la sequenza della macchina.

Utilizzate questo tutorial come metodo pratico CODESYS per verificare i tempi dei task. Proseguite poi con il software, la licenza o la risorsa didattica di Festo più adatta alla fase progettuale successiva.

  • Il tempo di ciclo del task indica quanto dura una determinata operazione o task all'interno di un sistema di comando
  • Il monitoraggio del tempo di ciclo del task aiuta gli ingegneri a ottimizzare le prestazioni, rilevare i colli di bottiglia e migliorare la stabilità del sistema
  • La funzione TIME() è facile da usare e veloce da implementare, ma fornisce una risoluzione a livello di millisecondo
  • La libreria CmpIecTask fornisce informazioni specifiche suli task e una risoluzione a livello di microsecondo
  • Usate la funzione TIME() per controlli semplici e la libreria CmpIecTask per un'analisi più precisa del tempo di ciclo
  • Il controllo rigoroso del movimento o i task di sincronizzazione richiedono spesso una maggiore attenzione alla tempistica effettiva del task
  • Le risorse software e di supporto Festo possono aiutare gli utenti a passare dalla risoluzione dei problemi di CODESYS alla messa in servizio, alla gestione delle licenze e all'implementazione dell'edge control.