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 |
START |
IN |
BOOL |
FALSE |
— |
Inicia uma transação de comunicação (transição de subida). |
COMM_SRC |
IN |
UINT |
0 |
|
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 |
|
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 |
ENO |
OUT |
BOOL |
FALSE |
— |
Saída de habilitação (ativa se |
READY |
OUT |
BOOL |
FALSE |
— |
TRUE indica transação concluída; |
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 |
|---|---|---|
|
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. |
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_SRCdeve existir e estar disponível no equipamento.DATAdeve ser compatível, em tipo e tamanho, comDT_TYPEeDT_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 avaliarRESULT.Bloco obsoleto: prefira MDB_DATA_COMM_EX em novos projetos.
Ver também
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;