Description de la fonction

La fonction EXCH_QX permet de transférer des données (via Modbus) entre des esclaves Modbus connectés à un module de communication Modicon X80 (BMX NOM) situé dans une station EIO.

NOTE : le protocole d'application Modbus est décrit sur le site http://www.modbus.org.

Les paramètres supplémentaires EN et ENO peuvent être configurés.

Les blocs fonction de communication utilisent un chemin de transaction de données et requièrent plusieurs cycles pour effectuer une opération. Le nombre de chemins de transaction disponibles par module et par cycle MAST dépend du port de communication utilisé :

  • Les modules à port intégré Modbus Plus ou NOM prennent en charge jusqu'à 4 blocs simultanément.

  • Le port intégré Ethernet TCP/IP prend en charge jusqu'à 4 blocs simultanément.

  • Les modules TCP/IP Ethernet NOE, NOC et 140 CRP 312 00 prennent en charge jusqu'à 16 blocs simultanément.

D'autres blocs fonction de communication peuvent être programmés sur le même port de communication. Toutefois, le bloc de communication qui dépasse le nombre maximum sur ce port n'est traité qu'après la mise à disposition d'un des chemins de transaction. Le bloc suivant sur le port devient alors actif et commence à utiliser un chemin disponible.

Représentation en FBD

Représentation :

Représentation en LD

Représentation :

Représentation en IL

Représentation :

CAL EXCH_QX_Instance (ENABLE:=ExchQxEnable, ABORT:=ExchQxAbort, ADDR:=ModuleAddress, SEND_BYTE:=NbBytesToSend, SEND_BUFFER:=ExchQxDataSource, DONE=>ExchQxSuccessfull, ACTIVE=>ExchQxActive, ERROR=>ExchQxFaulty, STATUS=>ErrorCode, REC_BYTE=>NbBytesReceived, REC_BUFFER=>ReceivedBuffer)

Représentation en ST

Représentation :

EXCH_QX_Instance (ENABLE:=ExchQxEnable, ABORT:=ExchQxAbort, ADDR:=ModuleAddress, SEND_BYTE:=NbBytesToSend, SEND_BUFFER:=ExchQxDataSource, DONE=>ExchQxSuccessfull, ACTIVE=>ExchQxActive, ERROR=>ExchQxFaulty, STATUS=>ErrorCode, REC_BYTE=>NbBytesReceived, REC_BUFFER=>ReceivedBuffer)

Description des paramètres

Le tableau suivant décrit les paramètres d’entrée :

Paramètre

Type

Commentaire

ENABLE

BOOL

Réglé sur 1 pour effectuer des transferts de données.

ABORT

BOOL

Réglé sur 1 pour abandonner l'opération en cours.

ADDR

ANY_ARRAY_INT

Tableau contenant l'adresse de l'esclave Modbus, c'est-à-dire le résultat de la fonction ADDMX.

SEND_BYTE

WORD

Nombre d'octets à envoyer.

SEND_BUFFER

ANY_ARRAY_BYTE

Champ de données source. Une structure de données doit être déclarée en tant que variable localisée pour le fichier source.

Le tableau suivant décrit les paramètres de sortie :

Paramètre

Type

Commentaire

DONE

BOOL

Réglé sur 1 lorsque la fonction s'est exécutée correctement.

ACTIVE

BOOL

Réglé sur 1 lorsque la fonction est en cours d'exécution.

ERROR

BOOL

Réglé sur 1 si une erreur est détectée par le bloc fonction.

STATUS

WORD

Fournit le code d'erreur si le bloc fonction détecte une erreur.

REC_BYTE

WORD

Nombre d'octets à recevoir par l'esclave Modbus.

REC_BUFFER

ANY_ARRAY_BYTE

Données reçues

(Une structure de données doit être déclarée en tant que variable localisée pour le fichier à lire.)

Exemple ST

(* Example:

we want to read the %MW1000 on slave number 5 (a M340 PLC for instance)

wired to channel 0 of the NOM in slot 2 of which IP address is 192.168.10.17,

the Quantum CRP is in slot 5 for instance.

First of all you should declare in the data editor the following variables:

data_to_send as an ARRAY [0..4] OF BYTE (or more if you want to send more bytes)

bytes_to_send as a WORD

slave_addres as a STRING[40]

received_data as an ARRAY [0..3] OF BYTE (or more if you need)

enable_sending as a BOOL

and you should create an instance of EXCH_QX EFB named for instance EXCH_QX_6 *)

(* initialize the data to send *)

data_to_send[0]:=16#03; (* Modbus function code read Holding register *)

data_to_send[1]:=16#03; (* MSB of the first register address *)

data_to_send[2]:=16#E8; (* LSB of the first register address, 16#03E8 = 1000*)

data_to_send[3]:=16#00; (* MSB of the quantity of registers to read *)

data_to_send[4]:=16#01; (* LSB of the quantity of registers to read *)

(* initialize the number of byte to send *)

bytes_to_send:=5;

(* initialize the address of the slave *)

slave_address:='1.5.1{192.168.10.17}\\0.2.0.5';

(* CRP slot 5, Drop address 192.168.10.17, NOM in slot 2 of main drop rack. *)

EXCH_QX_6 (ENABLE := enable_sending,

ADDR := addmx(slave_address),

SEND_BYTE := bytes_to_send,

SEND_BUFFER := data_to_send,

REC_BUFFER => received_data);

(* to start the EFB EXCH_QX_6 set enable_sending, then

received_data[0] will contain the function code sent (3)

received_data[1] will contain the number of bytes received (2)

received_data[2] and received_data[3] will contain the value of %MW1000 from the slave number 5*)