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:
|
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 |
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;