FP_MC_PROTOCOL_WRITE

Écrire les données dans des dispositifs externes via le protocole MC

L’automate a les droits de transmission dans la communication maître. La communication est exécutée en envoyant des commandes aux dispositifs qui prennent en charge le protocole MC et en recevant des réponses. En spécifiant une adresse mémoire et en exécutant une instruction d’écriture dans un programme utilisateur, l’automate génère automatiquement un message selon le protocole.

Paramètres

Entrée

Port (WORD, INT, UINT)

Port Ethernet, par ex. SYS_ETHERNET_USER_CONNECTION_1

Source (ANY)

Zone de mots ou registre sur le maître pour les données à écrire vers l’esclave.

Words_Bits (WORD, INT, UINT)

La méthode de transfert varie selon le type de données de Source.

Zone mémoire spécifiée par Source

Méthode de transfert

Nombre de données transférées

Remarques

Zone mémoire 16 bits

WX, WY, WR, WL, DT, LD

Transmission en mots

1-960 mots

Zone mémoire 1 bit

X,Y,R,L,DT,n,LD,n

Transmission en bits

1–7168 bits

Lorsque le nombre de données transférées est impair, un code temporaire de 4 bits 16#0 est ajouté.

DestMemoryArea (WORD, INT, UINT)

Zone mémoire de l’esclave vers laquelle les données sont écrites.

Unité

Type de zone mémoire

Variable système

Bit

Entrée

X

Hexadécimal

SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X

Sortie

Y

Hexadécimal

SYS_MC_PROTOCOL_MEMORY_AREA_OUTPUT_Y

Drapeau de liaison

B

Hexadécimal

SYS_MC_PROTOCOL_MEMORY_AREA_LINK_RELAY_B

Drapeau interne

M

Décimal

SYS_MC_PROTOCOL_MEMORY_AREA_INTERNAL_RELAY_M

Bit interne sauvegardé

L

Décimal

SYS_MC_PROTOCOL_MEMORY_AREA_LATCH_RELAY_L

Mot

Registre de données

D

Décimal

SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D

Registre de fichiers

R

Décimal

SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_R
ZR

Hexadécimal

SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_ZR

Registre de liaison

W

Hexadécimal

SYS_MC_PROTOCOL_MEMORY_AREA_LINK_REGISTER_W
DestMemoryOffset (DWORD, DINT, UDINT)

Offset de la zone mémoire de l’esclave vers laquelle les données sont écrites.

Intervalle : 16#016#F7FFFF (0–16252927)

Sortie

Result (WORD, INT, UINT)

Pour FP7 uniquement :

  • 0 : Exécution terminée normalement

  • 1 : Port de communication utilisé pour la communication maître

  • 2 : Port de communication utilisé pour la communication esclave

  • 3 : Le nombre d’instructions de communication maître autorisé est dépassé

  • 4 : Temps d’attente transmission dépassé

  • 5 : Temps d’attente de réception de la réponse dépassé

  • 6 : Erreur dans les données reçues

    Cette erreur apparaît lorsqu’un télégramme anormal est reçu, par ex. en cas d’erreur de format dans l’en-tête. Dans ce cas, les données reçues sont ignorées.

  • 7 : Zone insuffisante réservée dans l’affectation des E/S

    Cette erreur apparaît lorsque le nombre de connexions Ethernet dépasse 16 (Communication Ethernet avancée). Vérifiez que la zone de mots réservée pour les drapeaux de contrôle de communication est suffisante pour le nombre de connexions Ethernet.

  • 8 : Tampon de transmission actuellement utilisé

    Cette erreur peut apparaître pour les automates FP7 avec une version 4.57 ou supérieure du firmware.

En cas d’erreurs de communication, d’autres codes d’erreur spécifiques au protocole MC peuvent s’afficher. Pour en savoir plus, veuillez consulter la documentation de l’automate utilisé.

Pour les autres automates : défini sur 0

Chronogramme

  1.  (1) Drapeau "Effacer pour envoi" de la communication maître, par ex. sys_bIsEthernetUserConnection1MasterCommunication
  2.  (2) Vérifier que le drapeau "Effacer pour envoi" de la communication maître est TRUE et que le drapeau d’envoi de la communication maître est FALSE
  3.  (3) Drapeau d’envoi de la communication maître, par ex. sys_bIsEthernetUserConnection1MasterCommunicationActive

    Envoi en cours : Drapeau d’envoi de la communication maître est TRUE

    Envoi terminé : Drapeau d’envoi de la communication maître est FALSE

  4.  (4) Exécuter cette instruction
  5.  (5) Drapeau "Envoi terminé" de la communication maître, par ex. sys_bIsEthernetUserConnection1CommunicationError

    Exécution terminée normalement : FALSE

    Exécution terminée anormalement : TRUE

  6.  (6) Envoyer les données
  7.  (7) Traitement de la réponse reçue

