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:

  • 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]

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

Clique aqui para baixar a tabela de variáveis

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;
(* ... *)