COMM_BRIDGE

Este bloco tem por função implementar uma Bridge de comunicação entre 2 canais quaisquer que do equipamento associado. Desta forma, todos os pacotes recebidos pelos canais COMM_SRC ou COMM_DST podem ser recebidos pelo bloco, processados e redirecionados para o outro canal.

Bloco

             COMM_BRIDGE
         +-----------------+
BOOL ----|START       GOTDT|---- BOOL
         |                 |
UINT ----|COMM_SRC     DONE|---- BOOL
         |                 |
UINT ----|COMM_DST   TCOUNT|---- UDINT
         |                 |
BOOL ----|SEND       RESULT|---- INT
         |                 |
UINT ----|PACK_LEN ------- |----
         |                 |
     ----|O_PACK --------- |----
         |                 |
     ----|I_PACK --------- |----
         +-----------------+

O processo é iniciado através da ativação da entrada START que deve permanecer ativa durante todo o tempo de execução.

O bloco envia uma sinalização na saída GOTDT sempre que um pacote de comunicação for recebido pelo canal COMM_SRC através do buffer I_PACK.

Neste evento, o conteúdo de I_PACK pode ser lido e processado e, opcionalmente pode ser montado um pacote em O_PACK e enviado através da ativação da entrada SEND.

Caso o pacote recebido não necessite gere necessidade de enviar uma resposta a ativação da entrada SEND deve ser realizada juntamente com o valor PACK_LEN igual a zero.

Importante

Para a utilização desse bloco, o recurso PPE entre os dois canais deve estar desabilitado. Pode-se desabilitar e habilitar esse recurso utilizando-se a variável de sistema F197.

Parâmetros

Nome

Classe

Tipo

Dim.

V. Ini.

Descrição

START

Entrada

BOOL

FALSE

Inicia uma transação de comunicação (ativa na transição de subida)

COMM_SRC

Entrada

UINT

0

Identificador do canal de comunicação a receber o pacote (0: COM1, 1:COM2, 11: SOCKET 1 … )

COMM_DST

Entrada

UINT

0

Identificador do canal de comunicação a enviar o pacote (0: COM1, 1:COM2, 11: SOCKET 1 … )

SEND

Entrada

BOOL

FALSE

Flag para enviar os dados recebidos pelo canal COMM_DST

PACK_LEN

Entrada/Saída

UINT

0

Quantidade de bytes do buffer de saida (O_BUF) a ser enviado pelo canal especificado

GOTDT

Saída

BOOL

FALSE

Gera um pulso após receber um pacote de dados e transferir para o I_PACK

DONE

Saída

BOOL

FALSE

Gera um pulso indicando que concluiu uma transação de comunicação (recepção e envio)

TCOUNT

Saída

UDINT

0

RESULT

Saída

INT

0

Código de retorno da recepção (quando GOTDT = TRUE) e da transação (DONE = TRUE)

O_PACK

Entrada/Saída

ANY

Buffer de bytes a ser enviado pelo canal de comunicação especificado

I_PACK

Entrada/Saída

ANY

Buffer de bytes recebido pela transação (se habilitada recepção)

RESULT

Tipo Dado

Descrição

INT

Código de retorno na execução da função, do tipo RET_CODE, onde:

  • Se for igual a 0: Função executada com sucesso - código HILS.SUCCESS

  • Se for diferente de 0: Falha na execução da função indica o respectivo código de erro. [2]

COMM_SRC

Canal de comunicação utilizado para recepção dos pacotes. É especificado por um identificador (valor numérico) conforme indicado na tabela a seguir:

Nome

Ident.

Descrição

HILS.COM1_PORT_ID

0

Canal serial COM1

HILS.COM2_PORT_ID

1

Canal serial COM2

HILS.COM3_PORT_ID

2

Canal serial COM3

HILS.COM4_PORT_ID

3

Canal serial COM4

HILS.COM5_PORT_ID

4

Canal serial COM5

HILS.COM6_PORT_ID

5

Canal serial COM6

HILS.COM7_PORT_ID

6

Canal serial COM7

HILS.COM8_PORT_ID

7

Canal serial COM8

HILS.SOCK0_PORT_ID

8

Controlador Ethernet 1: Socket 0

HILS.SOCK1_PORT_ID

9

Controlador Ethernet 1: Socket 1

HILS.SOCK2_PORT_ID

10

Controlador Ethernet 1: Socket 2

HILS.SOCK3_PORT_ID

11

Controlador Ethernet 1: Socket 3

HILS.SOCK4_PORT_ID

12

Controlador Ethernet 1: Socket 4

HILS.SOCK5_PORT_ID

13

Controlador Ethernet 1: Socket 5

HILS.SOCK6_PORT_ID

