MDB_DATA_COMM_EX
Encaminha um serviço de comunicação MODBUS para ler ou escrever dados em um dispositivo remoto por qualquer canal do equipamento. Comparado a MDB_DATA_COMM, acrescenta a gerência de conexão/desconexão TCP quando o canal associado é Ethernet. É um bloco de função (requer instância).
Biblioteca: HI_STD · Namespace: HILS · Tipo: bloco de função
Bloco de função
MDB_DATA_COMM_EX
+--------------------+
BOOL ----|START READY|---- BOOL
| |
BOOL ----|RD_WR RESULT|---- INT
| |
BOOL ----|TCP_CONN RD_CHG|---- BOOL
| |
UDINT ----|ETH_IP CONNECTED|---- BOOL
| |
UINT ----|ETH_PORT |
| |
UINT ----|COMM_SRC |
| |
UINT ----|DEV_ADDR |
| |
UINT ----|DT_TYPE |
| |
UINT ----|DT_SIZE |
| |
UINT ----|REM_VAR |
| |
----|DATA -------------- |----
+--------------------+
Parâmetros
Nome |
Direção |
Tipo |
Padrão |
Faixa / Unidade |
Descrição |
|---|---|---|---|---|---|
START |
IN |
BOOL |
FALSE |
— |
Inicia uma transação de comunicação (transição de subida). |
RD_WR |
IN |
BOOL |
FALSE |
— |
Tipo de transferência: FALSE = leitura (RD), TRUE = escrita (WR). |
TCP_CONN |
IN |
BOOL |
FALSE |
— |
Habilita o tratamento de conexão TCP (canais Ethernet). Ver Observações. |
ETH_IP |
IN |
UDINT |
16#C0A800C8 |
IP |
Endereço IP do equipamento remoto (conexão Ethernet). |
ETH_PORT |
IN |
UINT |
502 |
porta |
Porta Ethernet do equipamento remoto (conexão Ethernet). |
COMM_SRC |
IN |
UINT |
0 |
0 .. 23 |
Identificador do canal de comunicação (ver Canais de comunicação). |
DEV_ADDR |
IN |
UINT |
1 |
— |
Endereço MODBUS do equipamento remoto. |
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 |
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). |
RD_CHG |
OUT |
BOOL |
FALSE |
— |
Em uma leitura, TRUE indica que houve valores alterados. |
CONNECTED |
OUT |
BOOL |
FALSE |
— |
Indica conexão aberta com o equipamento remoto (conexões Ethernet). |
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_*). Lista completa: RET_CODE - Códigos de retorno do firmware G5.
Observações
TCP_CONN (canais Ethernet): quando ativo junto com
START, abre a conexão TCP (usandoETH_IP/ETH_PORT) antes de enviar os dados. ComSTARTdesativado eTCP_CONNmantido ativo, a conexão permanece aberta para novas trocas. ReativarSTARTcom parâmetros de conexão alterados fecha a conexão atual e abre outra. DesativarSTARTjunto comTCP_CONNfecha a conexão. Ignorado em canais não-Ethernet.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
READYantes de avaliarRESULT.
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_MDB_COMM : HILS.MDB_DATA_COMM_EX; (* 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) *)
start_read : BOOL; (* comando para início de leitura (usuário) *)
start_write : BOOL; (* comando para início de escrita (usuário) *)
END_VAR
(* Lê os coils 10 a 14 do controlador remoto (COM1, endereço 1) *)
my_MDB_COMM(
START := start_read, (* Ative o start_read para iniciar o processo de leitura *)
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_MDB_COMM.READY = TRUE) THEN
IF (my_MDB_COMM.RESULT = HILS.SUCCESS) THEN
(* data_coil[0..4] contêm os coils lidos *)
ELSE
(* tratar falha de comunicação *)
END_IF;
start_read := FALSE; // termina a transação de leitura
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_MDB_COMM(
START := start_write, (* Ative o start_write para iniciar o processo de escrita *)
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_MDB_COMM.READY = TRUE) THEN
IF (my_MDB_COMM.RESULT = HILS.SUCCESS) THEN
(* data_hreg[0..2] contêm os registradores lidos *)
END_IF;
start_write := FALSE; // termina a transação de escrita
END_IF;