TCPDataExchServer, intercambio de datos TCP (servidor)

Lista

Esta página es parte del Manual de programación IEC 61131-3. Ir al índice.

Este bloque de funciones de ejecutar en tarea Atrás, gestiona el intercambio de datos a través de la red TCP actuando como servidor al aceptar conexiones de nodos clientes gestionados por el FB TCPDataExchClient. Activando el FB escucha el servidor en el puerto definido en Port, el servidor acepta el número simultáneo de conexiones de clientes definidos en Connections. En DEDefs es necesario definir la dirección de la matriz de estructuras TCPDEXCHNODEDEFS que identifican los nodos esclavos que pueden conectarse al servidor.

La gestión de la comunicación se gestionará a través de las variables en la estructura de datos. Cuando un cliente se conecta, se busca en la matriz indicada por DEDefs il NodeID del mensaje recibido y los dos sistemas "se unen" al intercambio de datos, el bit Active se activará

Para enviar datos al sistema del cliente, el bit debe estar activado TxData, el bit se restablece automáticamente al final de la transmisión. Si el bit está activo AutoTxD Tras la variación de los datos en el búfer Tx, los datos se envían automáticamente al cliente. Al recibir datos de un cliente tendremos el bit RxOk activo para un bucle.

Círculo de información

Función de bloqueo

CÓDIGOS: indisponible

Laboratorio lógico: eLLabDataExchLib

Descripción

Enable (BOOL) Comando de activación del servidor.
SpyOn (BOOL) Si está activo, te permite espiar el funcionamiento del FB.
Port (UINT) Puerto TCP en el que escuchar el servidor.
Connections (UDINT) Número de conexiones desde FB TCPDataExchClient Proyectos contemporáneos.
DEDefs (@TCPDEXCHNODEDEFS) Asignación de matriz de estructura de dirección TCPDEXCHNODEDEFS definición de nodos de cliente.
Enabled (BOOL) Bloqueo de función habilitado.
Fault (BOOL) Activo para un bucle si hay un error de gestión.

Imagen FB TCPDataExchServer

Disparador espía

Se SpyOn active puede utilizar la consola espía para comprobar el funcionamiento del FB. Hay varios niveles de factores desencadenantes.

Niveles de activación
DesencadenarDescripción
16 00000001 #Rx: Secuencias de recepción de trama.
16 00000002 #Tx: Secuencias de transmisión de trama.
16 40000000 #Er: Errores de ejecución

Ejemplos

Cómo utilizar los ejemplos..
El programa gestiona el intercambio de datos actuando como un servidor que escucha el puerto 10000, es posible conectarse a dispositivos cliente 2 (consulte el programa de ejemplo en este artículo) e intercambiar datos entre ellos. Los sistemas cliente deberán enviar datos que se identifiquen con los números de nodo 1 y 2.

Laboratorio lógico (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]
¿Le resultó útil este artículo?