F145_WRITE_DATA_TYPE_OFFS

Écrire des données vers l’esclave avec type et offset

Utilisez cette instruction pour écrire les données d’un maître vers 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.

Paramètres

Entrée

Port (WORD, INT, UINT)

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

SlaveAddress (WORD, INT, UINT)

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

MasterWordData (ANY)

Adresse source sur le maître pour les données à écrire vers l’esclave.

SlaveWordAddressType (WORD, INT, UINT)

Type d’adresse de destination dans l’esclave. Spécifiez un offset de zéro, par ex. DT0 ou WL0.

SlaveWordAddressOffs (WORD, INT, UINT)

Offset de l’adresse de départ de l’esclave vers laquelle les données sont écrites. Type d’adresse défini par SlaveWordAddressType.

NumberOfWords_BitsInWords (WORD, INT, UINT)

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).

Remarques

  • Au lieu d’utiliser cette instruction F, nous recommandons d’utiliser l’instruction FP7 correspondante : FP_WRITE_TO_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.

  • L’instruction F145 n’envoie qu’une requête de transmission des données à l’esclave. La procédure elle-même a lieu en fin de cycle.

  • Évaluez le drapeau "F145/F146 erreur" pour vérifier si la transmission a été exécutée normalement ou si une erreur est apparue.

  • En cas de diffusion (broadcasting, SlaveAddress définie sur 0), veillez à ce que la transmission ne soit exécutée qu’après que la durée du cycle maximale s’est écoulée.

  • 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.

Drapeaux d’erreur

sys_bIsOperationErrorHold (passe à TRUE et reste TRUE)
  • 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.

sys_bIsOperationErrorNonHold (passe à TRUE pendant un cycle)
  • 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.

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
		bBool1: BOOL:=FALSE;
		bRead1: BOOL:=FALSE;
		bWrite1: BOOL:=FALSE;
		Bool16_OverlappingDut_1: BOOL16_OVERLAPPING_DUT;
	END_VAR
	VAR_EXTERNAL
		Printer: WORD:=0;
	END_VAR
	VAR 
	END_VAR

Corps du POU

La variable système sys_bPulse1s est copiée vers bBool1 et Bool16_OverlappingDut_1.b0. Lorsque bWrite1 et sys_bIsComPort1F145F146NotActive sont définies sur TRUE, bBool1 est écrite vers la sortie Y38 de l’esclave 2 via Bool16_OverlappingDut_1.b0.

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 := 3 ;
        NETWORK_BODY
B(B_CONTACT,,sys_bPulse1s,3,1,5,3,);
B(B_COIL,,bBool1,15,1,17,3,);
L(5,2,15,2);
L(1,2,3,2);
L(1,0,1,3);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 3 ;
        NETWORK_BODY
B(B_CONTACT,,bBool1,3,1,5,3,);
B(B_COIL,,Bool16_OverlappingDut_1.b0,15,1,17,3,);
L(5,2,15,2);
L(1,2,3,2);
L(1,0,1,3);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 13 ;
        NETWORK_BODY
B(B_CONTACT,,sys_bIsComPort1F145F146NotActive,8,1,10,3,);
B(B_CONTACT,,bWrite1,18,1,20,3,);
B(B_COIL,,bRead1,46,1,48,3,S);
B(B_VARIN,,2,23,3,25,5,);
B(B_VARIN,,Bool16_OverlappingDut_1.w0,23,4,25,6,);
B(B_VARIN,,WY0,23,5,25,7,);
B(B_VARIN,,3,23,6,25,8,);
B(B_VARIN,,16#8800,23,7,25,9,);
B(B_F,F145_WRITE_DATA_TYPE_OFFS!,Instance,25,0,40,9,,?DEN?DPort?DSlaveAddress?DMasterWordData?DSlaveWordAddressType?DSlaveWordAddressOffs?DNumberOfWords_BitsInWords?AENO);
B(B_VARIN,,SYS_COM1_PORT,23,2,25,4,);
B(B_COIL,,bWrite1,42,1,44,3,E);
L(1,2,8,2);
L(10,2,18,2);
L(20,2,25,2);
L(44,2,46,2);
L(40,2,42,2);
L(1,0,1,13);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corps en ST

bBool1 := sys_bPulse1s;
Bool16_OverlappingDut_1.b0 := bBool1;
if (bWrite1 and sys_bIsComPort1F145F146NotActive) then
    F145_WRITE_DATA_TYPE_OFFS(Port := SYS_COM1_PORT,
                              SlaveAddress := 2,
                              MasterWordData := Bool16_OverlappingDut_1.w0,
                              SlaveWordAddressType := WY0, 
                              SlaveWordAddressOffs := 3, 
                              NumberOfWords_BitsInWords := 16#8800);
                              bRead1 := true;
                              bWrite1 := false;
end_if;

Modifié le : 2024-12-04Commentaires sur cette pageAssistance téléphonique