SysUDPClient, ouvre une connexion UDP

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 la communication avec le protocole UDP en mode client. Il faut définir dans PeerAdd l'adresse IP et dans PeerPort le port UDP du système serveur auquel vous souhaitez vous connecter.

Activer la commande Connect la connexion avec le système serveur est ouverte; dans la connexion UDP, il n'est pas possible de vérifier si le serveur est présent et accepte la connexion. Par conséquent, elle est toujours activée. Connected et à la sortie File le flux à utiliser pour l'échange de données avec le système serveur est renvoyé.

In LocalAdd e LocalPort vous pouvez définir l'adresse IP et le port de l'interface réseau à partir de laquelle se connecter. Si la connexion n'est pas possible, il est généré Fault.

Cercle d'informations

Verrouillage de fonction

CODESYS : indisponible

LogicLab : eLLabXUnified12Lib

Description

Connect (BOOL) Commande d'activation de la connexion.
PeerAdd (@STRING) Adresse IP du système serveur auquel se connecter.
PeerPort (UINT) Numéro de port UDP auquel se connecter.
LocalAdd (@STRING) Adresse IP de l'interface réseau à partir de laquelle se connecter. Par défaut '0.0.0.0' : l'interface est automatiquement choisie en fonction de l'IP à laquelle se connecter.
LocalPort UINT) Numéro de port UDP à partir duquel la connexion démarre (0 choisi automatiquement).
FlushTm (UINT)) Temps de vidage des données (mS). Si aucune donnée n'est chargée sur le flux après le temps défini, les données présentes sont automatiquement envoyées.
LifeTm (UINT) Durée de vie du socket (S), si aucune donnée n'est reçue ou envoyée après le temps défini, le socket est automatiquement fermé. Si le temps défini est "0", la prise n'est jamais fermée.
RxSize (UINT) Taille du tampon de réception des données.
TxSize (UINT) Taille du tampon de transmission de données.
Connected (BOOL) Actif si connexion établie avec le serveur.
Fault (BOOL) Actif si erreur de gestion.
File (FILEP) Flux d'E/S évalué sur la connexion établie avec le système serveur. Si la connexion n'est pas active, NULL est retourné

Image SysUDPClient FB

Exemples

Comment utiliser les exemples.
FBD_SysUDPClient, ST_SysUDPClient: Dans l'exemple on active une connexion à un serveur UCP en écoute sur le port 1000. Une fois la connexion établie, les caractères reçus du serveur sont renvoyés en écho. Le port local est automatiquement choisi par le système.

SyslogClient: Implémente un client Syslog avec l'envoi de messages aux serveurs.

LogicLab (Ptp116, FBD_SysUDPClient)
PROGRAM FBD_SysUDPClient
VAR
    Fp : eFILEP; (* File pointer *)
    UDPClient : SysUDPClient; (* UDP client *)
END_VAR
Image SysUDPClient FBD
LogicLab (Ptp116, ST_SysUDPClient)
PROGRAM ST_SysUDPClient
VAR
    i : UDINT; (* Auxiliary variable *)
    Fp : eFILEP; (* File pointer *)
    UDPClient : SysUDPClient; (* UDP client *)
END_VAR

// *****************************************************************************
// PROGRAM "FBD_SysUDPClient"
// *****************************************************************************
// A UDP client is instantiated, it connects to the UDP server IP and port
// defined. Data received are echoed.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATION
    // -------------------------------------------------------------------------
    // First program execution loop initializations.

    IF (SysFirstLoop) THEN
        UDPClient.PeerAdd:=ADR('192.168.0.77'); //Peer address
        UDPClient.PeerPort:=1000; //Peer port
        UDPClient.LocalAdd:=ADR('0.0.0.0'); //Local address
        UDPClient.LocalPort:=0; //Local port
        UDPClient.FlushTm:=50; //Flush time (mS)
        UDPClient.LifeTm:=30; //Life time (S)
        UDPClient.RxSize:=128; //Rx buffer size
        UDPClient.TxSize:=128; //Tx buffer size
    END_IF;

    // Manage the UDP client.

    UDPClient(Connect:=TRUE); //TCPClient management
    Fp:=UDPClient.File; //File pointer

    // -------------------------------------------------------------------------
    // ECHO LOOP
    // -------------------------------------------------------------------------
    // Execute the echo loop.

    IF (SysFIsOpen(Fp)) THEN
        IF (TO_BOOL(SysFGetIChars(Fp)) AND TO_BOOL(SysFGetOSpace(Fp))) THEN
            i:=Sysfputc(Sysfgetc(Fp), Fp); //Character echo
        END_IF;
    END_IF;

