Copie (COP) - Copie synchrone (CPS)
Ces informations s’appliquent aux automates
CompactLogix
5370, ControlLogix
5570, Compact GuardLogix
5370, GuardLogix
5570, Compact GuardLogix
5380, CompactLogix
5380, ControlLogix
5580, GuardLogix
5580 et ControlLogix 5590. Les différences entre les automates sont signalées, le cas échéant.Les instructions COP et CPS copient les valeurs dans la source vers les valeurs dans la destination. Source reste inchangée.
Langues disponibles
Diagramme à relais


Bloc fonctionnel
Cette instruction n'est pas disponible dans le bloc fonctionnel.
Texte structuré
COP(Source,Dest,Length);
CPS(Source,Dest,Length);
Opérandes
IMPORTANT:
Une opération inattendue peut se produire dans les cas suivants :
- Les opérandes de balise de sortie sont remplacés.
- Les membres d'un opérande de structure sont remplacés.
- Sauf lorsque cela est spécifié, les opérandes de structure sont partagés par plusieurs instructions.
Diagramme à relais
Opérande | Type de données Automates CompactLogix 5370, ControlLogix 5570, Compact GuardLogix 5370 et GuardLogix 5570 | Type de données Automates CompactLogix 5380, ControlLogix 5580, Compact GuardLogix 5380 GuardLogix 5580 et ControlLogix 5590 | Format | Description |
|---|---|---|---|---|
Source | SINT INT DINT LINT REAL String type structure | SINT INT DINT LINT USINT UINT UDINT ULINT REAL LREAL String type structure DT REF_TO_AXIS_VIRTUAL REF_TO_AXIS_CONSUMED REF_TO_AXIS_GENERIC_DRIVE REF_TO_AXIS_SERVO REF_TO_AXIS_SERVO_DRIVE | balise | Élément initial à copier. Pour les automates qui prennent en charge les types de données de mouvement REF_TO, le type d’opérande d’axe pris en charge peut être remplacé par un type de REF_TO équivalent. L’instruction Référence(Reference, REF) associe une référence à une balise concrète d’axe ou de système de coordonnées. |
Dest | SINT INT DINT LINT REAL String type structure | SINT INT DINT LINT USINT UINT UDINT ULINT REAL LREAL String type structure DT | balise | Élément initial à remplacer par la Source |
Length | SINT INT DINT | SINT INT DINT | balise immédiate | Nombre d’éléments Destinataires à copier |
Texte structuré
Opérande | Type de données Automates CompactLogix 5370, ControlLogix 5570, Compact GuardLogix 5370 et GuardLogix 5570 | Type de données Automates CompactLogix 5380, ControlLogix 5580, Compact GuardLogix 5380 GuardLogix 5580 et ControlLogix 5590 | Format | Description |
|---|---|---|---|---|
Source | SINT INT DINT LINT REAL String type structure | SINT INT DINT LINT USINT UINT UDINT ULINT REAL LREAL String type structure DT REF_TO_AXIS_VIRTUAL REF_TO_AXIS_CONSUMED REF_TO_AXIS_GENERIC_DRIVE REF_TO_AXIS_SERVO REF_TO_AXIS_SERVO_DRIVE REF_TO_AXIS_CIP_DRIVE | balise | Élément initial à copier |
Dest | SINT INT DINT LINT REAL String type structure | SINT INT DINT LINT USINT UINT UDINT ULINT REAL LREAL String type structure DT | balise | Élément initial à remplacer par la Source |
Length | SINT INT DINT | SINT INT DINT | immédiat balise | Nombre d’éléments Destinataires à copier |
Reportez-vous à Syntaxe du texte structuré pour plus d’informations concernant la syntaxe des expressions dans le texte structuré.
Affecte les indicateurs d'état mathématique
Non
Défauts majeurs/mineurs
Aucun spécifique à cette instruction. Reportez-vous à la section Indexer via des tableaux pour consulter les défauts d’indexation par tableau.
Exécution
Diagramme à relais
Condition/état | Action entreprise |
|---|---|
Préscrutation | N/A |
La condition d'entrée d'échelon est égale à faux | Définir la condition de sortie d’échelon sur la condition d’entrée d’échelon. |
La condition d'entrée d'échelon est égale à vrai | Définir la condition de sortie d’échelon sur la condition d’entrée d’échelon. L'instruction copie les données. |
Post-scrutation | N/A |
Texte structuré
Condition/état | Action entreprise |
|---|---|
Préscrutation | Reportez-vous à Pré-scrutation dans le tableau Diagramme à relais |
Exécution normale | Reportez-vous à condition d'entrée d'échelon est vraie dans le tableau Diagramme à relais. |
Post-scrutation | Reportez-vous à Post-scrutation dans le tableau Diagramme à relais. |
Pendant l'exécution des instructions COP et CPS, d'autres actions de l'automate peuvent tenter d'interrompre la copie et de modifier la source :
Si la source ou la destination est : | Et doit : | Sélectionnez : | Remarques |
|---|---|---|---|
| Empêcher la modification des données source pendant la copie | CPS | Les tâches qui tentent d'interrompre une instruction CPS sont repoussées jusqu'à ce que l'instruction soit terminée. Pour estimer le temps d’exécution de l’instruction CPS, reportez-vous au Manuel d’utilisation du système ControlLogix , publication 1756-UM001.Utilisez le code de l'application de verrouillage pour vous assurer qu'un client à distance ne met pas à jour la source pendant l'exécution de l'instruction CPS. |
Autoriser la modification des données source pendant la copie | COP | ||
Autre | ---------------> | COP |
Les instructions COP et CPS fonctionnent sur une mémoire contiguë et exécutent une copie mémoire directe d'octet à octet.
Lorsque les types de données source et de destination sont différents, le nombre d'octets copiés est égal à la plus petite des valeurs suivantes :
- La quantité demandée est égale à la longueur x (nombre d'octets dans un élément destinataire)
- Le nombre d'octets dans l'étiquette destinataire
- Pour les automatesCompact GuardLogix5380,CompactLogix5380,ControlLogix5580,GuardLogix5580 ou ControlLogix 5590 : le nombre d'octets dans la balise sourceCONSEIL: La fin de l'étiquette source ou destinataire est définie comme le dernier octet de l'étiquette de base. Si la balise est une structure, la fin de la balise correspond au dernier octet du dernier élément de la structure. Cela signifie que les instructions COP et CPS peuvent écrire après la fin d'un tableau de membre, mais pas après la fin de l'étiquette de base.
IMPORTANT:
Tester et confirmer que l'instruction ne modifie pas des données qu'elle ne devrait pas modifier.
Exemples
Exemple 1
Copier un tableau.
Si activée, l'instruction COP copie 40 octets depuis le tableau array_4 vers le tableau array_5.
array_4 est un DINT (4 octets par élément) et contient 10 éléments (taille totale = 40 octets)
array_5 est un DINT (4 octets par élément) et contient 10 éléments (taille totale = 40 octets).
Length indique que 10 éléments destinataires doivent être copiés, donc 40 octets sont copiés.
Diagramme à relais

Texte structuré
COP(array_4[0],array_5[0],10);
Exemple 2
Copier une structure.
Si activée, l'instruction COP copie la structure timer_1 dans l'élément 5 de array_timer.
timer_1 est un TIMER (taille totale = 12 octets).
array_timer est un TIMER (12 octets par élément) et contient 10 éléments (taille totale = 120 octets).
Length indique que 1 élément destinataire doit être copié, donc 12 octets sont copiés.
Diagramme à relais

Texte structuré
COP(timer_1,array_timer[5],1);
Exemple 3
Copier les données du tableau tout en empêchant la modification des données tant que la copie n'est pas terminée.
Le tableau project_data (100 éléments) stocke diverses valeurs qui changent à différents moments dans l'application. Pour envoyer une image complète du tableau project_data dans une instance à temps vers un autre automate, l'instruction CPS copie project_data dans produced_array. Pendant que l'instruction CPS copie les données, aucune mise à jour E/S ni autre tâche ne peut modifier les données. La balise produced_array génère les données sur un réseau ControlNet pour utilisation par d’autres automates.
project_data est un DINT (4 octets par élément) et contient 100 éléments (taille totale = 400 octets)
produced_array est un DINT (4 octets par élément) et contient 100 éléments (taille totale = 400 octets).
Length indique que 100 éléments destinataires doivent être copiés, donc 400 octets sont copiés.
Diagramme à relais

Texte structuré
CPS(project_data[0],produced_array[0],100);
Exemple 4
Copier les données vers une balise produite tout en empêchant l’envoi des données tant que la copie n’est pas terminée.
Local:0:I.Data stocke les données d'entrée pour le réseau DeviceNet connecté au module 1756-DNB dans le logement 0. Pour synchroniser les entrées avec l'application, l'instruction CPS copie les données d'entrées dans input_buffer. Pendant que l'instruction CPS copie les données, aucune mise à jour E/S ne peut modifier les données. Pendant que l'application s'exécute, elle utilise comme entrées les données d'entrées contenues dans input_buffer.
Local:O:I.Data est un DINT (4 octets par élément) et contient 2 éléments (taille totale = 8 octets)
input_buffer est un DINT (4 octets par élément) et contient 20 éléments (taille totale = 80 octets).
Length indique que 20 éléments destinataires doivent être copiés (4 X 20 = 80 octets). Toutefois, la source ne peut fournir que 8 octets, donc 8 octets sont copiés.
Diagramme à relais

Texte structuré
CPS(Local:0:I.Data[0], input_buffer[0], 20);
Exemple 5
Initialiser une structure de tableau, initialiser le premier élément, puis utiliser COP pour le répliquer dans le reste du tableau.

Cet exemple initialise des structures de temporisateur ou de tableau. Si activées, les instructions MOVE initialisent les valeurs .PRE et .ACC du premier élément array_timer. Si activée, l'instruction COP copie un bloc contigu d'octets, en commençant à array_timer[0]. La longueur est de neuf structures de temporisateur.
array_timer est un TIMER (12 octets par élément) et contient 15 éléments (taille totale = 180 octets)
Length indique que 10 élément destinataire doit être copié, donc 120 octets sont copiés.
Diagramme à relais

Texte structuré
IF S:FS THEN
array_timer[0].pre := 500;
array_timer[0].acc := 0;
COP(array_timer[0],array_timer[1],10);
END_IF;
Exemple 6
Copier des tableaux de différentes tailles.
Si activée, l'instruction COP copie les octets depuis le tableau SINT array_4 vers le tableau DINT array_5.
array_4 est un SINT (1 octet par élément) et contient 5 éléments (taille totale = 5 octets)
array_5 est un DINT (4 octets par élément) et contient 10 éléments (taille totale = 40 octets).
Length indique que 20 éléments destinataires doivent être copiés (4 X 20 = 80 octets). Toutefois, la destination ne peut accepter que 40 octets, et la source ne peut fournir que 5 octets, donc 5 octets sont copiés.
Diagramme à relais

Texte structuré
COP(array_4[0],array_5[0],10);
Fournir une réponse