TCPDataExchServer, échange de données TCP (serveur)

Liste

Cette page fait partie de la Manuel de programmation CEI 61131-3. Aller à l'index.

Ce bloc fonction de exécuter dans la tâche Retour, gère l'échange de données sur le réseau TCP en agissant comme un serveur en acceptant les connexions des nœuds clients gérés par le FB TCPDataExchClient. En activant le FB, le serveur écoute sur le port défini dans Port, le serveur accepte le nombre simultané de connexions des clients définis dans Connections. En DEDefs il faut définir l'adresse du tableau de structures TCPDEXCHNODEDEFS qui identifient les nœuds esclaves qui peuvent se connecter au serveur.

La gestion de la communication sera gérée par les variables de la structure de données. Lorsqu'un client se connecte, il est recherché dans le tableau indiqué par DEDefs il NodeID du message reçu et les deux systèmes "se lient" à l'échange de données, le bit Active sera activé.

Pour envoyer des données au système client, le bit doit être activé TxData, le bit est automatiquement réinitialisé à la fin de la transmission. Si le bit est actif AutoTxD lors de la variation des données dans le tampon Tx, les données sont automatiquement envoyées au client. Lors de la réception des données d'un client, nous aurons le bit RxOk actif pour une boucle.

Cercle d'informations

Verrouillage de fonction

CODESYS : indisponible

LogicLab : eLLabDataExchLib

Description

Enable (BOOL) Commande d'activation du serveur.
SpyOn (BOOL) S'il est actif, il permet d'espionner le fonctionnement du FB.
Port (UINT) Port TCP sur lequel écouter le serveur.
Connections (UDINT) Nombre de connexions depuis FB TCPDataExchClient projets contemporains.
DEDefs (@TCPDEXCHNODEDEFS) Adresse d'allocation de tableau de structure TCPDEXCHNODEDEFS définition des nœuds clients.
Enabled (BOOL) Verrouillage de fonction activé.
Fault (BOOL) Actif pour une boucle si erreur de gestion.

Image FB TCPDataExchServer

Déclencheur d'espion

Se SpyOn actif, vous pouvez utiliser la console espion pour vérifier le fonctionnement du FB. Il existe différents niveaux de déclencheurs.

Niveaux de déclenchement
GâchetteDescription
16 # 00000001Rx: Séquences de réception de trames.
16 # 00000002Tx: Séquences de transmission de trame.
16 # 40000000Er: Erreurs d'exécution.

Exemples

Comment utiliser les exemples.
Le programme gère l'échange de données en agissant comme un serveur écoutant le port 10000, il est possible de se connecter à des appareils clients 2 (voir l'exemple de programme dans cet article) et échanger des données entre eux. Les systèmes clients devront envoyer des données s'identifiant avec les numéros de nœuds 1 et 2.

LogicLab (Ptp171, ST_TCPDataExchServer)
PROGRAM ST_TCPDataExchServer
VAR
    C1RxBuffer : ARRAY[0..7] OF UINT; (* Rx buffer (Client 1) *)
    C1TxBuffer : ARRAY[0..7] OF UINT; (* Tx buffer (Client 1) *)
    C2RxBuffer : ARRAY[0..7] OF UINT; (* Rx buffer (Client 2) *)
    C2TxBuffer : ARRAY[0..7] OF UINT; (* Tx buffer (Client 2) *)
    DEDefs : ARRAY[0..1] OF TCPDEXCHNODEDEFS; (* Data exchange node definitions *)
    TCPServer : TCPDataExchServer; (* TCP data exchange server *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_TCPDataExchServer"
// *****************************************************************************
// The program instantiates a "TCPDataExchServer" FB. Up to 2 connections are
// accepted.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATION
    // -------------------------------------------------------------------------
    // Program initializations.

    IF (SysFirstLoop) THEN

        // Set the client 1 definitions.

        DEDefs[0].NodeID:=1; //Node ID
        DEDefs[0].AutoTxD:=TRUE; //Automatic Tx data send
        DEDefs[0].RxBuffer:=ADR(C1RxBuffer); //Rx buffer address
        DEDefs[0].RxLength:=SIZEOF(C1RxBuffer); //Rx buffer length
        DEDefs[0].TxBuffer:=ADR(C1TxBuffer); //Tx buffer address
        DEDefs[0].TxLength:=SIZEOF(C1TxBuffer); //Tx buffer length
        DEDefs[0].TxHeartbeat:=10; //Tx heartbeat time (S)

        // Set the client 2 definitions.

        DEDefs[1].NodeID:=2; //Node ID
        DEDefs[1].AutoTxD:=TRUE; //Automatic Tx data send
        DEDefs[1].RxBuffer:=ADR(C2RxBuffer); //Rx buffer address
        DEDefs[1].RxLength:=SIZEOF(C2RxBuffer); //Rx buffer length
        DEDefs[1].TxBuffer:=ADR(C2TxBuffer); //Tx buffer address
        DEDefs[1].TxLength:=SIZEOF(C2TxBuffer); //Tx buffer length
        DEDefs[1].TxHeartbeat:=10; //Tx heartbeat time (S)

        // Server configuration.

        TCPServer.SpyOn:=TRUE; //Spy command
        TCPServer.Port:=10000; //Peer port
        TCPServer.Connections:=2; //Accepted connections
        TCPServer.DEDefs:=ADR(DEDefs); //Data exchange definitions
    END_IF;

    // -------------------------------------------------------------------------
    // DATA EXCHANGE SERVER
    // -------------------------------------------------------------------------
    // Manage data exchange server.

    TCPServer(Enable:=TRUE); //Manage the server

// [End of file]
Cet article a-t-il été utile?