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.
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.
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
Desencadenar | Descripció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]