Modbus Client
O MHO Keeper pode ser configurado como um Modbus Client, que realiza requisições de leitura ou escrita para um ou mais dispositivos do tipo Modbus Server. Normalmente nesse modo o equipamento realiza requisições em equipamentos de campo (como medidores, drivers, controladores...).
1 - Quantidade de endereços
O endereçamento Modbus sofre modificações conforme o modelo de equipamento e quantidade de endereços solicitados, segue abaixo o tipo do equipamento a ser especificado:
Função | Qt. padrão | Qt. tipo 2 | Qt. tipo 3 | Qt. tipo 4 | Qt. tipo 5 |
---|---|---|---|---|---|
MBs (Discrete inputs e Coils) | 50 | 100 | 150 | 200 | 250 |
MIs (Input registers e Holding registers) | 20 | 40 | 60 | 80 | 100 |
As colunas Qt. padrão, tipo 2, tipo 3, tipo 4 e tipo 5 significam as quantidades de endereços disponíveis que podem ser utilizados na leitura/escrita Modbus conforme a versão da licença.
2 - Tipos de dados
Todos os dados escritos nas memórias do equipamento podem ser configurados para envio ao servidor utilizado (MHO Cloud ou servidor próprio). As memórias de características digitais são enviadas instantaneamente, as de características analógicas são enviadas de acordo com o intervalo de tempo configurado.
As seguintes funções estão disponíveis:
Código (DEC) | Função |
---|---|
02 | Read discrete Inputs |
01 | Read Coils |
05 | Write single coils |
15 | Write multiple Coils |
04 | Read input Register |
03 | Read hold Register |
06 | Write single Register |
16 | Write multiple Register |
Para os registradores de 16/32/64 bits a linha Keeper segue a padronização de memória Big-Endian. Uma word é definida como um registrador de 16 bits (2 bytes), uma double word é um registrador de 32 bits (4 bytes) (também entendido como 2 registradores de 16 bits) e uma long word é um registrador de 64 bits (8 bytes) (também entendido como 4 registradores de 16 bits)
Ao ativar o modo Swapwords o tipo de endereço vira Little-Endian. Caso o dado lido não esteja correto na leitura padrão tente primeiro com o modo Swapwords, depois com os outros modos.
Os registradores do tipo inteiro/float podem ter padrão de leitura da seguinte forma:
- swapbytes (disponível para os registradores de 16/32/64 bits);
- swapword (disponível para os registradores de 32/64 bits);
- swapdword (disponível para os registradores de 64 bits).
Exemplo 16 bits:
Um dado de 16 bits é transmitido da seguinte forma, onde cada letra representa um byte: A B
O padrão de leitura é "A B", porém se necessário pode-se aplicar as seguintes funções:
- swapbytes: "B A".
Exemplo 32 bits:
Um dado de 32 bits é transmitido da seguinte forma, onde cada letra representa um byte: A B C D
O padrão de leitura é "A B C D", porém se necessário pode-se aplicar as seguintes funções:
- swapbytes: "B A D C";
- swapwords: "C D A B";
- swapwords e swapbytes: "D C B A";
Exemplo 64 bits:
Um dado de 64 bits é transmitido da seguinte forma, onde cada letra representa um byte: A B C D E F G H
O padrão de leitura é "A B C D E F G H", porém se necessário pode-se aplicar as seguintes funções:
- swapbytes: "B A D C F E H G";
- swapwords: "C D A B G H E F";
- swapwords e swapbytes: "D C B A H G F E";
- swapdwords: "E F G H A B C D";
- swapdwords e swapbytes: "F E H G B A D C";
- swapdwords e swapwords: "G H E F C D A B";
- swapdwords, swapwords e swapbytes: "H G F E D C B A";
3 - Arquivo de requisições
As requisições são feitas com base nas configurações do arquivo de configurações mbclient.json
salvo no diretório /modbus
.
4 - Depurar
Número (Decimal e Hex) | Erro em Inglês | Erro em Português | Possível Causa do Problema |
---|---|---|---|
0 (0x00) | Ok | Ok | Operação concluída com sucesso, sem erros. |
1 (0x01) | Illegal function code | Código de função ilegal | O equipamento server não suporta a função solicitada pelo client. |
2 (0x02) | Illegal data address | Endereço de dado ilegal | O client está tentando ler ou escrever em um registrador ou bobina que não existe no server. |
3 (0x03) | Illegal data value | Valor de dado ilegal | O valor que o client está tentando escrever está fora da faixa permitida para o endereço especificado. |
4 (0x04) | Server device failure | Falha no dispositivo server | Ocorreu um erro interno e irrecuperável no equipamento server. Pode ser uma falha de hardware ou software. |
5 (0x05) | Acknowledge | Confirmação | O server aceitou a solicitação, mas precisa de muito tempo para processá-la. O client deve aguardar e perguntar novamente mais tarde. |
6 (0x06) | Server device busy | Dispositivo server ocupado | O server está ocupado processando um comando anterior e não pode atender a uma nova solicitação no momento. |
7 (0x07) | Negative acknowledge | Confirmação negativa | O server não pode executar a função de programação solicitada na consulta. |
8 (0x08) | Memory parity error | Erro de paridade de memória | O server detectou um erro de paridade em sua memória, indicando um possível problema de hardware. |
10 (0x0A) | Gateway path unavailable | Caminho do gateway indisponível | O gateway de comunicação não conseguiu encontrar um caminho para se conectar ao dispositivo final. |
11 (0x0B) | Gateway target not responding | Alvo do gateway não responde | O gateway consegue se conectar à rede do dispositivo final, mas o próprio dispositivo não está respondendo. |
224 (0xE0) | Timeout | Tempo esgotado | A resposta do dispositivo não chegou no tempo esperado. Pode ser um problema de rede, dispositivo offline ou configuração incorreta. |
225 (0xE1) | Invalid server | Server inválido | O ID do server na resposta não corresponde ao ID que foi solicitado. |
226 (0xE2) | CRC check error | Erro de verificação CRC | O pacote de dados foi corrompido durante a transmissão. Comum em comunicação serial (Modbus RTU). |
227 (0xE3) | Function code mismatch | Incompatibilidade de código de função | O código da função na resposta não corresponde ao código da função na solicitação. |
228 (0xE4) | Server ID mismatch | Incompatibilidade de ID do server | O ID do server na resposta não corresponde ao ID da solicitação. |
229 (0xE5) | Packet length error | Erro no comprimento do pacote | O pacote recebido tem um tamanho incorreto para a função solicitada. |
230 (0xE6) | Wrong # of parameters | Número incorreto de parâmetros | A quantidade de parâmetros na solicitação está errada. |
231 (0xE7) | Parameter out of bounds | Parâmetro fora dos limites | Um dos parâmetros da solicitação está fora de sua faixa válida. |
232 (0xE8) | Request queue full | Fila de solicitações cheia | O server está com a fila de processamento cheia e não pode aceitar novas solicitações. |
233 (0xE9) | Illegal IP or port | IP ou porta ilegal | O endereço IP ou a porta configurada para a conexão é inválida. |
234 (0xEA) | IP connection failed | Falha na conexão IP | A conexão TCP/IP não pôde ser estabelecida. Pode ser um firewall, problema de rede ou o server não está ativo. |
235 (0xEB) | TCP header mismatch | Incompatibilidade de cabeçalho TCP | O cabeçalho Modbus TCP da resposta não corresponde ao da solicitação. |
236 (0xEC) | Incomplete request | Solicitação incompleta | A mensagem recebida está incompleta ou vazia. |
237 (0xED) | Invalid ASCII frame | Quadro ASCII inválido | Erro na formatação do pacote de dados no modo Modbus ASCII (ex: falta de caracteres de início/fim). |
238 (0xEE) | Invalid ASCII CRC | CRC ASCII inválido | O LRC (verificação de redundância) do pacote Modbus ASCII está incorreto, indicando corrupção de dados. |
239 (0xEF) | Invalid ASCII character | Caractere ASCII inválido | Foi encontrado um caractere não permitido dentro de uma mensagem no modo Modbus ASCII. |
254 (0xFE) | Invalid config | Configuração inválida | Problema nas configurações de comunicação do client. |
255 (0xFF) | Unspecified error | Erro não especificado | Um erro de comunicação genérico que não se encaixa em nenhuma das outras categorias. |