Drapeaux d’erreur

sys_bIsOperationErrorHold (passe à TRUE et reste TRUE)
  • Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.

  • Si les données de l’esclave ou du maître sont en dehors de la plage d’adresses disponible.
  • Si le port Ethernet est incorrect ou si la connexion Ethernet est fermée.

  • Si le nombre de données envoyées, spécifié par Words_Bits est incorrect.

sys_bIsOperationErrorNonHold (passe à TRUE pendant un cycle)
  • Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.

  • Si les données de l’esclave ou du maître sont en dehors de la plage d’adresses disponible.
  • Si le port Ethernet est incorrect ou si la connexion Ethernet est fermée.

  • Si le nombre de données envoyées, spécifié par Words_Bits est incorrect.

Exemple

En-tête du POU

Toutes les variables d’entrée et de sortie utilisées pour programmer cette fonction ont été déclarées dans l’en-tête du POU. Le même en-tête de POU est utilisé pour tous les langages de programmation.

	VAR
		bEnable: BOOL:=FALSE;
		awValues: ARRAY [0..2] OF WORD:=[3(0)];
		diMemoryOffset: DINT:=0;
		iResult: INT:=0;
		abValues: ARRAY [0..2] OF BOOL:=[3(FALSE)];
		iPort: INT:=0;
	END_VAR

Corps en LD

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_COMMENT,,Bit transfer,2,0,10,1,);
B(B_COMMENT,,Memory Areas:	SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X ^SYS_MC_PROTOCOL_MEMORY_AREA_OUTPUT_Y ^SYS_MC_PROTOCOL_MEMORY_AREA_LINK_RELAY_B ^SYS_MC_PROTOCOL_MEMORY_AREA_INTERNAL_RELAY_M ^SYS_MC_PROTOCOL_MEMORY_AREA_LATCH_RELAY_L,13,0,39,6,);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 8 ;
        NETWORK_BODY
B(B_VARIN,,iPort,26,2,28,4,);
B(B_VARIN,,abValues,18,3,20,5,);
B(B_VARIN,,SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X,26,5,28,7,);
B(B_VARIN,,diMemoryOffset,26,6,28,8,);
B(B_VAROUT,,iResult,41,2,43,4,);
B(B_CONTACT,,bEnable,5,1,7,3,);
B(B_F,FP_MC_PROTOCOL_WRITE!,,28,0,41,8,,?DEN?DPort?DSource?DWords_Bits?HDestMemoryArea?DDestMemoryOffset?AENO?CResult);
B(B_F,Size_Of_Var!,,21,4,28,6,,?D?C);
L(1,2,5,2);
L(7,2,28,2);
L(20,4,28,4);
L(21,4,21,5);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
B(B_COMMENT,,Memory Areas:	 ^SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D ^SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_R ^SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_ZR ^SYS_MC_PROTOCOL_MEMORY_AREA_LINK_REGISTER_W,13,0,39,5,);
B(B_COMMENT,,Word Transfer,2,0,10,1,);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 8 ;
        NETWORK_BODY
B(B_VARIN,,iPort,26,2,28,4,);
B(B_VARIN,,awValues,18,3,20,5,);
B(B_VARIN,,SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D,26,5,28,7,);
B(B_VARIN,,diMemoryOffset,26,6,28,8,);
B(B_VAROUT,,iResult,41,2,43,4,);
B(B_CONTACT,,bEnable,5,1,7,3,);
B(B_F,FP_MC_PROTOCOL_WRITE!,,28,0,41,8,,?DEN?DPort?DSource?DWords_Bits?HDestMemoryArea?DDestMemoryOffset?AENO?CResult);
B(B_F,Size_Of_Var!,,21,4,28,6,,?D?C);
L(1,2,5,2);
L(7,2,28,2);
L(20,4,28,4);
L(21,4,21,5);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
B(B_COMMENT,,only valid for ethernet ports! ^--> Valid Ports:	SYS_ETHERNET_USER_CONNECTION_1 - SYS_ETHERNET_USER_CONNECTION_216,3,1,52,4,);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corps en ST

(*Bit transfer*)
If (bEnable) then
    FP_MC_PROTOCOL_WRITE(Port := iPort,
                         Source := abValues,
                         Words_Bits := Size_Of_Var(abValues), 
                         DestMemoryArea := SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X,
                         DestMemoryOffset := diMemoryOffset,
                         Result => iResult);
End_if;
(*Word transfer*)
If (bEnable) then
    FP_MC_PROTOCOL_WRITE(Port := iPort,
                         Source := awValues,
                         Words_Bits := Size_Of_Var(awValues), 
                         DestMemoryArea := SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D,
                         DestMemoryOffset := diMemoryOffset,
                         Result => iResult);
End_if;

Modifié le : 2024-10-23Commentaires sur cette pageAssistance téléphonique