Bloco que executa uma leitura de até 128 dados binários (via Read Coils ou Read Discrete Inputs) de um servidor em rede Modbus TCP.
Representação Ladder

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 bit inicial dos dados a serem lidos |
|
NumberOfData |
BYTE |
Número de bits a serem lidos (1 a 128) |
|
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 |
BOOL |
Variável que armazena os dados recebidos |
|
VAR |
MBTCP_READBINARY _INST_0 |
MBTCP_READBINARY |
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 bits 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.
|
NOTA! Caso Execute vá para nível FALSE e Busy ainda esteja em nível TRUE, a requisição é cancelada. |
|
NOTA! Value é um array de tamanho igual a NumberOfData. É 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

Exemplo em Ladder

O exemplo acima requisita leitura de um número de dados binários descrito por DATA_COUNT, posicionados em INIT - 1 no servidor Modbus TCP de endereço SERVER:PORT através da função Read Discrete Input. 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 BOOL; MBTCP_READBINARY_INST_0 : FB_MBTCP_ReadBinary; END_VAR
MBTCP_READBINARY_INST_0.Execute := DI1; MBTCP_READBINARY_INST_0( ServerAddress:=SERVER, ServerPort:=PORT, UnitID:=UNITID, Function:=2, InitialDataAddress:=INIT, NumberOfData:=DATA_COUNT, Timeout:=100, Offset:=1, Value=>VALUE); DO1 := MBTCP_READBINARY_INST_0.Done;
|
|---|