Lire les données de l’esclave avec type et offset
Utilisez cette instruction pour lire les données d’un esclave via le port de communication avec le protocole MEWTOCOL ou Modbus RTU, selon les paramètres définis dans les registres système du port utilisé.Pour les transferts de données à l’aide du protocole Modbus, le compilateur génère des commandes Modbus basées sur les adresses Modbus.
Entrée
Indique les ports de communication (selon le type d’API) :
Port COM, par ex. SYS_COM0_PORT
Port Ethernet, par ex. SYS_ETHERNET_USER_CONNECTION_1
MCU/SCU, par ex. 16#xx01 (xx = numéro du connecteur) dans COM01
Numéro de station de l’esclave (MEWTOCOL : 1–99, MODBUS : 1–255, Diffusion (broadcasting) : 0)
Défini sur 1, si SYS_ETHERNET_USER_CONNECTION_xx est appliquée à l’entrée Port
Type d’adresse de destination dans l’esclave. Spécifiez un offset de zéro, par ex. DT0 ou WL0.
Offset de l’adresse de départ de l’esclave à partir de laquelle les données sont lues. Type d’adresse défini par SlaveWordAddressType.
Nombre de mots (bits) à transférer.
Soit :
Nombre de mots
pour Modbus RTU : 16#001–16#07F
pour MEWTOCOL-COM : 16#001–16#1FD ou 16#001–16#1B (FP0, FP-e)
Ou :
Mot de contrôle pour le transfert de bits : 16#8T0F avec T pour un transfert de bits vers le maître et F pour un transfert de bits vers l’esclave (ne s’applique pas à FP7).
Sortie
Zone de mots ou registre du maître vers lequel les données lues sont écrites.
Au lieu d’utiliser cette instruction F, nous recommandons d’utiliser l’instruction FP7 correspondante : FP_READ_FROM_SLAVE_AREA_OFFS.
Les instructions F145 ou F146 ne peuvent être exécutées que si aucune des instructions n’est active. Évaluez le drapeau "F145/F146 non active" dans votre programme pour vérifier l’état des instructions.
Évaluez le drapeau "F145/F146 erreur" pour vérifier si la transmission a été exécutée normalement ou si une erreur est apparue.
L’instruction F145 ou F146 ne peut pas être exécutée si l’adresse de destination est un drapeau interne spécial (à partir de R9000) ou un registre spécial de données (à partir de DT9000/DT90000) ou un registre fichier FL.
Si les données de l’esclave ou du maître sont en dehors de la plage d’adresses disponible.
Si SlaveWordAddressType : offset ¹ 0
Si le mode de communication n’est pas défini sur MEWTOCOL-COM Maître/Esclave ou Modbus RTU Maître/Esclave.
Si le port COM sélectionné requiert une cassette de communication qui n’a pas été installée.
Si les données de l’esclave ou du maître sont en dehors de la plage d’adresses disponible.
Si SlaveWordAddressType : offset ¹ 0
Si le mode de communication n’est pas défini sur MEWTOCOL-COM Maître/Esclave ou Modbus RTU Maître/Esclave.
Si le port COM sélectionné requiert une cassette de communication qui n’a pas été installée.
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
bBool2: BOOL:=FALSE;
bRead1: BOOL:=FALSE;
bWrite2: BOOL:=FALSE;
Bool16_OverlappingDut_1: BOOL16_OVERLAPPING_DUT;
END_VAR
Lorsque bRead1 et sys_bIsComPort1F145F146NotActive sont définies sur TRUE, la sortie Y38 de l’esclave 2 est lue et écrite vers le bit 1 de Bool16_OverlappingDut_1.w0. Ce bit est accessible via Bool16_OverlappingDut_1.b1 et copié vers bBool2.
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_CONTACT,,bRead1,3,1,5,3,);
B(B_CONTACT,,sys_bIsComPort1F145F146NotActive,12,1,14,3,);
B(B_COIL,,bWrite2,45,1,47,3,S);
B(B_VARIN,,2,22,3,24,5,);
B(B_VARIN,,WY0,22,4,24,6,);
B(B_VARIN,,3,22,5,24,7,);
B(B_VARIN,,SYS_COM1_PORT,22,2,24,4,);
B(B_COIL,,bRead1,41,1,43,3,E);
B(B_F,F146_READ_DATA_TYPE_OFFS!,Instance,24,0,39,8,,?DEN?DPort?DSlaveAddress?DSlaveWordAddressType?DSlaveWordAddressOffs?DNumberOfWords_BitsInWords?AENO?CMasterWordData);
B(B_VARIN,,16#8108,22,6,24,8,);
B(B_VAROUT,,Bool16_OverlappingDut_1.w0,39,2,41,4,);
L(1,2,3,2);
L(5,2,12,2);
L(43,2,45,2);
L(14,2,24,2);
L(39,2,41,2);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 3 ;
NETWORK_BODY
B(B_CONTACT,,Bool16_OverlappingDut_1.b1,8,1,10,3,);
B(B_COIL,,bBool2,20,1,22,3,);
L(10,2,20,2);
L(1,2,8,2);
L(1,0,1,3);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if (bRead1 and sys_bIsComPort1F145F146NotActive) then
F146_READ_DATA_TYPE_OFFS(Port := SYS_COM1_PORT,
SlaveAddress := 2,
SlaveWordAddressType := WY0,
SlaveWordAddressOffs := 3,
NumberOfWords_BitsInWords := 16#8108,
MasterWordData => Bool16_OverlappingDut_1.w0);
end_if;
bBool2 := Bool16_OverlappingDut_1.b1;