Lire les données de 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 de lecture dans un programme utilisateur, l’automate génère automatiquement un message selon le protocole.
Entrée
Port Ethernet, par ex. SYS_ETHERNET_USER_CONNECTION_1
Zone mémoire sur l’esclave à partir de laquelle les données sont lues
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 |
Offset de la zone mémoire sur l’esclave à partir de laquelle les données sont lues
Intervalle : 16#0–16#F7FFFF (0–16252927)
La méthode de transfert varie selon le type de données de Destination.
Zone mémoire spécifiée par Destination |
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é. |
Sortie
Zone de mots ou registre du maître vers lequel les données lues sont écrites.
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
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
Exécution terminée normalement : FALSE
Exécution terminée anormalement : TRUE
Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.
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.
Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.
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.
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
diMemoryOffset: DINT:=0;
awValues: ARRAY [0..2] OF WORD:=[3(0)];
iResult: INT:=0;
bEnable: BOOL:=FALSE;
abValues: ARRAY [0..2] OF BOOL:=[3(FALSE)];
iPort: INT:=0;
END_VAR
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 := 7 ;
NETWORK_BODY
B(B_VARIN,,iPort,26,2,28,4,);
B(B_VAROUT,,abValues,41,2,43,4,);
B(B_VARIN,,SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X,26,3,28,5,);
B(B_VARIN,,diMemoryOffset,26,4,28,6,);
B(B_VAROUT,,iResult,41,3,43,5,);
B(B_CONTACT,,bEnable,5,1,7,3,);
B(B_F,FP_MC_PROTOCOL_READ!,,28,0,41,7,,?DEN?DPort?HSourceMemoryArea?DSourceMemoryOffset?DWords_Bits?AENO?CDestination?CResult);
B(B_F,Size_Of_Var!,,21,5,28,7,,?D?C);
B(B_VARIN,,abValues,19,5,21,7,);
L(7,2,28,2);
L(1,2,5,2);
L(1,0,1,7);
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 := 7 ;
NETWORK_BODY
B(B_VARIN,,iPort,26,2,28,4,);
B(B_VAROUT,,awValues,41,2,43,4,);
B(B_VARIN,,SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D,26,3,28,5,);
B(B_VARIN,,diMemoryOffset,26,4,28,6,);
B(B_VAROUT,,iResult,41,3,43,5,);
B(B_CONTACT,,bEnable,5,1,7,3,);
B(B_F,FP_MC_PROTOCOL_READ!,,28,0,41,7,,?DEN?DPort?HSourceMemoryArea?DSourceMemoryOffset?DWords_Bits?AENO?CDestination?CResult);
B(B_F,Size_Of_Var!,,21,5,28,7,,?D?C);
B(B_VARIN,,awValues,19,5,21,7,);
L(1,2,5,2);
L(7,2,28,2);
L(1,0,1,7);
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
(*Bit transfer*)
If (bEnable) then
FP_MC_PROTOCOL_READ(Port := iPort,
SourceMemoryArea := SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X,
SourceMemoryOffset := diMemoryOffset,
Words_Bits := Size_Of_Var(abValues),
Destination => abValues, Result => iResult);
End_if;
(*Word transfer*)
If (bEnable) then
FP_MC_PROTOCOL_READ(Port := iPort,
SourceMemoryArea := SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D,
SourceMemoryOffset := diMemoryOffset,
Words_Bits := Size_Of_Var(awValues),
Destination => awValues, Result => iResult);
End_if;