// [End of file]
LogicLab (SyslogClient)
PROGRAM SyslogClient
VAR
    Cmd : BOOL; (* Send command *)
    i : UDINT; (* Auxiliary variable *)
    Facility : USINT; (* Facility number *)
    Severity : USINT; (* Severity number *)
    CaseNr : USINT; (* Program case *)
    Months : @STRING; (* Month definitions *)
    UDPClient : SysUDPClient; (* UDP client *)
    DateTime : SysETimeToDate; (* Date time conversion *)
END_VAR

// *****************************************************************************
// PROGRAM "SyslogClient"
// *****************************************************************************
// This program forward information as syslog messages to a syslog server.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATION
    // -------------------------------------------------------------------------
    // First program execution loop initializations.

    IF (SysFirstLoop) THEN
        UDPClient.PeerAdd:=ADR('192.168.0.184'); //Peer address
        UDPClient.PeerPort:=514; //Peer port
        UDPClient.LocalAdd:=ADR('0.0.0.0'); //Local address
        UDPClient.LocalPort:=0; //Local port
        UDPClient.FlushTm:=50; //Flush time (mS)
        UDPClient.LifeTm:=30; //Life time (S)
        UDPClient.RxSize:=128; //Rx buffer size
        UDPClient.TxSize:=512; //Tx buffer size
    END_IF;

    // -------------------------------------------------------------------------
    // SENDING SEQUENCES
    // -------------------------------------------------------------------------
    // Manages the UDP Client and sending sequences.

    UDPClient(); //UDPClient management
   CASE (CaseNr) OF

        // ---------------------------------------------------------------------
        // Wait command.

        0:
        UDPClient.Connect:=FALSE; //TCPClient management
        IF NOT(Cmd) THEN RETURN; END_IF;
        Cmd:=FALSE; //Send command
        CaseNr:=CaseNr+1; //Program case

        // ---------------------------------------------------------------------
        // Connect to Syslog server.

        1:
        UDPClient.Connect:=TRUE; //TCPClient management
        IF NOT(SysFIsOpen(UDPClient.File)) THEN RETURN; END_IF;

        // ---------------------------------------------------------------------
        // SEND THE MESSAGE TO SERVER
        // ---------------------------------------------------------------------
        // Send the message to server, here an message example.
        // <19>Feb 26 17:36:42 SlimLine Prova messaggio

        // ---------------------------------------------------------[PRI Part]--
        // The Priority value is calculated by first multiplying the Facility
        // number by 8 and then adding the numerical value of the Severity.

        i:=(Facility*8)+Severity; //Priority value
        i:=SysVfprintf(UDPClient.File, ADR('<%u>'), UDINT_TYPE, ADR(i));

        // ------------------------------------------------------[HEADER Part]--
        // Contains two fields called the TIMESTAMP and HOSTNAME.

        Months:=ADR('JanFebMarAprMayJunJulAugSepOctNovDec');
        DateTime(EpochTime:=SysDateTime); //Date time conversion
        i:=SysVfprintf(UDPClient.File, ADR('%.3s '), STRING_TYPE, Months+(DateTime.Month*3));
        i:=SysVfprintf(UDPClient.File, ADR('%2u '), USINT_TYPE, ADR(DateTime.Day));
        i:=SysVfprintf(UDPClient.File, ADR('%02u:'), USINT_TYPE, ADR(DateTime.Hour));
        i:=SysVfprintf(UDPClient.File, ADR('%02u:'), USINT_TYPE, ADR(DateTime.Minute));
        i:=SysVfprintf(UDPClient.File, ADR('%02u '), USINT_TYPE, ADR(DateTime.Second));
    
        i:=SysVfprintf(UDPClient.File, ADR('%s '), STRING_TYPE, ADR('SlimLine'));

        // ---------------------------------------------------------[MSG Part]--
        // The CONTENT contains the details of the message.

        i:=SysVfprintf(UDPClient.File, ADR('%s'), STRING_TYPE, ADR('This is a message'));

        // Eseguo invio messaggio di Log.

        i:=SysFOBfFlush(UDPClient.File); //Flush output characters
        CaseNr:=CaseNr+1; //Program case

        // ---------------------------------------------------------------------
        // Waits until the message is sent.

        2:
        IF (TO_INT(SysFGetOBfSize(UDPClient.File)) <> SysFGetOSpace(UDPClient.File)) THEN RETURN; END_IF;
        CaseNr:=0; //Program case
    END_CASE;

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