Maintien de la cohérence des données pour un fonctionnement multicœur
Par défaut, le programme IEC de la visualisation (Visu_Prg
) s'exécute dans sa propre tâche (VISU_TASK
). La visualisation affiche généralement les données de l'application principale. Les données de l'application principale sont traitées dans une autre tâche. Pour cette raison, la cohérence des données est un sujet important lorsque l'application est exécutée sur un contrôleur multicœur.
Il est important de savoir qu'il n'y a pas d'affectation atomique (indivisible dans le temps) pour le STRING
et WSTRING
types de données ainsi que pour les données structurées. La date ne doit pas être modifiée lorsqu'une date de ces types est dépassée. Cependant, si la date est modifiée par une tâche autre que VISU_TASK
, il se peut qu'il s'affiche de manière incorrecte pendant une courte période.
Ci-dessous, vous pouvez voir où vous devez maintenir explicitement la cohérence des données lors de la création d'un CODESYS visualisation pour une utilisation sur un système multicœur.
Astuce
Faites attention aux remarques générales sur fonctionnement multicœur.
Lecture des données CEI en un cycle de visualisation
Si l'affichage d'un élément de visualisation dépend de plusieurs variables, l'affectation de ces variables n'est pas cohérente avec le cycle. Par exemple, si un élément est déplacé dans la direction x et y au moyen de deux variables CEI, cela peut avoir pour effet que l'élément de visualisation se déplace uniquement dans la direction x dans un cycle, puis les déplacements dans la direction y- direction au cycle suivant.
Il en va de même pour les données utilisées par plusieurs éléments de visualisation.
Exemple : L'élément 1 lit la variable d'état invisible
et met à jour son état. Une autre tâche que VISU_TASK
modifie la variable CEI respective. L'élément 2 lit la variable d'état Invisible
et met à jour son état. Résultat : les éléments ont un état différent pendant une courte période. Ce comportement peut se produire pour toutes les variables d'animation.
Actions d'entrée génériques
Changement de visualisation | Notez les problèmes décrits ci-dessus lors de l'utilisation de types de données de chaîne. |
Exécuter la commande | Notez les problèmes décrits ci-dessus lors de l'utilisation de types de données de chaîne. |
Basculer la visualisation du cadre | Notez les problèmes décrits ci-dessus lors de l'utilisation de types de données de chaîne. |
Variable d'écriture | Comme la lecture, aucune affectation atomique n'est possible pour l'écriture dans |
Exécuter le code ST | Lors de la création du code ST, assurez-vous que la cohérence des données n'est pas compromise. |
Variables d'interface d'une visualisation
Si une structure est transférée via VAR_INPUT
, la cohérence des données n'est pas garantie. Utiliser des données structurées via VAR_IN_OUT
, ou utilisez une interface via VAR_INPUT
.
Gestion des utilisateurs de la visualisation
Si la gestion des utilisateurs est appelée via les interfaces publiques (VisuUserMgmt.library
), alors cela doit toujours provenir du VISU_TASK
.
Elément de visualisation 'Polygone'
le Polygone l'élément de visualisation a le Points dynamiques biens. Ici, vous pouvez configurer un tableau de points. Notez que la lecture de l'ensemble du tableau n'est pas atomique.
Variables de type de données STRING
Il n'y a pas d'affectation atomique pour toutes les propriétés configurées avec des variables du type de données STRING
. Exemple : La variable de contrôle de l'URL du Navigateur Web élément de visualisation.
Bibliothèques utilisateur
|
|
| Ne pas utiliser le bloc fonction |
| Attention : L'accès à la structure se produit lors de l'utilisation |
| Attention : L'accès à la chaîne se produit lors de l'utilisation |
Dialogues
La transmission de paramètres pour les boîtes de dialogue doit être considérée de la même manière que pour les types de données complexes. Lorsqu'une boîte de dialogue est ouverte, une copie de tous les paramètres passés est créée.
Exception: VAR_IN_OUT
paramètres qui ont {attribute 'VAR_IN_OUT_AS_POINTER'}
. Si cet attribut est affecté, aucune copie n'est créée et la boîte de dialogue fonctionne sur l'objet d'origine.