COMM_SEND_REC
A função deste bloco é encaminhar um serviço de comunicação, permitindo enviar e opcionalmente receber dados da aplicação para um dispositivo remoto através de qualquer dos canais de comunicação disponíveis no equipamento.
O bloco quando ativado, envia pelo canal de comunicação especificado para o equipamento remoto, o pacote de dados presente em O_PACK. Uma vez enviado o pacote de dados, a aplicação é notificada e pode aguardar um pacote de resposta enviado pelo equipamento remoto. Esta resposta é opcional e é possível apenas aguardar o término do envio e terminar o tratamento.
Este bloco trata o conteúdo dos dados enviados e obtidos de forma agnóstica.
Importante
Para operação correta, o canal de comunicação utilizado deve ser previamente configurado para operação com protocolo ASCII, com ou sem SOF e EOF.
Ver também
Consulte o bloco COMM_REC_SEND para receber e opcionalmente enviar um pacote de um equipamento remoto.
Dica
Assista ao vídeo tutorial utilizando o bloco de função para aplicações envolvendo envio de strings: Tutorial COMM_SEND_REC
Bloco
COMM_SEND_REC
+----------------------+
BOOL ----|START READY|---- BOOL
| |
BOOL ----|REPLY REC_BYTES|---- INT
| |
UINT ----|COMM_SRC RESULT|---- INT
| |
UINT ----|SEND_BYTES |
| |
----|O_PACK -------------- |----
| |
----|I_PACK -------------- |----
+----------------------+
Parâmetros
Nome |
Classe |
Tipo |
Dim. |
V. Ini. |
Descrição |
START |
Entrada |
BOOL |
FALSE |
Inicia uma transacao de comunicação (ativa na transição de subida) |
|
REPLY |
Entrada |
BOOL |
FALSE |
Se true indica que o bloco deve aguardar uma resposta do equipamento remoto |
|
COMM_SRC |
Entrada |
UINT |
0 |
Identificador do canal de comunicacação (0: COM1, 1:COM2, 11: SOCKET 1 … ) |
|
SEND_BYTES |
Entrada |
UINT |
0 |
Quantidade de bytes do buffer de saida (O_BUF) a ser enviado pelo canal especificado |
|
READY |
Saída |
BOOL |
FALSE |
Quando igual a TRUE indica transação de comunicação concluída |
|
REC_BYTES |
Saída |
INT |
0 |
Nro. de bytes recebidos do equipamento remoto |
|
RESULT |
Saída |
INT |
0 |
Código de retorno da última transação executada. É atualizado quando a saída READY for para 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:
|
I_PACK e O_PACK
Os parâmetros I_PACK e O_PACK podem ser vetores de qualquer tipo de dados ou estruturas. Cabe ressaltar que, o pacote de dados recebido é transferido para o parâmetro I_PACK da mesma forma que foi recebido. Se o canal associado possuir SOF ou EOF configurados, estes dados não são transferidos para o parâmetro.
Importante
Caso a aplicação necessite enviar o pacote de dados com SOF e/ou EOF é de responsabilidade da aplicação inserir estes valores no buffer de retorno O_PACK. Os valores de SOF e EOF configurados na base de comunicação são utilizados apenas para a recepção dos pacotes.
COMM_SRC
O canal de comunicação utilizado é 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. |
Exemplo
Declaração de Variáveis
Nome |
Tipo |
Dimensão |
Valor Inicial |
Descrição |
|---|---|---|---|---|
MY_TRANS |
COMM_SEND_REC |
Instancia do bloco de comunicação COMM_SEND_REC |
||
MY_SEND |
BOOL |
Inicia um transação |
||
MY_IBUF |
USINT |
[0..9] |
Buffer que receberá a resposta do equipamento remoto |
|
MY_OBUF |
USINT |
[0..9] |
Buffer utilizado para enviar o pacote |
|
O_PACK_LEN |
USINT |
0 |
Tamanho do pacote a ser enviado |
Código ST
(* ... *)
(* Ative a variavel READY_TO_SEND quando desejar iniciar uma transação *)
IF (MY_SEND) THEN
(* pacote de dados a ser enviado *)
MY_OBUF[0] := 16#4F; // O
MY_OBUF[1] := 16#4B; // K
MY_OBUF[2] := 16#0D; // CR
MY_OBUF[3] := 16#0A; // LF
O_PACK_LEN := 4; // tamanho do buffer de resposta
END_IF;
(* ... *)
(* aguarda envio do pacote e a resposta do equipamento remoto *)
MY_TRANS(
START := MY_SEND, // Inicia uma transação de comunicação (ativa na transição de subida)
REPLY := TRUE, //
COMM_SRC := HILS.COM1_PORT_ID, // Identificador do canal de comunicacação (COM1)
SEND_BYTES := O_PACK_LEN, // tamanho do pacote a ser enviado
I_PACK := MY_IBUF, // buffer para receber o pacote de resposta do equipamento remoto
O_PACK := MY_OBUF // buffer utilizado para montar o pacote a ser enviado
);
(* aguarda final da transação *)
IF (MY_TRANS.READY) THEN
IF (MY_TRANS.RESULT = 0) THEN
(* transação realizada com sucesso. Trata os dados recebidos em I_PACK *)
(* ... *)
ELSE
(* transação realizada com falha *)
(* ... *)
END_IF;
MY_SEND := FALSE; // prepara para proxima transação
END_IF;
(* ... *)