Le temps de cycle d’une tâche fait partie des valeurs utiles de tout ingénieur désireux de comprendre le comportement d’une application de commande pendant son exécution. Si une tâche est plus longue que prévu, cela peut affecter la temporisation du processus, la synchronisation, le dépannage et la stabilité du système.

CODESYS est un environnement de développement destiné à la programmation d’applications de commande conformément à la norme CEI 61131-3. Il s'utilise dans les systèmes d’automatisation et de commande où les tâches doivent s’exécuter de manière fiable sous certaines conditions temporelles.

Dans les projets CODESYS, un moniteur du temps de cycle réel des tâches peut aider les ingénieurs à optimiser les performances, à identifier les goulots d’étranglement et à détecter les comportements temporels pouvant affecter la séquence de fonctionnement de la machine. C'est d'autant important lorsque les tâches de commande et de communication ou les fonctions liées au mouvement doivent se tenir à une fenêtre temporelle spécifique.

Ce tutoriel décrit deux méthodes de mesure du temps de cycle réel des tâches dans CODESYS :

  • Utilisation de la fonction intégrée TIME()
  • Utilisation de la bibliothèque CmpIecTask

Les deux méthodes sont pertinentes. Le bon choix dépend de la précision recherchée et du niveau de détail souhaité pour analyser le comportement des tâches.

Le temps de cycle d’une tâche correspond à la durée d’exécution d’une tâche ou d’une opération spécifique au sein d’un système de commande. Dans une application de commande, cette valeur permet de déterminer si le code s’exécute dans la plage temporelle prévue.

La surveillance du temps de cycle des tâches est utile pour diverses activités d’ingénierie :

  • Vérifier qu’une tâche demeure dans le temps de cycle configuré
  • Identifier les sections de code qui allongent le délai d’exécution
  • Détecter les variations temporelles inattendues
  • Faciliter le dépannage pendant la mise en service
  • Améliorer la synchronisation des processus
  • Contribuer à stabiliser le comportement de la commande

La stabilité du temps de cycle d'une tâche ne suffit pas pour résoudre tous les problèmes de commande, mais elle constitue un excellent point de départ. Si le temps de cycle réel est plus long que prévu ou varie fortement, une analyse plus approfondie de l’application peut être nécessaire.

Dans CODESYS, une tâche définit quand et comment un programme ou une fonction s'exécute. Le temps de cycle d'une tâche correspond au temps nécessaire pour terminer cette exécution.

Par exemple, une tâche cyclique peut être configurée pour s’exécuter toutes les x millisecondes. Si l’exécution du code de la tâche prend trop de temps, la commande risque de ne pas terminer la tâche dans le délai prévu. Les performances, la synchronisation des processus ou le comportement du mouvement peuvent en être affectés.

La mesure du temps de cycle d’une tâche peut s’avérer complexe, car la valeur réelle dépend de plusieurs facteurs :

  • Charge du système
  • Latence du réseau
  • Performances de l'équipement
  • Configuration de la tâche
  • Architecture du logiciel
  • Comportement de la communication
  • La quantité et la structure du code de la tâche

C’est pourquoi la méthode de mesure est importante. Des contrôles de base peuvent s'appuyer sur une méthode de mesure simple du temps. En revanche, une méthode plus précise s'avère nécessaire pour des mesures à la microseconde près ou lorsque des données propres à la tâche sont requises.

Un moyen simple de mesurer le temps écoulé dans CODESYS consiste à utiliser la fonction intégrée TIME().

Le principe de base est simple :
1. Relever l’heure de début avant l’exécution de la section de code
2. Exécuter le code concerné
3. Relever l’heure de fin après l’exécution de la section de code
4. Soustraire l’heure de début de l’heure de fin
5. Utiliser le résultat comme temps écoulé mesuré

Dans l’exemple, deux boucles FOR servent à simuler une tâche dont l’exécution prend du temps. La fonction TIME() relève l’heure avant et après la section contenant les boucles, et la différence entre ces valeurs fournit une estimation du temps d’exécution de la tâche.

Cette méthode peut être utile pour connaître rapidement le temps d’exécution d’une section de code.

L’exemple montre un temps de cycle de tâche mesuré qui varie généralement de 6 à 8 millisecondes. Une trace peut être ajoutée pour surveiller la valeur mesurée au fil du temps. Dans l’exemple, le temps de cycle peut augmenter soudainement jusqu’à 10 millisecondes.

Cette variation est importante. Si une tâche de commande de mouvement logiciel est configurée avec un temps de cycle de 4 millisecondes maximum, le dépassement de ce temps de cycle configuré peut provoquer des exceptions. Le temps d’exécution de la tâche est donc particulièrement important pour les applications soumises à des exigences strictes en matière de mouvement ou de synchronisation.

La fonction TIME() est utile car elle est simple. Elle nécessite peu de code, est facile à comprendre et s'ajoute rapidement à un projet existant.

Elle constitue une excellente option lorsque :

  • Vous avez besoin de vérifier rapidement un temps d’exécution
  • Une résolution à la milliseconde est suffisante
  • Vous souhaitez effectuer une mesure sur une section de code spécifique
  • L’application ne nécessite pas de données temporelles de haute précision

