Opérations de Déplacement
Transfert & Gestion de Données
Le transfert de données est le système circulatoire de votre programme PLC. Gérez efficacement les copies de variables, la sérialisation de structures et les manipulations de blocs mémoire.
Que sont les opérations de déplacement dans TIA Portal ?
Les opérations de déplacement permettent de copier des données d'un emplacement mémoire à un autre. Elles vont de la simple copie d'une variable (MOVE) à la manipulation complexe de structures entières pour la communication (Serialize/Deserialize) ou la gestion de zones de données contiguës (MOVE_BLK).
TIA Portal offre des instructions modernes pour l'accès symbolique, la gestion dynamique via les types Variant, et des fonctions optimisées pour les Array DB, tout en conservant des instructions Legacy pour la compatibilité avec les anciens systèmes S7-300.
Transfert de Base
Instructions fondamentales de copie et de formatage
MOVE — Copier valeur
MOVECe qu'il fait
Copie le contenu de l'entrée IN vers la sortie OUT. Si le type de données diffère, une conversion implicite peut avoir lieu si elle est sécurisée.
Quand l'utiliser
Initialiser des variables, copier des consignes IHM, ou transférer des résultats de calculs.
Conseils Pro
Vous pouvez ajouter plusieurs sorties (OUT1, OUT2...) pour copier une valeur vers plusieurs destinations simultanément.
En SCL, utilisez simplement l'affectation : destination := source;
Fonctionne avec presque tous les types de données (Bool, Int, Real, Struct, String).
Serialize / Deserialize
SERCe qu'ils font
Serialize convertit une structure complexe en un flux d'octets séquentiels (Array of Byte). Deserialize fait l'inverse.
Quand l'utiliser
Préparation de données pour l'envoi via protocoles de communication (TCP/IP, UDP) ou stockage compact.
Conseils Pro
Utilisez le paramètre POS pour suivre l'index de remplissage dans le tampon de destination.
Indispensable pour les échanges avec des systèmes tiers ne comprenant pas les UDT Siemens.
Assurez-vous que la taille du tampon est suffisante pour éviter les erreurs d'exécution.
SWAP — Permuter
SWAPCe qu'il fait
Inverse l'ordre des octets (Endianness) dans l'opérande IN.
Quand l'utiliser
Communication avec des périphériques utilisant le format 'Little-Endian' alors que le PLC utilise le 'Big-Endian'.
Conseils Pro
Généralement utilisé sur des types Word ou DWord.
Utile pour le traitement des données provenant de certains capteurs Modbus.
Peut être utilisé pour réorganiser des codes ASCII reçus à l'envers.
Déplacement de Blocs
Manipulation de zones mémoire massives et contiguës
MOVE_BLK / UMOVE_BLK
MOVE_BLKCe qu'il fait
Copie un nombre défini d'éléments d'un Array source vers un Array destination. UMOVE_BLK est la version non interruptible (atomique).
Quand l'utiliser
Gestion de buffers, archivage de données historiques, ou duplication de recettes de fabrication.
Conseils Pro
L'index de départ (COUNT) définit le nombre d'éléments à copier.
UMOVE_BLK garantit que les données ne sont pas modifiées par un OB d'alarme pendant la copie.
Les types de données source et destination doivent être identiques.
MOVE_BLK_VARIANT
Ce qu'il fait
Version avancée de MOVE_BLK supportant les types de données Variant pour un adressage flexible.
Quand l'utiliser
Développement de blocs de bibliothèque réutilisables travaillant sur des tableaux de tailles ou de types différents.
Conseils Pro
Permet de copier entre des tableaux dont les types sont déterminés à l'exécution.
Utilisez CountOfElements pour automatiser le paramètre COUNT.
Très puissant en S7-1500 pour la programmation générique.
Remplissage de Zone
Initialisation rapide de plages mémoire
FILL_BLK / UFILL_BLK
FILLCe qu'il fait
Remplit une zone mémoire (Array) avec une valeur unique spécifiée à l'entrée IN.
Quand l'utiliser
Réinitialiser un tableau de mesures à zéro, ou initialiser un buffer avec une valeur par défaut.
Conseils Pro
UFILL_BLK est préférable pour les zones critiques partagées avec des interruptions.
Beaucoup plus performant qu'une boucle FOR pour initialiser un grand tableau.
COUNT spécifie le nombre d'éléments à remplir à partir du pointeur spécifié.
Scatter / Gather
Décomposition et composition de bits
SCATTER / GATHER
Ce qu'ils font
SCATTER décompose un mot (Word, DWord...) en bits individuels vers une structure ou un tableau. GATHER fait l'inverse.
Quand l'utiliser
Extraction de bits d'état d'un mot de diagnostic ou composition d'un mot de commande à partir de bits de contrôle.
Conseils Pro
Remplace avantageusement une multitude d'accès aux bits (ex: %X0).
Disponible sur S7-1200 et S7-1500.
Garantit un code plus propre et plus facile à maintenir.
Accès aux Array DB
Lecture et écriture dans des blocs de données de type tableau
ReadFromArrayDB / WriteToArrayDB
Ce qu'ils font
Permettent de lire ou d'écrire un élément spécifique dans un bloc de données configuré comme 'Array DB'.
Quand l'utiliser
Gestion de grandes listes de données où l'indexation doit être dynamique et rapide.
Conseils Pro
Les versions 'L' (ex: ReadFromArrayDBL) accèdent à la mémoire de chargement (Load Memory) pour les données peu fréquentes.
L'utilisation d'Array DB est souvent plus performante que l'accès indexé classique.
Vérifiez que l'index est dans les bornes pour éviter une erreur d'accès.
Manipulation de Variant
Outils pour la programmation dynamique
VariantGet / VariantPut
Ce qu'ils font
VariantGet extrait la valeur d'une variable Variant vers une variable typée. VariantPut écrit une valeur typée dans une variable Variant.
Quand l'utiliser
Traitement de données dont le type exact n'est connu qu'au moment de l'appel du bloc.
Conseils Pro
Utilisez EQ_Type pour vérifier le type avant d'extraire la valeur.
Fondamental pour créer des fonctions de communication génériques.
CountOfElements retourne le nombre d'éléments si le Variant pointe vers un Array.
Bornes de Tableaux
Détermination dynamique des limites
LOWER_BOUND / UPPER_BOUND
Ce qu'il fait
Retourne la borne inférieure (LOWER) ou supérieure (UPPER) d'un tableau passé en paramètre Variant.
Quand l'utiliser
Boucler sur un tableau de taille inconnue (ex: Array[*] of MyUDT).
Conseils Pro
Indispensable pour l'écriture de boucles FOR robustes : FOR i := LOWER_BOUND(...) TO UPPER_BOUND(...) DO
Fonctionne aussi bien sur les tableaux à une qu'à plusieurs dimensions.
Le paramètre DIM spécifie la dimension souhaitée (1 par défaut).
Instructions Legacy
Compatibilité avec les anciens systèmes S7-300/400
Les instructions comme BLKMOV, FILL et FieldRead/FieldWrite sont conservées pour la compatibilité. Pour les nouveaux projets S7-1200/1500, privilégiez MOVE_BLK, FILL_BLK et les accès symboliques directs.
Comparaison des méthodes de copie
Choisir la bonne instruction de transfert
| Vous devez... | Instruction recommandée | Exemple |
|---|---|---|
| Copier une variable simple | MOVE | Consigne -> Actuel |
| Copier une zone mémoire | MOVE_BLK | Tampon FIFO |
| Initialiser un tableau | FILL_BLK | Reset défauts |
| Préparer un message TCP | Serialize | Structure -> Flux octets |
| Éclater un mot en bits | SCATTER | Diagnostic mot -> structure |
| Accès dynamique | VARIANT | Bloc bibliothèque universel |
Foire Aux Questions
Quelle est la différence entre MOVE et MOVE_BLK ?
MOVE est destiné à copier une seule valeur ou une structure complète d'un coup. MOVE_BLK est optimisé pour copier une partie d'un tableau (un certain nombre d'éléments consécutifs).
Pourquoi utiliser UMOVE_BLK au lieu de MOVE_BLK ?
Le 'U' signifie Uninterruptible. Cette instruction garantit que l'opération de copie ne sera pas interrompue par un cycle d'alarme (OB prioritaires), assurant la cohérence totale des données copiées.
Quand utiliser Serialize et Deserialize ?
Ces instructions sont vitales lorsque vous devez envoyer des données structurées via des protocoles 'bruts' comme TSEND/TRCV ou vers des équipements tiers. Elles gèrent l'alignement des octets de manière standardisée.
MOVE_BLK fonctionne-t-il avec des adresses absolues (P#DB1.DBX0.0...) ?
Oui, mais TIA Portal encourage l'utilisation d'accès symboliques. Pour l'adressage absolu complexe, BLKMOV (Legacy) est encore utilisé, bien que MOVE_BLK_VARIANT soit la solution moderne recommandée.