Lire les données du port du module MCU
Cette instruction permet de copier les données reçues par le module MCU en provenance du dispositif externe vers le tampon de réception de l’unité centrale. Le port de communication du module MCU est spécifié par s_Port. Le tampon de réception est défini par d1_Start et d2_End.
Entrée
Spécification du numéro de connecteur (octet de poids fort) et du numéro du port (octet de poids faible) du module MCU auquel les données sont transmises
16#xx01 : COM1 sur le module MCU dans le connecteur 16#xx
16#xx02 : COM2 sur le module MCU dans le connecteur 16#xx
Adresse de départ du tampon de réception
Adresse finale du tampon de réception
F161_MRCV ne doit pas être exécutée avant d’avoir vérifié la fin de la réception et l’état du drapeau "Réception terminée". L’invitation à émettre des données (polling) à l’aide de F161_MRCV ne fonctionne pas correctement ! Le drapeau "réception terminée" peut être évalué à l’aide des fonctions IsReceptionDone et IsReceptionDoneByTimeOut ou des drapeaux d’entrée (X) X0 et X2.
Le nombre d’octets reçus est sauvegardé dans l’adresse initiale du tampon de réception, indiquée par d1_Start. Si les données reçues excèdent l’adresse finale indiquée par b2_End, une erreur de fonctionnement est détectée. Les données reçues jusqu’à d2_End sont sauvegardées. F161_MRCV permet également d’effacer le tampon de réception, de réinitialiser le drapeau "Réception terminée" et de recevoir d’autres données.
F161_MRCV est prise en charge par tous les automates : si vous utilisez des fonctions spéciales plutôt que des drapeaux, vous pouvez créer des programmes indépendants de l’automate permettant de traiter les données pour les ports de l’unité centrale aussi bien que pour ceux du module MCU. Les automates qui n’utilisent pas de ports MCU ne traduisent pas l’instruction F161_MRCV. Il est recommandé d’utiliser les fonctions ReadData ou ReadCharacters avec lesquelles votre programme se lit plus facilement.
Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.
Si le module MCU n’existe pas dans le connecteur spécifié
Si le port de communication spécifié n’existe pas.
Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.
Si le module MCU n’existe pas dans le connecteur spécifié
Si le port de communication spécifié n’existe pas.
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
ReadReceivedData: BOOL:=FALSE;
ReceiveBuffer: ARRAY [0..10] OF INT:=[11(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 := 8 ;
NETWORK_BODY
B(B_F,F161_MRCV!,,17,2,24,8,,?DEN?Ds_Port?Dd1_Start?Dd2_End?AENO);
B(B_VARIN,,ReadReceivedData,15,3,17,5,);
B(B_VARIN,,16#0201,15,4,17,6,);
B(B_VARIN,,ReceiveBuffer[0],15,5,17,7,);
B(B_VARIN,,ReceiveBuffer[10],15,6,17,8,);
B(B_COMMENT,,The received data of port 1 of the MCU in slot 2 are read:,2,1,32,2,);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_F,F161_MRCV!,,17,0,24,6,,?DEN?Ds_Port?Dd1_Start?Dd2_End?AENO);
B(B_VARIN,,ReadReceivedData,15,1,17,3,);
B(B_VARIN,,16#0301,15,2,17,4,);
B(B_VARIN,,ReceiveBuffer,6,4,8,6,);
B(B_F,Adr_Of_Var_I!,,10,3,17,5,,?D?C);
B(B_F,AdrLast_Of_Var_I!,,8,4,17,6,,?D?C);
L(1,0,1,6);
L(8,4,8,5);
L(8,4,10,4);
END_NETWORK_BODY
END_NET_WORK
END_BODY