Cependant, la fonction TIME() a aussi ses limites. Elle fournit des valeurs de l'ordre de la milliseconde. Cette précision peut être insuffisante pour les applications exigeant une analyse à la microseconde.

Cette méthode nécessite également un suivi manuel du temps. Vous devez définir où la mesure commence, où elle se termine et comment le temps écoulé est calculé. Elle convient aux contrôles simples mais se révèle moins pratique quand il s'agit de connaître le temps d’exécution de chaque tâche dans un programme de plus grande ampleur.

Pour une mesure plus précise du temps de cycle des tâches, la bibliothèque CmpIecTask est généralement la meilleure option.

La bibliothèque CmpIecTask est incluse dans CODESYS. Cette bibliothèque fournit des fonctions permettant d’accéder aux informations du Gestionnaire de tâches IEC.

Une fois la bibliothèque ajoutée à un projet CODESYS, l’initialisation exige très peu de code. Après l’initialisation, le programme a accès à une structure composée d'informations complètes sur les tâches, notamment le temps de cycle réel de la tâche et le temps de cycle moyen.

Cette approche est davantage axée sur la tâche qu’une mesure manuelle du temps avant et après une section de code. Au lieu de créer votre propre logique temporelle, vous exploitez les informations sur les tâches fournies par la bibliothèque.

Dans l’exemple initial, la même charge de travail simulée est conservée pour pouvoir comparer les méthodes de mesure. La différence réside dans le fait que la bibliothèque CmpIecTask gère plus directement les informations sur le temps de cycle des tâches.

La bibliothèque CmpIecTask est avantageuse si vous recherchez des données temporelles plus précises sur les tâches.

De plus, elle s'intègre aisément dans différentes parties du programme. Elle facilite l’accès aux informations sur les tâches, sans l'insertion fastidieuse des mesures de début et de fin autour de chaque section de code.

Ensuite, la bibliothèque gère l’enregistrement et le calcul des informations sur le temps de cycle des tâches. Elle limite l'effort manuel et le risque d’erreurs dans la logique de mesure.

Enfin, la bibliothèque fournit des valeurs de l'ordre de la microseconde. Plus précise que la fonction TIME(), cette méthode peut être importante dans les applications soumises à des exigences temporelles plus strictes.

Le principal inconvénient est que la bibliothèque doit être ajoutée au projet CODESYS. Toutefois, cette contrainte est souvent mineure au regard de la précision accrue et des informations spécifiques aux tâches qu’elle fournit.

Les deux méthodes peuvent vous aider à comprendre les temps d’exécution des tâches, mais chacune ne convient pas à toutes les situations.

Optez pour la fonction TIME() pour les contrôles simples et rapides qui se contentent de valeurs de l’ordre de la milliseconde. Elle est facile à mettre en œuvre et utile pour des comparaisons simples des temps d’exécution.

Utilisez la bibliothèque CmpIecTask pour obtenir des informations plus précises sur les tâches, éviter une logique temporelle manuelle ou si vous recherchez une résolution de l’ordre de la microseconde pour analyser les performances.

Pour les tâches de mouvement, les tâches de synchronisation ou les applications de commande soumises à des exigences temporelles plus strictes, la bibliothèque CmpIecTask est généralement le meilleur choix.

La temporisation des tâches CODESYS est particulièrement importante lorsqu'il s'agit d'évaluer les performances de la commande, le comportement du mouvement ou la synchronisation de la machine au cours de la mise en service ou du dépannage.

Dans l’environnement logiciel Festo, CODESYS peut s’intégrer à un processus plus global d’ingénierie et de commande. Festo AX Controls assure une commande déterministe en temps réel avec une programmation standard conforme à la norme CEI 61131-3, notamment avec CODESYS, et convient aussi aux langages de haut niveau tels que C/C++, C# et Python.

Festo Automation Suite facilite la mise en service, la programmation et le diagnostic. Il permet de transférer des appareils AX Controls comme CEPE de la topologie vers l’environnement de programmation CODESYS, sans étapes de configuration supplémentaires, afin que les utilisateurs puissent poursuivre la séquence de la machine.

Considérez ce tutoriel comme une méthode pratique pour CODESYS afin de connaître les temps d’exécution des tâches. Poursuivez ensuite avec le logiciel Festo, la licence ou la ressource pédagogique en ligne avec votre travail d’ingénierie.

  • Le temps de cycle d’une tâche indique la durée d’exécution d’une tâche ou d’une opération particulière au sein d’un système de commande
  • La surveillance du temps de cycle des tâches aide les ingénieurs à optimiser les performances, à détecter les goulots d’étranglement et à améliorer la stabilité du système
  • La fonction TIME() est facile à utiliser et mettre en œuvre, mais sa résolution est de l’ordre de la milliseconde
  • La bibliothèque CmpIecTask fournit des informations spécifiques à chaque tâche et une résolution de l’ordre de la microseconde
  • Utilisez la fonction TIME() pour effectuer des contrôles simples et la bibliothèque CmpIecTask pour une analyse plus précise du temps de cycle
  • Les tâches de commande de mouvement précise ou de synchronisation nécessitent souvent une attention plus particulière aux temps réels d’exécution des tâches
  • Les logiciels et les ressources de support Festo peuvent aider les utilisateurs à passer du dépannage CODESYS à la mise en service, à la gestion des licences et à la mise en œuvre de la commande en périphérie