FP_READ_FROM_SLAVE_AREA_OFFS

Lire les données d’un esclave avec 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é. Le maître et l’esclave doivent être définis avec le même protocole. Le maître et l’esclave doivent avoir des zones de mémoire correspondantes.

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 (INT)

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

StationNumber (WORD, INT, UINT)

Numéro de station de l’esclave (MEWTOCOL : 1–99, MODBUS : 1–247)

Défini sur 1, si SYS_ETHERNET_USER_CONNECTION_xx est appliquée à l’entrée Port

SlaveMemoryArea (WORD, INT, UINT)

Adresse de départ de l’esclave à partir de laquelle les données sont lues.

Type de zone mémoire

Variable système

Drapeaux internes

SYS_MEMORY_AREA_R

Drapeaux de liaison

SYS_MEMORY_AREA_L

Entrées externes

SYS_MEMORY_AREA_X

Sorties externes

SYS_MEMORY_AREA_Y

Drapeaux internes

SYS_MEMORY_AREA_WR

Valeur de consigne pour temporisateur/compteur

SYS_MEMORY_AREA_SV

Valeur courante pour temporisateur/compteur

SYS_MEMORY_AREA_EV

Registres de données

SYS_MEMORY_AREA_DT

Drapeaux de liaison

SYS_MEMORY_AREA_WL

Registres de liaison

SYS_MEMORY_AREA_LD

Registres de fichiers

SYS_MEMORY_AREA_FL

Registres d’entrée

SYS_MEMORY_AREA_WX

Registres de sortie

SYS_MEMORY_AREA_WY

SlaveMemoryOffset (WORD, INT, UINT)

Offset de l’adresse de départ de l’esclave à partir de laquelle les données sont lues.

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

Sortie

Destination(ANY)

Zone de mots ou registre du maître vers lequel les données lues sont écrites.

Result(ANY)

Pour FP7 uniquement : Vous trouverez une description de tous les codes d’erreur dans le tableau des codes d’erreur de communication Modbus/MEWTOCOL.

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 nombre de données envoyées, spécifié par Words_Bits est incorrect.

  • 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 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 nombre de données envoyées, spécifié par Words_Bits est incorrect.

  • 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
		bReadResult: BOOL:=FALSE;
		wReadFromSlaveResult: WORD:=0;
			(*result of write to slave instruction*)
		iSlaveStationNumber: INT:=0;
			(*slave station number*)
		arrResults: ARRAY [0..9] OF REAL:=[10(0.0)];
			(*Array of results to be read from slave station*)
		iSlaveMemoryOffset: INT:=200;
		iSlaveMemorySize: INT:=1;
	END_VAR
	VAR CONSTANT 
		iSlaveMemoryArea: INT:=5;
			(*memory Area in slave station*)
	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 := 8 ;
        NETWORK_BODY
B(B_VARIN,,SYS_COM1_PORT,15,2,17,4,);
B(B_VARIN,,iSlaveStationNumber,15,3,17,5,);
B(B_CONTACT,,bReadResult,4,1,6,3,);
B(B_VAROUT,,wReadFromSlaveResult,34,3,36,5,);
B(B_VAROUT,,arrResults,34,2,36,4,);
B(B_VARIN,,SYS_MEMORY_AREA_DT,15,4,17,6,);
B(B_VARIN,,iSlaveMemoryOffset,15,5,17,7,);
B(B_VARIN,,iSlaveMemorySize,15,6,17,8,);
B(B_F,FP_READ_FROM_SLAVE_AREA_OFFS!,,17,0,34,8,,?DEN?DnPort?DStationNumber?HSlaveMemoryArea?DSlaveMemoryOffset?DWords_Bits?AENO?CDestination?CResult);
L(1,2,4,2);
L(6,2,17,2);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corps en ST

if (bReadResult) then
    FP_READ_FROM_SLAVE_AREA_OFFS(Port := SYS_COM1_PORT, 
                                 StationNumber := iSlaveStationNumber, 
                                 SlaveMemoryArea := SYS_MEMORY_AREA_DT, 
                                 SlaveMemoryOffset := iSlaveMemoryOffset, 
                                 Words_Bits := iSlaveMemorySize, 
                                 Destination => arrResults[0], 
                                 Result => wReadFromSlaveResult);
end_if;

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