COMM_BRIDGE
Implementa uma bridge (ponte) de comunicação entre dois canais quaisquer do
equipamento: cada pacote recebido pelo canal fonte (COMM_SRC) pode ser lido,
processado e reencaminhado pelo canal destino (COMM_DST). É um bloco de
função (mantém estado entre scans; requer instância) e exige que o recurso PPE
entre os dois canais esteja desabilitado.
Biblioteca: HI_STD · Namespace: HILS · Tipo: bloco de função
Bloco de função
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 pela ativação de START, que deve permanecer ativa
durante todo o tempo de execução do bloco.
O bloco sinaliza na saída GOTDT (pulso de um ciclo) sempre que um pacote de
comunicação é recebido pelo canal COMM_SRC e transferido para o buffer
I_PACK. Nesse evento, o conteúdo de I_PACK pode ser lido e processado e,
opcionalmente, um pacote pode ser montado em O_PACK e enviado pelo canal
COMM_DST ativando a entrada SEND.
Se o pacote recebido não exigir resposta, a entrada SEND deve ainda assim ser
ativada, porém com PACK_LEN igual a zero. A conclusão de uma transação
(recepção + envio, eventualmente com tamanho zero) é sinalizada por um pulso em
DONE.
Importante
Para utilizar este bloco, o recurso PPE entre os dois canais deve estar
desabilitado. É possível desabilitar/habilitar esse recurso por meio da
variável de sistema F197.
Importante
Mesmo quando não há pacote a enviar ao canal de destino, a transação deve ser
encerrada ativando SEND com PACK_LEN igual a zero.
Parâmetros
Nome |
Direção |
Tipo |
Padrão |
Faixa / Unidade |
Descrição |
|---|---|---|---|---|---|
START |
IN |
BOOL |
FALSE |
— |
Inicia a transação de comunicação (ativa na transição de subida); deve permanecer TRUE durante a execução. |
COMM_SRC |
IN |
UINT |
0 |
COMM_CHAN_ID |
Identificador do canal de comunicação que recebe o pacote (ver Observações). |
COMM_DST |
IN |
UINT |
0 |
COMM_CHAN_ID |
Identificador do canal de comunicação que envia o pacote (ver Observações). |
SEND |
IN |
BOOL |
FALSE |
— |
Avaliado após |
PACK_LEN |
IN_OUT |
UINT |
0 |
bytes |
Quantidade de bytes de |
O_PACK |
IN_OUT |
ANY |
— |
— |
Buffer de bytes a ser enviado pelo canal |
I_PACK |
IN_OUT |
ANY |
— |
— |
Buffer de bytes recebido do canal |
GOTDT |
OUT |
BOOL |
FALSE |
— |
Pulso emitido após receber um pacote e transferi-lo para |
DONE |
OUT |
BOOL |
FALSE |
— |
Pulso indicando a conclusão de uma transação (recepção e envio). |
TCOUNT |
OUT |
UDINT |
0 |
— |
Contador acumulado de transações concluídas. |
RESULT |
OUT |
INT |
0 |
RET_CODE |
Código de retorno da recepção (quando |
Códigos de retorno
RESULT é do tipo RET_CODE: 0 ( HILS.SUCCESS ) indica sucesso e
qualquer valor diferente de zero indica falha. Use os identificadores com o
namespace HILS (ex.: HILS.CO_SOCK_ERR). Códigos comuns neste bloco:
Código |
Identificador |
Significado |
|---|---|---|
0 |
SUCCESS |
Transação executada com sucesso. |
63 |
CO_CONEX_FAIL |
Falha no processo de conexão. |
67 |
CO_SOCK_ERR |
Erro de socket. |
68 |
CO_TRA_BUF_OVL |
Overflow no buffer de transmissão. |
69 |
CO_REC_BUF_OVR |
Overrun no buffer de recepção. |
70 |
CO_COM_ERR |
Erro genérico de comunicação. |
74 |
CO_INV_CHA |
Canal de comunicação inválido. |
Lista completa dos códigos de retorno: RET_CODE - Códigos de retorno do firmware G5.
Pré-condições
O recurso PPE entre
COMM_SRCeCOMM_DSTdeve estar desabilitado (variável de sistemaF197).Os canais indicados em
COMM_SRCeCOMM_DSTdevem existir e estar disponíveis no equipamento.O_PACKdeve estar montado ePACK_LENdefinido antes de ativarSEND(usePACK_LEN= 0 quando não houver resposta).
Observações
A saída
GOTDTé um pulso; leia/processeI_PACKno ciclo em que ela estiver ativa.Uma transação corresponde à recepção de um pacote por
COMM_SRCe ao envio (eventualmente de tamanho zero) de um pacote porCOMM_DST, encerrada por um pulso emDONE.Os canais
COMM_SRCeCOMM_DSTsão identificados por um valor numérico. O tipoCOMM_CHAN_IDda biblioteca HI_STD fornece os identificadores correspondentes:
Identificador |
Ident. |
Descrição |
|---|---|---|
|
0 .. 7 |
Canais seriais COM1 a COM8. |
|
8 .. 15 |
Controlador Ethernet 1: sockets 0 a 7. |
|
16 .. 23 |
Controlador Ethernet 2: sockets 0 a 7. |
Ver também
Exemplo
Clique aqui para baixar a tabela de variáveis
Código ST
VAR
BF_COMM_BRIDGE : HILS.COMM_BRIDGE; (* Bridge de comunicacao *)
START : BOOL := FALSE; (* Start do bloco COMM_BRIDGE *)
SEND_NOW : BOOL := FALSE; (* Habilita envio da resposta *)
PACK_LEN : UINT; (* Tamanho do pacote O_PACK a ser enviado *)
BUFF : ARRAY [0..99] OF USINT; (* Buffer de recepcao/envio *)
END_VAR
(* Implementa uma bridge transparente, encaminhando para o canal destino
todos os pacotes recebidos no canal fonte. *)
BF_COMM_BRIDGE(
START := START, (* Inicia a transacao (transicao de subida) *)
COMM_SRC := HILS.SOCK1_PORT_ID, (* Canal de comunicacao que recebe o pacote *)
COMM_DST := HILS.SOCK2_PORT_ID, (* Canal de comunicacao que envia o pacote *)
SEND := SEND_NOW, (* Flag de envio pelo canal COMM_DST *)
PACK_LEN := PACK_LEN, (* Bytes de O_PACK a enviar *)
O_PACK := BUFF, (* Buffer a ser enviado *)
I_PACK := BUFF (* Buffer recebido na transacao *)
);
IF BF_COMM_BRIDGE.GOTDT THEN
SEND_NOW := TRUE; (* Encaminha para o destino o pacote recebido *)
END_IF;
IF BF_COMM_BRIDGE.DONE THEN
SEND_NOW := FALSE; (* Termina o processamento da transacao *)
END_IF;