14

Controlador Ethernet 1: Socket 6

HILS.SOCK7_PORT_ID

15

Controlador Ethernet 1: Socket 7

HILS.ETH2_SOCK0_PORT_ID

16

Controlador Ethernet 2: Socket 0

HILS.ETH2_SOCK1_PORT_ID

17

Controlador Ethernet 2: Socket 1

HILS.ETH2_SOCK2_PORT_ID

18

Controlador Ethernet 2: Socket 2

HILS.ETH2_SOCK3_PORT_ID

19

Controlador Ethernet 2: Socket 3

HILS.ETH2_SOCK4_PORT_ID

20

Controlador Ethernet 2: Socket 4

HILS.ETH2_SOCK5_PORT_ID

21

Controlador Ethernet 2: Socket 5

HILS.ETH2_SOCK6_PORT_ID

22

Controlador Ethernet 2: Socket 6

HILS.ETH2_SOCK7_PORT_ID

23

Controlador Ethernet 2: Socket 7

Este texto pode ser utilizado como parâmetro pois esta definido no tipo COMM_CHAN_ID disponível na biblioteca HI_STD.

Cada equipamento possui um sub-conjunto dos recursos de comunicação indicados na tabela acima. Para identificar quais recursos estão disponíveis em um dado equipamento, consulte o manual do mesmo.

COMM_DST

Canal de comunicação utilizado para transmissão dos pacotes. Vide descrição do campo COMM_SRC para mais informações.

PACK_LEN

Define o número de bytes a serem enviados pelo canal COMM_DST após o a ocorrência do evento GOTDT que indica a chegada de um pacote de dados pelo canal COMM_SRC. O valor pode ser zero se não houver necessidade de envio de dados após o processamento do pacote recebido.

SEND

Após a ocorrência do evento GOTDT esta entrada, quando ativada notifica ao bloco que os dados disponíveis no buffer de saída O_PACK podem ser enviados pelo canal COMM_DST. Caso não exista necessidade de envio de um pacote, ative a entada SEND atribuindo 0 no parâmetro PACK_LEN.

DONE

Este evento é gerado sempre que terminar uma transação de comunicação. Quando isso ocorrer, a saída DONE ficará ativa durante um ciclo indicando fim de execução.

Uma transação de comunicação neste contexto é definida como uma recepção de um pacote pelo canal COMM_SRC e o envio (eventualmente com tamanho zero) de um pacote pelo canal COMM_DST.

Importante

Note que, mesmo que não seja necessário enviar um pacote para o canal de destino este processo deve ser realizado com o valor zero para PACK_LEN e ativação da entrada SEND.

Exemplo

Declaração de Variáveis

Nome

Classe

Tipo

Dimensão

Valor Inicial

Descrição

BF_COMM_BRIDGE

Local

HILS.COMM_BRIDGE

Bridge de comunicação

START

Local

BOOL

FALSE

Start do bloco COMM_BRIDGE

SEND_NOW

Local

BOOL

FALSE

habilita envio da resposta

PACK_LEN

Local

UINT

0

Tamanho do pacote BUFF_OUT a ser enviado

BUFF

Local

USINT

[0..99]

Instância do buffer a ser enviado

Clique aqui para baixar a tabela de variáveis

Código ST

// Implementa uma bridge transparente, encaminhando para o canal destino todos
// os pacotes recebidos no canal fonte.

BF_COMM_BRIDGE(                    // COMM_BRIDGE
  START    := START,               // [BOOL] Inicia uma transacao de comunicação (ativa na transição de subida)
  COMM_SRC := HILS.SOCK1_PORT_ID,  // [UINT] Identificador do canal de comunicação a receber o pacote (0: COM1, 1:COM2, 11: SOCKET 1 ... )
  COMM_DST := HILS.SOCK2_PORT_ID,  // [UINT] Identificador do canal de comunicação a enviar o pacote (0: COM1, 1:COM2, 11: SOCKET 1 ... )
  SEND     := SEND_NOW,            // [BOOL] Flag para enviar os dados recebidos pelo canal COMM_DST
  PACK_LEN := PACK_LEN,            // [UINT] Quantidade de bytes do buffer de saida (O_BUF) a ser enviado pelo canal especificado
  O_PACK   := BUFF,                // [] Buffer de bytes a ser enviado pelo canal de comunicação especificado
  I_PACK   := BUFF                 // [] Buffer de bytes recebido pela transação
  );

IF BF_COMM_BRIDGE.GOTDT THEN
  SEND_NOW := TRUE; // envia para o destino o pacote recebido
END_IF;

IF BF_COMM_BRIDGE.DONE THEN
  SEND_NOW := FALSE; // termina o processamento da transação
END_IF;