Este bloco de função de executar na tarefa Voltar, gerencia a troca de dados pela rede TCP agindo como um servidor aceitando conexões de nós clientes gerenciados pelo FB TCPDataExchClient. Ativando o FB escuta o servidor na porta definida em Port, o servidor aceita o número simultâneo de conexões de clientes definidos em Connections. em DEDefs é necessário definir o endereço do array de estruturas TCPDEXCHNODEDEFS que identificam os nós escravos que podem se conectar ao servidor.
A gestão da comunicação será gerida através das variáveis na estrutura de dados. Quando um cliente se conecta, ele é procurado no array indicado por DEDefs il NodeID da mensagem recebida e os dois sistemas "ligam" à troca de dados, o bit Active será ativado.
Para enviar dados para o sistema do cliente, o bit deve estar ativado TxData, o bit é redefinido automaticamente no final da transmissão. Se o bit estiver ativo AutoTxD mediante variação dos dados no buffer Tx, os dados são automaticamente enviados para o cliente. Ao receber dados de um cliente, teremos o pouco RxOk ativo para um loop.
Bloqueio de função
CoDeSys: Indisponível
Laboratório de lógica: eLLabDataExchLib
descrição
Enable (BOOL) Comando de ativação do servidor.
SpyOn (BOOL) Se ativo, permite que você espione o funcionamento do FB.
Port (UINT) Porta TCP na qual escutar o servidor.
Connections (UDINT) Número de conexões do FB TCPDataExchClient projetos contemporâneos.
DEDefs (@TCPDEXCHNODEDEFS) Endereço de alocação de matriz de estrutura TCPDEXCHNODEDEFS definição de nós do cliente.
Enabled (BOOL) Bloqueio de funções ativado.
Fault (BOOL) Ativo para um loop em caso de erro de gerenciamento.
Gatilho espião
Se SpyOn ativo, você pode usar o console espião para verificar o funcionamento do FB. Existem vários níveis de gatilhos.
Níveis de gatilho
Gatilho | descrição |
---|---|
16 00000001 # | Rx: Sequências de recepção de quadros. |
16 00000002 # | Tx: Sequências de transmissão de quadros. |
16 40000000 # | Er: Erros de execução. |
Exemplos
Como usar os exemplos.
O programa gerencia a troca de dados agindo como um servidor que escuta a porta 10000, é possível conectar até 2 dispositivos clientes (consulte o programa de exemplo em Neste artigo) e troque dados entre eles. Os sistemas clientes precisarão enviar dados se identificando com os números de nó 1 e 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]