TCP_CONNECT

Abre uma conexão TCP/IP com um IP e uma porta especificados, usando um socket configurado como cliente TCP, com opção de reconexão automática. É um bloco de função (mantém estado entre scans; requer instância).

Biblioteca: HI_STD · Namespace: HILS · Tipo: bloco de função

Bloco de função

              TCP_CONNECT
          +-----------------+
 BOOL ----|START         EVT|---- BOOL
          |                 |
USINT ----|SOCK    CONNECTED|---- BOOL
          |                 |
UDINT ----|IP         RESULT|---- UINT
          |                 |
 UINT ----|PORT     CONN_CNT|---- UINT
          |                 |
 BOOL ----|AUTO             |
          |                 |
 UINT ----|RETRY            |
          +-----------------+

O bloco necessita de uma transição de subida em START para iniciar a tentativa de conexão. Sem autoconexão, cada nova tentativa exige uma nova transição de subida. Com autoconexão (AUTO = TRUE), basta uma transição de subida para que o bloco tente se conectar periodicamente ao IP e porta destino configurados.

SOCK especifica o canal de comunicação (socket) por um identificador numérico. Os identificadores pertencem ao namespace HILS (tipo COMM_CHAN_ID da biblioteca HI_STD):

Label

ID

Canal

COM1_PORT_ID .. COM8_PORT_ID

0 .. 7

Canais seriais

SOCK0_PORT_ID .. SOCK7_PORT_ID

8 .. 15

Sockets TCP/IP (Ethernet 1)

ETH2_SOCK0_PORT_ID .. ETH2_SOCK7_PORT_ID

16 .. 23

Sockets TCP/IP (Ethernet 2)

Cada equipamento possui apenas um subconjunto desses recursos; consulte o manual do equipamento para saber quais sockets estão efetivamente disponíveis para conexão TCP/IP.

Se IP e PORT forem iguais a zero, o bloco utiliza os valores configurados nos campos “Endereço IP” e “Porta” da área “Cliente Remoto Default” da base de setup do usuário. Para se conectar a outros destinos, informe os valores diretamente em IP e PORT (ex.: IP 192.168.0.199 = 16#C0A8_00C7; porta 502 = 16#1F6).

Com AUTO = TRUE, se o processo de conexão falhar, o bloco abre uma nova conexão quando o tempo configurado em RETRY (em segundos) transcorrer.

Um pulso em EVT é gerado sempre que houver alteração no estado de conexão do socket. Durante esse pulso, RESULT e CONNECTED estão atualizados e podem ser avaliados. CONNECTED reflete o estado corrente da conexão: quando ativo, há conexão TCP/IP aberta com o IP e porta. RESULT indica o código de retorno da última interação do bloco com o driver de comunicação. CONN_CNT contabiliza o número de conexões realizadas no modo de autoconexão (AUTO = TRUE) e é reinicializado com 0 quando START for FALSE.

Parâmetros

Nome

Direção

Tipo

Padrão

Faixa / Unidade

Descrição

START

IN

BOOL

FALSE

—

Transição de subida inicia a tentativa de conexão com o IP e porta destino.

SOCK

IN

USINT

9

SOCK0_PORT_ID .. ETH2_SOCK7_PORT_ID

Identificador do socket utilizado na tentativa de conexão.

IP

IN

UDINT

0

—

IP destino (0 = usa o IP do Cliente Remoto Default).

PORT

IN

UINT

0

—

Porta destino (0 = usa a porta do Cliente Remoto Default).

AUTO

IN

BOOL

FALSE

—

Habilita a autoconexão (reconexão periódica).

RETRY

IN

UINT

15

s

Tempo para nova tentativa de conexão quando AUTO está habilitado.

EVT

OUT

BOOL

FALSE

—

Pulso indicando alteração no estado de conexão (processo concluído).

CONNECTED

OUT

BOOL

FALSE

—

Estado corrente de conexão do socket (TRUE = conexão aberta).

RESULT

OUT

UINT

0

ver Códigos de retorno

Código de retorno da última interação com o driver de comunicação.

CONN_CNT

OUT

UINT

0

—

Contador de conexões realizadas no modo de autoconexão.

Códigos de retorno

RESULT carrega o código de retorno da última operação. Use os identificadores com o namespace HILS (ex.: HILS.CO_CONEX_FAIL). Códigos mais comuns deste bloco:

Código

Identificador

Significado

0

SUCCESS

Conexão realizada com sucesso (ou evento de desconexão).

5

GL_INV_PAR

Socket indisponível no equipamento (parâmetro inválido).

36

RE_INV_CFG

Socket configurado como UDP ou como servidor (configurar como cliente TCP).

63

CO_CONEX_FAIL

Falha no processo de conexão (IP/porta indisponíveis no equipamento remoto).

71

CO_CHA_OPE

Socket já possui conexão ativa com IP/porta diferentes dos configurados.

Lista completa dos códigos de retorno: RET_CODE - Códigos de retorno do firmware G5.

Pré-condições

  • O socket indicado em SOCK deve estar disponível no equipamento e configurado com protocolo de transporte TCP e no papel de Cliente.

  • Com IP/PORT iguais a zero, o “Cliente Remoto Default” deve estar configurado na base de setup do usuário.

Observações

  • Uma tentativa de conexão em um socket já ativo com o mesmo IP e porta mantém a conexão corrente (RESULT = SUCCESS, CONNECTED = TRUE).

  • Uma tentativa de conexão em um socket já ativo com IP/porta diferentes não fecha a conexão corrente (RESULT = CO_CHA_OPE).

  • Avalie RESULT e CONNECTED durante o pulso de EVT.

Ver também

TCP_DISCONNECT, IS_SOCKET_CONNECTED, HTTP_QUERY

Exemplo

Clique aqui para baixar a tabela de variáveis

Código ST

 VAR
     TCP_CONN       : HILS.TCP_CONNECT; (* Instancia do bloco de conexao TCP *)
     CONN_START     : BOOL := FALSE;
     AUTOCONNECT    : BOOL := FALSE;
     STS_CONNECTION : BOOL := FALSE;
     PORT_DEST      : UINT := 16#29A;
     IP_DEST        : UDINT := 16#C0A800C7;
 END_VAR

 (* Exemplo do bloco de abertura de conexao *)
 TCP_CONN(
   START      := CONN_START,
   SOCK       := HILS.SOCK7_PORT_ID,
   IP         := IP_DEST,    (* IP: 192.168.0.199 *)
   PORT       := PORT_DEST,  (* Porta: 666 *)
   AUTO       := AUTOCONNECT
   (* RETRY - Mantem a entrada com o valor default (15 segundos) *)
   );

 (* Avalia o resultado da tentativa de conexao *)
 IF (TCP_CONN.EVT) THEN
   STS_CONNECTION := TCP_CONN.CONNECTED;
   IF (TCP_CONN.RESULT = HILS.SUCCESS) THEN
     (* Conexao realizada com sucesso *)
   ELSE
     (* Falha no processo de conexao *)
   END_IF;
 END_IF;