MDB_DATA_COMM

Encaminha um serviço de comunicação para ler ou escrever dados da aplicação em um dispositivo remoto por qualquer canal disponível no equipamento, tratando o protocolo de forma agnóstica. É um bloco de função (requer instância); está obsoleto e mantido apenas por compatibilidade — em novos projetos use MDB_DATA_COMM_EX.

Biblioteca: HI_STD · Namespace: HILS · Tipo: bloco de função

Bloco de função

            MDB_DATA_COMM
        +------------------+
        |                  |
BOOL ---| EN           ENO |--- BOOL
        |                  |
BOOL ---> START      READY |--- BOOL
        |                  |
UINT ---| COMM_SRC  RESULT |--- INT
        |                  |
UINT ---| DEV_ADDR         |
        |                  |
BOOL ---| RD_WR            |
        |                  |
UINT ---| DT_TYPE          |
        |                  |
UINT ---| DT_SIZE          |
        |                  |
UINT ---| REM_VAR          |
        |                  |
 ANY ---| DATA-------------|--- ANY
        |                  |
        +------------------+

Cada transação é iniciada por uma transição de subida em START. Ao concluir, a saída READY vai para TRUE e RESULT é atualizado com o código de retorno da transação.

Nota

Esta função foi classificada como obsoleta e é mantida na biblioteca apenas para compatibilidade com aplicações legadas. Para novos projetos utilize a função MDB_DATA_COMM_EX, que acrescenta a gerência de conexão/desconexão TCP para canais Ethernet.

Parâmetros

Nome

Direção

Tipo

Padrão

Faixa / Unidade

Descrição

EN

IN

BOOL

TRUE

—

Habilitação de entrada; o bloco só é processado com EN = TRUE.

START

IN

BOOL

FALSE

—

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

COMM_SRC

IN

UINT

0

0 .. 23

Identificador do canal de comunicação (ver Canais de comunicação).

DEV_ADDR

IN

UINT

0

—

Endereço de comunicação do equipamento remoto.

RD_WR

IN

BOOL

FALSE

—

Tipo de transferência: FALSE = leitura (RD), TRUE = escrita (WR).

DT_TYPE

IN

UINT

0

1 .. 8

Tipo do dado transferido (ver Tipos de dado).

DT_SIZE

IN

UINT

1

—

Quantidade de variáveis do tipo especificado (ver limites em Observações).

REM_VAR

IN

UINT

0

—

Variável inicial no equipamento remoto.

DATA

IN_OUT

ANY

—

—

Dado transferido (recebido se RD_WR = FALSE; enviado se TRUE). Escalar, vetor ou estrutura.

ENO

OUT

BOOL

FALSE

—

Saída de habilitação (ativa se EN = TRUE).

READY

OUT

BOOL

FALSE

—

TRUE indica transação concluída; RESULT é atualizado nesse instante.

RESULT

OUT

INT

0

RET_CODE

Código de retorno da última transação (ver Códigos de retorno).

Canais de comunicação (COMM_SRC)

Use os identificadores do tipo COMM_CHAN_ID (namespace HILS). Cada equipamento suporta apenas um subconjunto — consulte o manual do equipamento.

Identificador

Ident.

Descrição

HILS.COM1_PORT_ID .. COM8_PORT_ID

0 .. 7

Canais seriais COM1 a COM8.

HILS.SOCK0_PORT_ID .. SOCK7_PORT_ID

8 .. 15

Controlador Ethernet 1: sockets 0 a 7.

HILS.ETH2_SOCK0_PORT_ID .. ETH2_SOCK7_PORT_ID

16 .. 23

Controlador Ethernet 2: sockets 0 a 7.

Tipos de dado (DT_TYPE)

Identificadores do tipo TYPE_LEN_ID (namespace HILS) e o mapeamento Modbus:

ID

Identificador

Mapeamento Modbus

1

DTL_BIT_ID

COIL

2

DTL_BYTE_ID

n.d.

3

DTL_WORD_ID

HOLDING REGISTER

4

DTL_DWORD_ID

HOLDING REGISTER × 2

5

DTL_LWORD_ID

HOLDING REGISTER × 4

6

DTL_STRING_ID

HOLDING REGISTER × 123 (246 caracteres)

7

DTL_DIG_IO_ID

DISCRETE INPUTS

8

DTL_ANA_IO_ID

INPUT REGISTER

Códigos de retorno

RESULT é do tipo RET_CODE: 0 (HILS.SUCCESS) indica transação bem-sucedida; qualquer valor diferente de 0 indica falha na comunicação (tipicamente da família CO_*, ou MB_* para exceções do protocolo Modbus). Lista completa: RET_CODE - Códigos de retorno do firmware G5.

Pré-condições

  • O canal indicado em COMM_SRC deve existir e estar disponível no equipamento.

  • DATA deve ser compatível, em tipo e tamanho, com DT_TYPE e DT_SIZE.

Observações

  • O total de dados não pode exceder um pacote do protocolo: em Modbus, leitura de até 125 HOLDING REGISTER ou 2000 COIL; escrita de até 123 HOLDING REGISTER ou 1968 COIL.

  • Aguarde READY = TRUE antes de avaliar RESULT.

  • Bloco obsoleto: prefira MDB_DATA_COMM_EX em novos projetos.

Ver também

MDB_DATA_COMM_EX, DATA_COMM

Exemplo

Clique aqui para baixar a tabela de variáveis

Código ST

TYPE
    VET_COIL : ARRAY [0..4] OF BOOL;  (* Base de status do processo *)
    VET_HREG : ARRAY [0..2] OF INT;   (* Base de parâmetros de configuração *)
END_TYPE

VAR
    my_DATA_COMM : HILS.MDB_DATA_COMM; (* Instância do bloco de comunicação *)
    data_coil    : VET_COIL;           (* Variável do tipo VET_COIL (usuário) *)
    data_hreg    : VET_HREG;           (* Variável do tipo VET_HREG (usuário) *)
END_VAR

(* Lê os coils 10 a 14 do controlador remoto (COM1, endereço 1) *)
my_DATA_COMM(
          EN        := TRUE,
          START     := TRUE,
          COMM_SRC  := HILS.COM1_PORT_ID,
          DEV_ADDR  := 1,
          RD_WR     := FALSE,             (* leitura *)
          DT_TYPE   := HILS.DTL_BIT_ID,   (* coil *)
          DT_SIZE   := 5,
          REM_VAR   := 10,
          DATA      := data_coil
          );
IF (my_DATA_COMM.READY = TRUE) THEN
  IF (my_DATA_COMM.RESULT = HILS.SUCCESS) THEN
    (* data_coil[0..4] contêm os coils lidos *)
  ELSE
    (* tratar falha de comunicação *)
  END_IF;
END_IF;

(* Escreve data_coil[0..4] nos coils 10 a 14: mesma chamada com RD_WR := TRUE *)

(* Lê os holding registers 100 a 102 do controlador remoto *)
my_DATA_COMM(
          EN        := TRUE,
          START     := TRUE,
          COMM_SRC  := HILS.COM1_PORT_ID,
          DEV_ADDR  := 1,
          RD_WR     := FALSE,
          DT_TYPE   := HILS.DTL_WORD_ID,  (* holding register *)
          DT_SIZE   := 3,
          REM_VAR   := 100,
          DATA      := data_hreg
          );
IF (my_DATA_COMM.READY = TRUE) THEN
  IF (my_DATA_COMM.RESULT = HILS.SUCCESS) THEN
    (* data_hreg[0..2] contêm os registradores lidos *)
  END_IF;
END_IF;