Caminho:  Equipamentos (Dispositivos) > PLC200 > Programa > Communication Network > Modbus TCP >

MBTCP_ReadRegister

Leitura de Registradores em rede Modbus TCP

Previous pageReturn to chapter overviewNext page

Bloco que executa uma leitura de até 64 registradores de 16 bits (via Read Holding Registers ou Read Input Registers) de um servidor em rede Modbus TCP.

 

Representação Ladder

 

MBTCP_READREGISTER_block

 

Estrutura do Bloco

 

Tipo de Variável

Nome

Tipo de Dado

Descrição

VAR_INPUT

Execute

BOOL

Habilitação do bloco

ServerAddress

DWORD

Endereço IP do servidor

(Ex: 192.168.0.1)

ServerPort

WORD

Porta Modbus TCP do servidor

(Padrão: 502)

UnitID

BYTE

UnitID do servidor

(Padrão: 255)

Function#

BYTE

Código da função de leitura

InitialDataAddress

WORD

Endereço do registrador inicial a ser lido

NumberOfData

BYTE

Número de registradores a serem lidos (1 a 64)

Timeout#

WORD

Tempo máximo de espera pela resposta do servidor [ms]

Offset#

BOOL

Indicação de offset em InitialDataAddress, ou seja, necessidade de subtrair 1 deste número

VAR_OUTPUT

Done

BOOL

Habilitação de saída

Active

BOOL

Sinalizador de aguardo de resposta

Busy

BOOL

Sinalizador de que a conexão está ocupada com outra requisição

Error

BOOL

Sinalizador de erro na execução

ErrorID

BYTE

Identificador do erro ocorrido

Value

BYTE SINT USINT WORD UINT INT DWORD UDINT DINT REAL

Variável que armazena os dados recebidos

VAR

MBTCP_READREGISTER_INST_0

MBTCP_READREGISTER

Instância de acesso à estrutura do bloco

 

Funcionamento

 

 

Este bloco, quando detecta uma borda de subida em Execute, verifica se o servidor Modbus TCP no endereço especificado em ServerAddress está livre para envio de dados (variável Busy em nível FALSE). Caso esteja, envia a requisição de leitura de um número de registradores indicado por NumberOfData no endereço InitialDataAddress utilizando a função escolhida em Function# e seta a saída Active, resetando-a ao receber a resposta do servidor. Os dados recebidos são armazenados na variável Value. Caso o servidor não esteja livre, o bloco aguarda Busy ir para nível FALSE para reenviar a solicitação.

 

wpshelp_common_fig_note

NOTA!

Caso Execute vá para nível FALSE e Busy ainda esteja em nível TRUE, a requisição é cancelada.

 

wpshelp_common_fig_note

NOTA!

Value é um array de número de bits a NumberOfData multiplicado por 16. Ou seja, caso NumberOfData seja 16, Value pode ser um array de 32 posições BYTE, 16 posições WORD ou 8 posições DWORD. É importante verificar esta compatibilidade para não gerar erros no bloco.

 

Quando Execute possui valor FALSE, Done permanece FALSE. A saída Done só é ativada quando o bloco termina a execução com sucesso, permanecendo em nível TRUE até que Execute receba FALSE.

 

Caso haja algum erro na execução, a saída Error é ativada e ErrorID exibe o código do erro segundo a tabela abaixo.

 

Código

Descrição

0

Executado com sucesso

1

Algum dado de entrada inválido

2

Cliente não habilitado

4

Timeout na resposta do servidor

5

Servidor retornou erro

6

Falha ao conectar com o servidor

7

Conexão TCP/IP terminada prematuramente

 

Compatibilidade

 

Equipamento

Versão

PLC300

1.30 ou superior

 

Fluxograma do Bloco

 

MBTCP_READREGISTER_flowchart

 

Exemplo em Ladder

 

MBTCP_READREGISTER_example01

 

O exemplo acima requisita leitura de um número de dados de registradores descrito por DATA_COUNT, posicionados em INIT no servidor Modbus TCP de endereço SERVER:PORT através da função Read Holding Register. Esses dados são repassados a VALUE. Finalizado o bloco com sucesso, a saída Done é ativada.

 

Exemplo em ST

 

 O exemplo abaixo, exibe as instruções para aplicação do exemplo acima na linguagem ST.

 

 

VAR

  SERVER : DWORD := 16#C0A8000A; // 192.168.0.10 = 3232235530

  PORT : WORD := 502;

  UNITID : BYTE := 255;

   INIT : WORD;

   DATA_COUNT : BYTE;

  VALUE : ARRAY [0..4] OF WORD;

   MBTCP_READREGISTER_INST_0 : FB_MBTCP_ReadRegister;

END_VAR

 

MBTCP_READREGISTER_INST_0.Execute := DI1;

MBTCP_READREGISTER_INST_0(

   ServerAddress:=SERVER,

   ServerPort:=PORT,

   UnitID:=UNITID,

   Function:=3,

   InitialDataAddress:=INIT,

   NumberOfData:=DATA_COUNT,

   Timeout:=50,

   Offset:=0,

  Value=>VALUE);

DO1 := MBTCP_READREGISTER_INST_0.Done;