Sei sulla pagina 1di 73

http://www.modbus.

org

ESPECIFICAÇÃO DO PROTOCOLO DE APLICAÇÃO MODBUS V1.1b3

CONTEÚDO
1. Introdução ................................................ .............................................................2
1.1 Escopo deste documento ....................................................................................2
2 Abreviações ................................................ ...........................................................2
3 Contexto ................................................ ................................................................3
4 Descrição geral ............................................... .......................................................3
4.1 Descrição do protocolo ........................................................................................3
4.2 Codificação de Dados ................................................................................. ........5
4.3 Modelo de dados MODBUS .................................................................................6
4.4 Modelo de endereçamento MODBUS ................................................................. 7
4.5. Definir transação MODBUS............................................ .................................... 8
5 Categorias de códigos de função......................... ................................................ 10
5.1 Definição do Código da Função Pública............................. ............................... 11
6 Descrições dos códigos de função .............................................. .........................11
6.1 01 (0x01). Ler Bobinas (Coils) ........................................................................... 11
6.2 02 (0x02). Ler entradas discretas................................... ................................... 12
6.3 03 (0x03). Ler Registrador de retenção (Holding Register) ............................... 15
6.4 04 (0x04). Ler registros de entrada................................ ................................... 16
6.5 05 (0x05). Escrita de saídas discretas (Coil) ..................................................... 17
6.6 06 (0x06) Escrita de Registrador simples ...................... ................................... 19
6.7 07 (0x07) Status da exceção de leitura (somente linha serial) .......................... 20
6.8 08 (0x08) Diagnóstico (somente linha serial) .......................... ......................... 21
6.8.1 Códigos de sub função suportados pelos dispositivos de linha serial ............ 22
6.8.2 Exemplo e diagrama de estados ....................................... ............................ 24
6.9 11 (0x0B). Obter contador de eventos de comunicação (somente linha serial)..25
6.10 12 (0x0C). Obter log de eventos de comunicação (somente linha serial) ........26
6.11 15 (0x0F). Escreve várias bobinas .................................................................. 29
6.12 16 (0x10). Escrita de Múltiplos Registros......................................................... 30
6.13 17 (0x11). ID do servidor de relatório (somente linha serial) ........................... 31
6.14 20 (0x14). Ler registro de arquivo .................................................................... 32
6.15 21 (0x15). Gravar arquivo de registro .............................................................. 34
6.16 22 (0x16). Registro de Gravação de Máscara ................................................. 36
6.17 23 (0x17). Leitura / gravação de vários registros ............................................ 38
6.18 24 (0x18). Ler fila FIFO .................................................................................... 40
6.19 Transporte da interface encapsulada 43 (0x2B) .............................................. 41
6.20 43/13 (0x2B / 0x0D) CANopen Solicitação e resposta de referência geral
PDU...........................................................................................................................42
6.21 43/14 (0x2B / 0x0E). Ler identificação do dispositivo ...................................... 43
7 Respostas de exceção MODBUS ......................................................................... 47
Anexo A (Informativo): CÓDIGOS DE FUNÇÕES RESERVADAS MODBUS, SUBCODES E
TIPOS MEI................................................................................................................ 50
Anexo B (Informativo): COMANDO CANOPEN DE REFERÊNCIA GERAL............ 50
1. Introdução
1.1 Escopo deste documento
MODBUS é um protocolo de mensagens da camada de aplicação, posicionado no nível 7 do
modelo OSI, que fornece comunicação cliente / servidor entre dispositivos conectados em
diferentes tipos de barramentos ou redes.
Padrão serial de fato do setor desde 1979, o MODBUS continua permitindo a comunicação de
milhões de dispositivos de automação. Hoje, o suporte à estrutura simples e elegante do
MODBUS continua a crescer. A comunidade da Internet pode acessar o MODBUS em uma porta
reservada do sistema 502 na pilha TCP / IP.
MODBUS é um protocolo de solicitação / resposta e oferece serviços especificados por códigos
de função.
Os códigos de função MODBUS são elementos das PDUs de solicitação / resposta MODBUS. O
objetivo deste documento é descrever os códigos de função usados no âmbito das transações do
MODBUS.
O MODBUS é um protocolo de mensagens da camada de aplicação para comunicação cliente /
servidor entre dispositivos conectados em diferentes tipos de barramentos ou redes.
Atualmente, é implementado usando:
 TCP / IP sobre Ethernet. Consulte o Guia MODBUS Messaging Implementation Guide
V1.0a.
 Transmissão serial assíncrona em uma variedade de mídias (fio: EIA / TIA 232-E, EIA-422,
EIA / TIA-485-A; fibra, rádio, etc.)
 MODBUS PLUS, uma rede de passagem de tokens de alta velocidade.

References 1. RFC 791, Internet Protocol, Sep81 DARPA

2 Abreviações

ADU - Unidade de dados de aplicativos

HDLC - Controle de Link de Dados de Alto Nível


HMI - Interface Homem Máquina

IETF - Força-Tarefa de Engenharia da Internet

E/S - Entrada / Saída

IP - Protocolo de Internet

MAC - Controle de acesso à mídia

MB – Protocolo MODBUS

MBAP - Protocolo de Aplicação MODBUS

PDU - Unidade de dados do protocolo

PLC - Controlador lógico programável

TCP - Protocolo de controle de transmissão

3 Contexto

O protocolo MODBUS permite uma comunicação fácil em todos os tipos de arquiteturas de rede.

Todos os tipos de dispositivos (CLP, IHM, painel de controle, driver, controle de movimento,

dispositivo de E / S ...) podem usar o protocolo MODBUS para iniciar uma operação remota.
A mesma comunicação pode ser feita tanto na linha serial quanto nas redes Ethernet TCP / IP.

Os gateways permitem a comunicação entre vários tipos de barramentos ou rede usando o

protocolo MODBUS.

4 Descrição geral
4.1 Descrição do protocolo
O protocolo MODBUS define uma unidade de dados de protocolo simples (PDU) independente
das camadas de comunicação subjacentes. O mapeamento do protocolo MODBUS em
barramentos ou redes específicas pode introduzir alguns campos adicionais na unidade de dados
do aplicativo (ADU)

A unidade de dados do aplicativo MODBUS é construída pelo cliente que inicia uma transação

MODBUS.

A função indica ao servidor que tipo de ação executar. O protocolo de aplicação MODBUS

estabelece o formato de uma solicitação iniciada por um cliente.

O campo do código de função de uma unidade de dados MODBUS é codificado em um byte. Os

códigos válidos estão no intervalo de 1 a 255 decimal (o intervalo de 128 a 255 é reservado e

usado para respostas de exceção). Quando uma mensagem é enviada de um cliente para um

dispositivo servidor, o campo de código da função informa ao servidor que tipo de ação executar.

O código da função "0" não é válido.

Os códigos de subfunção são adicionados a alguns códigos de função para definir várias ações.

O campo de dados das mensagens enviadas de um cliente para os dispositivos do servidor

contém informações adicionais que o servidor usa para executar a ação definida pelo código de

função. Isso pode incluir itens como endereços discretos e de registro, a quantidade de itens a

serem manipulados e a contagem de bytes de dados reais no campo.


O campo de dados pode ser inexistente (com tamanho zero) em certos tipos de solicitações;

nesse caso, o servidor não requer nenhuma informação adicional. Somente o código da função

especifica a ação.

Se nenhum erro ocorrer relacionado à função MODBUS solicitada em um MODBUS ADU

recebido corretamente, o campo de dados de uma resposta de um servidor para um cliente

conterá os dados solicitados. Se ocorrer um erro relacionado à função MODBUS solicitada, o

campo conterá um código de exceção que o aplicativo servidor pode usar para determinar a

próxima ação a ser executada.

Por exemplo, um cliente pode ler os estados ON / OFF de um grupo de saídas ou entradas

discretas ou pode ler / gravar o conteúdo de dados de um grupo de registradores.

Quando o servidor responde ao cliente, ele usa o campo de código de função para indicar uma

resposta normal (sem erros) ou que ocorreu algum tipo de erro (chamado resposta de exceção).

Para uma resposta normal, o servidor simplesmente faz eco à solicitação do código de função

original.
Nota: É desejável gerenciar um tempo limite para não esperar indefinidamente por uma resposta

que talvez nunca chegue.

O tamanho da PDU MODBUS é limitado pela restrição de tamanho herdada da primeira

implementação de rede MODBUS me linha serial (max. RS485 ADU = 256 bytes).

Portanto: PDU MODBUS para comunicação em linha serial = 256 - Endereço do servidor (1 byte)

- CRC (2 bytes) = 253 bytes.

Consequentemente: RS232 / RS485 ADU = 253 bytes + Endereço do servidor (1 byte) + CRC (2

bytes) = 256 bytes.

TCP MODBUS ADU = 253 bytes + MBAP (7 bytes) = 260 bytes.


O protocolo MODBUS define três PDUs.

Eles são:

 PDU de solicitação MODBUS, mb_req pdu

 PDU de resposta MODBUS, mb_rsp pdu

 PDU de resposta de exceção MODBUS, mb_excep_rsp pdu

O mb_req_pdu é definido como:

mb_req_pdu = {function_code, request_data}, Onde

function_code = [1 byte] código da função MODBUS,

request_data = [n bytes] Este campo depende do código da função e geralmente

contém informações como referências variáveis, contagens de variáveis, compensações

de dados, códigos de subfunção etc.

O mb_rsp_pdu é definido como:

mb_rsp_pdu = {function_code, response_data}, Onde

function_code = [1 byte] código da função MODBUS

response_data = [n bytes] Este campo depende do código de função e geralmente

contém informações como referências variáveis, contagens de variáveis, compensações de

dados, códigos de subfunção, etc.

O mb_excep_rsp_pdu é definido como:

  mb_excep_rsp_pdu = {exception-function_code, request_data}, Onde

exception-function_code = [1 byte] código da função MODBUS + 0x80

exception_code = [1 byte] Código de exceção MODBUS definido na tabela "Códigos

de exceção MODBUS" (consulte a seção 7).


4.2 Codificação de dados

 O MODBUS usa uma representação "big endian" para endereços e itens de dados. Isso

significa que quando uma quantidade numérica maior que um byte é transmitido, o byte mais

significativo é enviado primeiro. Então por exemplo:

Tamanho do Registro Valor

16 – bits 0x1234 o primeiro byte enviado é 0x12 e então 0x34

 Nota: Para mais detalhes, consulte [1].

4.3 Modelo de dados MODBUS

O MODBUS baseia seu modelo de dados em uma série de tabelas que possuem características

distintivas.

As quatro tabelas principais são:

As distinções entre entradas e saídas, e entre itens de dados endereçáveis por bits e

endereçáveis por palavras, não implicam em nenhum comportamento do aplicativo. É

perfeitamente aceitável e muito comum considerar as quatro tabelas como sobrepostas, se essa

for a interpretação mais natural na máquina de destino em questão.

Para cada uma das tabelas primárias, o protocolo permite a seleção individual de 65536 itens de

dados e as operações de leitura ou gravação desses itens são projetadas para abranger vários

itens de dados consecutivos até um limite de tamanho de dados que depende do código de

função da transação.

É óbvio que todos os dados manipulados via MODBUS (bits, registros) devem estar localizados

na memória do aplicativo do dispositivo. Mas o endereço físico na memória não deve ser

confundido com a referência de dados. O único requisito é vincular a referência de dados ao


endereço físico. Os números de referência lógicos MODBUS, usados nas funções MODBUS, são

índices inteiros não assinados, começando em zero.

 Exemplos de implementação do modelo MODBUS

Os exemplos abaixo mostram duas maneiras de organizar os dados no dispositivo. Existem

diferentes organizações possíveis, mas nem todas são descritas neste documento. Cada

dispositivo pode ter sua própria organização dos dados de acordo com sua aplicação

Exemplo 1: Dispositivo com 4 blocos separados

O exemplo abaixo mostra a organização dos dados em um dispositivo com entradas e saídas

digitais e analógicas. Cada bloco é separado porque os dados de diferentes blocos não têm

correlação. Cada bloco é, portanto, acessível com diferentes funções MODBUS.

Exemplo 2: Dispositivo com apenas 1 bloco

Neste exemplo, o dispositivo possui apenas 1 bloco de dados. Os mesmos dados podem ser

alcançados através de várias funções MODBUS, seja através de um acesso de 16 bits ou através

de um bit de acesso.
4.4 Modelo de endereçamento MODBUS

O protocolo de aplicação MODBUS define precisamente as regras de endereçamento da PDU.

Em uma PDU MODBUS, cada dado é endereçado de 0 a 65535.

Ele também define claramente um modelo de dados MODBUS composto por 4 blocos que

compreende vários elementos numerados de 1 a n.

No modelo de dados MODBUS, cada elemento dentro de um bloco de dados é numerado de 1 a

n.

Posteriormente, o modelo de dados MODBUS deve ser vinculado ao aplicativo do dispositivo

(objeto IEC-61131 ou outro modelo de aplicativo).

O pré-mapeamento entre o modelo de dados MODBUS e o aplicativo do dispositivo é totalmente

específico do dispositivo do fornecedor.


A figura anterior mostra que um dado MODBUS numerado X é endereçado no MODBUS PDU X-

1.
4.5. Definir transação MODBUS

O diagrama de estado a seguir descreve o processamento genérico de uma transação MODBUS

no lado do servidor.

Depois que a solicitação é processada por um servidor, é criada uma resposta MODBUS usando

a transação adequada do servidor MODBUS.

Dependendo do resultado do processamento, dois tipos de resposta são criados:

 Uma resposta MODBUS positiva:

 O código da função de resposta = o código da função de solicitação

Uma resposta de exceção MODBUS (consulte a seção 7):


 O objetivo é fornecer ao cliente informações relevantes sobre a erro detectado durante o

processamento;

 O código da função de exceção = o código da função de solicitação + 0x80;

 Um código de exceção é fornecido para indicar o motivo do erro.

5 Categorias de códigos de função

Existem três categorias de códigos de funções MODBUS. Eles são:

Códigos de Função Pública

 São códigos de função bem definidos,

 Garantido que é único,

 Validado pela comunidade MODBUS.org,

 Documentado publicamente

 Ter teste de conformidade disponível,

 Inclui códigos de função atribuídos públicos definidos, bem como códigos de função não

atribuídos, reservados para uso futuro.

Códigos de Função Definidos pelo Usuário

 Existem dois intervalos de códigos de função definidos pelo usuário, ou seja, 65 a 72 e de 100 a

110 decimal.

 O usuário pode selecionar e implementar um código de função que não é suportado pela

especificação.

 Não há garantia de que o uso do código de função selecionado seja exclusivo

 Se o usuário deseja reposicionar a funcionalidade como um código de função pública, ele deve

iniciar uma RFC para introduzir a mudança na categoria pública e ter um novo código de função

pública atribuído.

 A MODBUS Organization, Inc reserva-se expressamente o direito de desenvolver a RFC

proposta.
Códigos de Função Reservados

 Códigos de função atualmente usados por algumas empresas para produtos herdados e que

não estão disponíveis para uso público.

 Nota informativa: o leitor é solicitado, consulte o Anexo A (Informativo) MODBUS

CÓDIGOS DE FUNÇÃO RESERVADOS, SUBCÓDIOS E TIPOS DE MEI.


6 Descrições dos códigos de função

6.1 01 (0x01). Ler Bobinas (Read Coils)

Este código de função é usado para ler de 1 a 2000 status contíguo das bobinas em um

dispositivo remoto. A PDU de solicitação especifica o endereço inicial, ou seja, o endereço da

primeira bobina especificada e o número de bobinas. Na PDU, as bobinas são endereçadas a

partir de zero. Portanto, as bobinas numeradas de 1 a 16 são endereçadas como 0 a 15.

As bobinas na mensagem de resposta são compactadas como uma bobina por bit do campo de

dados. O status é indicado como 1 = ON e 0 = OFF. O LSB do primeiro byte de dados contém a

saída endereçada na consulta. As outras bobinas seguem em direção ao fim de ordem superior

deste byte e da ordem baixa para a ordem alta nos bytes subsequentes.

Se a quantidade de saída retornada não for um múltiplo de oito, os bits restantes no byte de

dados final serão preenchidos com zeros (na direção da extremidade superior do byte). O campo

Byte Count especifica a quantidade de bytes completos de dados.


* N = Quantidade de saídas / 8, se o restante for diferente de 0  N = N + 1

Aqui está um exemplo de uma solicitação para ler saídas discretas 20–38:

O status das saídas 27–20 é mostrado como o valor do byte CD hexadecimal ou binário 1100

1101. A saída 27 é o MSB desse byte e a saída 20 é o LSB.

Por convenção, os bits dentro de um byte são mostrados com o MSB à esquerda e o LSB à

direita.

Assim, as saídas no primeiro byte são '27 a 20', da esquerda para a direita. O próximo byte tem

saídas '35 a 28', da esquerda para a direita. Como os bits são transmitidos em série, eles fluem

de LSB para MSB: 20. . . 27, 28. . . 35 e assim por diante.

No último byte de dados, o status das saídas 38-36 é mostrado como o valor do byte 05 hex ou

binário 0000 0101. A saída 38 está na posição de sexto bit da esquerda e a saída 36 é o LSB

desse byte. Os cinco bits restantes de ordem superior são preenchidos com zero.

Nota: Os cinco bits restantes (na extremidade superior da ordem) são preenchidos com zero.
6.2 02 (0x02). Ler entradas discretas

Este código de função é usado para ler de 1 a 2000 status contíguo de entradas discretas em um

dispositivo remoto.

A PDU de solicitação especifica o endereço inicial, ou seja, o endereço da primeira entrada

especificada e o número de entradas. Na PDU, as entradas discretas são endereçadas a partir de

zero. Portanto, as entradas discretas numeradas de 1 a 16 são endereçadas como 0 a 15.

As entradas discretas na mensagem de resposta são compactadas como uma entrada por bit do

campo de dados.
O status é indicado como 1 = ON; 0 = DESLIGADO. O LSB do primeiro byte de dados contém a

entrada endereçada na consulta. As outras entradas seguem no final da ordem superior deste

byte e da ordem baixa para a ordem alta nos bytes subsequentes.

Se a quantidade de entrada retornada não for um múltiplo de oito, os bits restantes no byte final

de dados serão preenchidos com zeros (na direção da extremidade superior do byte). O campo

Byte Count especifica a quantidade de bytes completos de dados.

* N = Quantidade de entradas / 8 se o restante for diferente de 0  N = N + 1

Aqui está um exemplo de uma solicitação para ler entradas discretas 197 - 218:

O status das entradas discretas 204–197 é mostrado como o valor do byte AC hex, ou o binário

1010 1100. A entrada 204 é o MSB desse byte e a entrada 197 é o LSB.

O status das entradas discretas 218–213 é mostrado como o valor do byte 35 hex ou como

binário 0011 0101.

A entrada 218 está na terceira posição de bit da esquerda e a entrada 213 é o LSB.

 Nota: Os dois bits restantes (na extremidade superior da ordem) são preenchidos com zero.
6.3 03 (0x03) Leitura de Registros de retenção (Read Holding Registers)

Esse código de função é usado para ler o conteúdo de um bloco contíguo de registros de

retenção em um dispositivo remoto. A PDU de solicitação especifica o endereço de registro inicial

e o número de registros. No PDU, os registros são endereçados a partir de zero. Portanto, os

registros numerados de 1 a 16 são endereçados como 0 a 15. Os dados do registro na

mensagem de resposta são compactados como dois bytes por registro, com o conteúdo binário

justificado dentro de cada byte. Para cada registro, o primeiro byte contém os bits de ordem

superior e o segundo os bits de ordem inferior.


* N = Quantidade de Registros

Aqui está um exemplo de uma solicitação para ler os registros 108 - 110:

O conteúdo do registro 108 é mostrado como os valores de dois bytes de 02 2B hex ou 555

decimal.

O conteúdo dos registros 109–110 é 00 00 e 00 64 hex, ou 0 e 100 decimal, respectivamente.


6.4 04 (0x04) Ler registros de entrada

Este código de função é usado para ler de 1 a 125 registros de entrada contíguos em um

dispositivo remoto.

A PDU de solicitação especifica o endereço de registro inicial e o número de registros. No PDU,

os registros são endereçados a partir de zero. Portanto, os registros de entrada numerados de 1


a 16 são endereçados como 0 a 15.

Os dados do registro na mensagem de resposta são compactados como dois bytes por registro,

com o conteúdo binário justificado dentro de cada byte. Para cada registro, o primeiro byte

contém os bits de ordem superior e o segundo os bits de ordem inferior.


* N = Quantidade de registros de entrada

Aqui está um exemplo de uma solicitação para ler o registro de entrada 9:

O conteúdo do registro de entrada 9 é mostrado como os valores de dois bytes de 00 0A

hexadecimal ou 10 decimal.
6.5 05 (0x05) Escrita de bobina Simples (Write Single Coil)

Este código de função é usado para gravar uma única saída em ON ou OFF em um dispositivo

remoto.
O estado ON / OFF solicitado é especificado por uma constante no campo de dados da

solicitação. Um valor de FF 00 hex solicita que a saída esteja LIGADA. Um valor de 00 00 solicita

que esteja desativado. Todos os outros valores são ilegais e não afetarão a saída.

A PDU de solicitação especifica o endereço da bobina a ser forçada. As bobinas são

endereçadas a partir de zero. Portanto, a bobina numerada 1 é endereçada como 0. O estado ON

/ OFF solicitado é especificado por uma constante no campo Valor da bobina. Um valor de

0XFF00 solicita que a bobina esteja LIGADA.

Um valor de 0X0000 solicita que a bobina seja desligada. Todos os outros valores são ilegais e

não afetarão a bobina.

A resposta normal é um eco da solicitação, retornada após a gravação do estado da bobina.

Aqui está um exemplo de uma solicitação para gravar a Bobina 173 ON:
6.6 06 (0x06) Escrita em Registro Simples (Write Single Register)

Este código de função é usado para gravar um único registro de espera em um dispositivo

remoto.

A PDU de solicitação especifica o endereço do registro a ser gravado. Os registros são

endereçados a partir de zero. Portanto, o registro numerado 1 é endereçado como 0.

A resposta normal é um eco da solicitação, retornada após a gravação do conteúdo do registro.


Aqui está um exemplo de uma solicitação para gravar o registro 2 a 00 03 hex:
6.7 07 (0x07) Status da exceção de leitura (somente linha serial)

Esse código de função é usado para ler o conteúdo de oito saídas de status de exceção em um

dispositivo remoto.

A função fornece um método simples para acessar essas informações, porque as referências de

Saída de exceção são conhecidas (nenhuma referência de saída é necessária na função).

A resposta normal contém o status das oito saídas de status de exceção. As saídas são

compactadas em um byte de dados, com um bit por saída. O status da referência de saída mais

baixa está contido no bit menos significativo do byte.


O conteúdo das oito saídas de status de exceção é específico do dispositivo.

Aqui está um exemplo de uma solicitação para ler o status da exceção:

Neste exemplo, os dados de saída são 6D hex (0110 1101 binário). Da esquerda para a direita,

as saídas são: DESLIGADO - LIGADO - DESLIGADO - LIGADO - LIGADO - DESLIGADO -

LIGADO. O status é mostrado da mais alta para a mais baixa saída endereçada.
6.8 08 (0x08). Diagnósticos (apenas linha serial)

O código de função MODBUS 08 fornece uma série de testes para verificar o sistema de

comunicação entre um dispositivo cliente e um servidor ou para verificar várias condições de erro

interno em um servidor.

A função usa um campo de código de subfunção de dois bytes na consulta para definir o tipo de

teste a ser executado. O servidor faz eco do código de função e do código de subfunção em uma

resposta normal. Alguns dos diagnósticos fazem com que os dados sejam retornados do

dispositivo remoto no campo de dados de uma resposta normal. Em geral, a emissão de uma
função de diagnóstico para um dispositivo remoto não afeta a execução do programa do usuário

no dispositivo remoto. A lógica do usuário, como discreta e registradora, não é acessada pelo

diagnóstico. Certas funções podem, opcionalmente, redefinir os contadores de erros no

dispositivo remoto.

Um dispositivo de servidor, no entanto, pode ser forçado a entrar no "Modo Apenas Ouvir", no

qual ele monitora as mensagens no sistema de comunicações, mas não responde a elas. Isso

pode afetar o resultado do seu aplicativo, se depender de mais trocas de dados com o dispositivo

remoto. Geralmente, o modo é forçado a remover um dispositivo remoto com defeito do sistema

de comunicação.

As seguintes funções de diagnóstico são dedicadas aos dispositivos de linha serial.

A resposta normal à solicitação Return Query Data é fazer o loopback dos mesmos dados. O

código de função e os códigos de subfunção também são ecoados.

6.8.1 Códigos de subfunção suportados pelos dispositivos de linha serial

Aqui está a lista de códigos de subfunção suportados pelos dispositivos de linha serial. Cada

código de subfunção é listado com um exemplo do conteúdo do campo de dados que se aplicaria

a esse diagnóstico.
00. Retornar dados da consulta

Os dados transmitidos no campo de dados da solicitação devem ser retornados (em loop) na

resposta. A mensagem de resposta inteira deve ser idêntica à solicitação.

01. Reiniciar a opção de comunicação

A porta de linha serial do dispositivo remoto deve ser inicializada e reiniciada, e todos os seus

contadores de eventos de comunicação são limpos. Se a porta estiver no modo Listen Only,

nenhuma resposta será retornada. Esta função é a única que retira a porta do Lis Only Mode. Se

a porta não estiver atualmente no modo Listen Only, uma resposta normal será retornada. Isso

ocorre antes da reinicialização ser executada.

Quando o dispositivo remoto recebe a solicitação, ele tenta reiniciar e executa seus testes de

confiança de inicialização.

A conclusão bem-sucedida dos testes colocará a porta online.


Um conteúdo do campo de dados de solicitação de hexadecimal FF 00 faz com que o log de

eventos de comunicações da porta seja limpo também. O conteúdo de 00 00 deixa o log como

era antes da reinicialização.

02 Registro de diagnóstico de retorno

O conteúdo do registro de diagnóstico de 16 bits do dispositivo remoto é retornado na resposta.

03. Alterar delimitador de entrada ASCII

O caractere 'CHAR' passado no campo de dados da solicitação se torna o final do delimitador de

mensagens para futuras mensagens (substituindo o caractere LF padrão). Esta função é útil nos

casos em que um avanço de linha não é necessário no final das mensagens ASCII.

04. Forçar modo somente escuta

Força o dispositivo remoto endereçado ao seu modo somente escuta para comunicações

MODBUS. Isso o isola dos outros dispositivos da rede, permitindo que eles continuem se

comunicando sem interrupção do dispositivo remoto endereçado. Nenhuma resposta é retornada.

Quando o dispositivo remoto entra no modo Listen Only, todos os controles de comunicação

ativos são desativados. O cronômetro do watchdog Ready pode expirar, bloqueando os controles.

Enquanto o dispositivo estiver neste modo, todas as mensagens MODBUS endereçadas a ele ou

transmitidas serão monitoradas, mas nenhuma ação será tomada e nenhuma resposta será

enviada. A única função que será processada após a entrada do modo será a função reiniciar

opção de comunicação (código de função 8, subfunção 1).


10 (0A Hex). Limpar contadores e registro de diagnóstico

O objetivo é limpar todos os contadores e o registro de diagnóstico. Contadores também são

limpos após a inicialização.

11 (0B Hex) Contagem de mensagens do barramento de retorno

O campo de dados de resposta retorna à quantidade de mensagens que o dispositivo remoto

detectou no sistema de comunicações desde sua última reinicialização, operação de limpeza de

contadores ou inicialização.

12 (0C Hex) Contagem de erros de comunicação do barramento de retorno O campo de dados de

resposta retorna à quantidade de erros de CRC encontrados pelo dispositivo remoto desde sua

última reinicialização, operação de limpeza de contadores ou inicialização.

13 (0D Hex) Contagem de erros de exceção de barramento de retorno

O campo de dados de resposta retorna à quantidade de respostas de exceção MODBUS

retornadas pelo dispositivo remoto desde seu último reinício, operação de limpeza de contadores

ou inicialização.

As respostas de exceção são descritas e listadas na seção 7.

14 (0E Hex) Contagem de Mensagens do Servidor de Retorno


O campo de dados de resposta retorna à quantidade de mensagens endereçadas ao dispositivo

remoto, ou transmissão, que o dispositivo remoto processou desde sua última reinicialização,

operação de limpeza de contadores ou inicialização.

15 (0F Hex) Servidor de Retorno sem Contagem de Resposta

O campo de dados de resposta retorna à quantidade de mensagens endereçadas ao dispositivo

remoto para o qual ele não retornou resposta (nem uma resposta normal nem uma resposta de

exceção), desde a última reinicialização, operação de limpeza de contadores ou inicialização.

16 (10 hex) Contagem de NAK do servidor de retorno

O campo de dados de resposta retorna à quantidade de mensagens endereçadas ao dispositivo

remoto para o qual ele retornou uma resposta de exceção de NAK (Negative Acknowledge),

desde a última reinicialização, operação de limpeza de contadores ou inicialização. As respostas

de exceção são descritas e listadas na seção 7.

17 (11 Hex) Contagem de ocupados no Servidor de Retorno

O campo de dados de resposta retorna à quantidade de mensagens endereçadas ao dispositivo

remoto para o qual ele retornou uma resposta de exceção de Dispositivo do servidor ocupado,

desde a última reinicialização, operação de limpeza de contadores ou inicialização.

18 (12 Hex) Contagem de saturação de caracteres de barramento de retorno

O campo de dados da resposta retorna à quantidade de mensagens endereçadas ao dispositivo

remoto que ele não conseguiu lidar devido a uma condição de saturação de caractere, desde seu
último reinício, limpe os contadores operação ou energização. Uma saturação de caracteres é

causada por caracteres de dados que chegam à porta mais rápido do que eles podem ser

armazenados ou pela perda de um caractere devido a um mau funcionamento do hardware.

20 (14 hex). Limpar contador e sinalização de saturação

Limpa o contador de erros de saturação e redefine o sinalizador de erro.

6.8.2 Exemplo e diagrama de estados

Aqui está um exemplo de uma solicitação ao dispositivo remoto para retornar dados da consulta.

Isso usa um código de subfunção zero (00 00 hex no campo de dois bytes). Os dados a serem

retornados são enviados no campo de dados de dois bytes (A5 37 hex).

Os campos de dados nas respostas a outros tipos de consultas podem conter contagens de erros

ou outros dados solicitados pelo código da sub-função.


6.9 11 (0x0B). Obter contador de eventos de comunicação (apenas linha serial)

Este código de função é usado para obter uma palavra de status e uma contagem de eventos no

contador de eventos de comunicação do dispositivo remoto.

Ao buscar a contagem atual antes e depois de uma série de mensagens, um cliente pode

determinar se as mensagens foram tratadas normalmente pelo dispositivo remoto.


O contador de eventos do dispositivo é incrementado uma vez para cada conclusão bem-

sucedida da mensagem. Não é incrementado para respostas de exceção, comandos de pesquisa

ou comandos de busca de contador de eventos.

O contador de eventos pode ser redefinido por meio da função Diagnóstico (código 08), com uma

subfunção da opção reiniciar comunicações (código 00 01) ou limpar contadores e registro de

diagnóstico (código 00 0A).

A resposta normal contém uma palavra de status de dois bytes e uma contagem de eventos de

dois bytes. A palavra de status será toda (FF FF hex) se um comando de programa emitido

anteriormente ainda estiver sendo processado pelo dispositivo remoto (existe uma condição de

ocupado). Caso contrário, a palavra status será todos os zeros.

Aqui está um exemplo de uma solicitação para obter o contador de eventos de comunicação no

dispositivo remoto:

Neste exemplo, a palavra status é FF FF hex, indicando que uma função do programa ainda está

em andamento no dispositivo remoto. A contagem de eventos mostra que 264 (01 08 hex)

eventos foram contados pelo dispositivo.


6.10 12 (0x0C). Obter log de eventos de comunicação (somente linha serial)

Esse código de função é usado para obter uma palavra de status, contagem de eventos,

contagem de mensagens e um campo de bytes de eventos do dispositivo remoto. A palavra de

status e a contagem de eventos são idênticas às retornadas pela função obter contador de

eventos de comunicações (11, 0B hex). O contador de mensagens contém a quantidade de

mensagens processadas pelo dispositivo remoto desde sua última reinicialização, operação de

limpeza de contadores ou inicialização. Essa contagem é idêntica à retornada pela função

Diagnóstico (código 08), subfunção Contagem de mensagens do barramento de retorno (código

11, 0B hex). O campo bytes de evento contém 0 64 bytes, com cada byte correspondente ao
status de uma operação de envio ou recebimento de MODBUS para o dispositivo remoto. O

dispositivo remoto insere os eventos no campo em ordem cronológica. O byte 0 é o evento mais

recente. Cada novo byte libera o byte mais antigo do campo.

A resposta normal contém um campo de palavra de status de dois bytes, um campo de contagem

de eventos de dois bytes, um campo de contagem de mensagens de dois bytes e um campo

contendo de 0 a 64 bytes de eventos. Um campo de contagem de bytes define o comprimento

total dos dados nesses quatro campos.

* N = Quantidade de eventos + 3 x 2 bytes, (duração do status, contagem de eventos e contagem

de mensagens)

Aqui está um exemplo de uma solicitação para obter o log de eventos de comunicações no

dispositivo remoto:

Neste exemplo, a palavra status é 00 00 hex, indicando que o dispositivo remoto não está

processando uma função de programa. A contagem de eventos mostra que 264 (01 08 hex)
eventos foram contados pelo dispositivo remoto. A contagem de mensagens mostra que 289 (01

21 hex) mensagens foram processadas.

O evento de comunicação mais recente é mostrado no evento 0 byte. Seu conteúdo (20

hexadecimal) mostra que o dispositivo remoto entrou mais recentemente no modo somente

escuta.

O evento anterior é mostrado no evento 1 byte. Seu conteúdo (00 hex) mostra que o dispositivo

remoto recebeu uma reinicialização das comunicações.

O layout dos bytes de eventos da resposta é descrito abaixo.

O que os bytes de evento contêm

Um byte de evento retornado pela função Obter Log de Eventos de Comunicação pode ser

qualquer um dos quatro tipos. O tipo é definido pelo bit 7 (o bit de alta ordem) em cada byte. Pode

ser definido ainda mais pelo bit 6. Isso é explicado abaixo.

 Evento de recebimento do dispositivo remoto MODBUS

O dispositivo remoto armazena esse tipo de byte de evento quando uma mensagem de consulta

é recebida. Ele é armazenado antes do dispositivo remoto processar a mensagem. Este evento é

definido pelo bit 7 definido para a lógica '1'. Os outros bits serão configurados para uma lógica '1'

se a condição correspondente for VERDADEIRA. O layout do bit é:

 Evento de envio do dispositivo remoto MODBUS

O dispositivo remoto armazena esse tipo de byte de evento quando termina o processamento de

uma mensagem de solicitação. Ele é armazenado se o dispositivo remoto retornar uma resposta
normal ou de exceção ou nenhuma resposta. Este evento é definido pelo bit 7 definido como

lógico '0', com o bit 6 definido como '1'. Os outros bits serão configurados para uma lógica '1' se a

condição correspondente for VERDADEIRA. O layout do bit é:

 Dispositivo remoto entrou no modo Somente escuta O dispositivo remoto armazena esse tipo de

byte de evento quando entra no modo Listen Only. O evento é definido por um conteúdo de 04

hex.

 Reinício da comunicação iniciada no dispositivo remoto

O dispositivo remoto armazena esse tipo de byte de evento quando sua porta de comunicação é

reiniciada. O dispositivo remoto pode ser reiniciado pela função Diagnóstico (código 08), com a

subfunção reiniciar opção de comunicação (código 00 01). Essa função também coloca o

dispositivo remoto no modo "Continuar com erro" ou "Parar com erro". Se o dispositivo remoto for

colocado no modo "Continuar com erro", o byte de evento será adicionado ao log de eventos

existente. Se o dispositivo remoto for colocado no modo "Parar com erro", o byte será adicionado

ao log e o restante do log será limpo em zeros. O evento é definido por um conteúdo zero.
6.11 15 (0x0F) Escreve várias bobinas (Write Multiple Coils)

Este código de função é usado para forçar cada bobina em uma sequência de bobinas a LIGAR

ou DESLIGAR em um dispositivo remoto. A PDU de solicitação especifica as referências da

bobina a serem forçadas. As bobinas são endereçadas a partir de zero. Portanto bobina

numerado 1 é endereçado como 0. Os estados ON / OFF solicitados são especificados pelo

conteúdo do campo de dados da solicitação. Um '1' lógico em uma posição de bit do campo

solicita que a saída correspondente esteja LIGADA. Um '0' lógico solicita que esteja desativado. A

resposta normal retorna o código de função, endereço inicial e quantidade de bobinas forçadas.
* N = Quantidade de saídas / 8, se o restante for diferente de 0  N = N + 1

Aqui está um exemplo de uma solicitação para gravar uma série de 10 bobinas começando na

bobina 20: O conteúdo dos dados da solicitação é de dois bytes: CD 01 hex (1100 1101 0000

0001 binário). Os bits binários correspondem às saídas da seguinte maneira:

O primeiro byte transmitido (CD hex) endereça as saídas 27-20, com o bit menos significativo

endereçando a saída mais baixa (20) neste conjunto. O próximo byte transmitido (01 hex)

endereça as saídas 29-28, com o bit menos significativo endereçando a saída mais baixa (28)

neste conjunto. Os bits não utilizados no último byte de dados devem ser preenchidos com zero.
6,12 16 (0x10). Escrever vários registros

Este código de função é usado para escrever um bloco de registros contíguos (1 a 123 registros)

em um dispositivo remoto. Os valores escritos solicitados são especificados no campo de dados

da solicitação. Os dados são compactados como dois bytes por registro. A resposta normal

retorna o código da função, o endereço inicial e a quantidade de registros gravados.

* N = Quantidade de Registros
Aqui está um exemplo de uma solicitação para escrever dois registradores começando de 2 a 00

0A e 01 02 hex:
6.13 17 (0x11) ID do servidor de relatório (somente linha serial)

Este código de função é usado para ler a descrição do tipo, o status atual e outras informações

específicas de um dispositivo remoto. O formato de uma resposta normal é mostrado no exemplo

a seguir. O conteúdo dos dados é específico para cada tipo de dispositivo.


Aqui está um exemplo de uma solicitação para relatar o ID e o status:
6.14 20 (0x14) Registro de arquivo de leitura

Este código de função é usado para executar uma leitura de registro de arquivo. Todos os

comprimentos de dados de solicitação são fornecidos em termos de número de bytes e todos os

comprimentos de registro são fornecidos em termos de registros. Um arquivo é uma organização

de registros. Cada arquivo contém 10000 registros, endereçados 0000 a 9999 decimais ou

0X0000 a 0X270F. Por exemplo, o registro 12 é endereçado como 12. A função pode ler vários

grupos de referências. Os grupos podem ser separados (não contíguos), mas as referências em
cada grupo devem ser seqüenciais. Cada grupo é definido em um campo separado de 'sub-

solicitação' que contém 7 bytes:

O tipo de referência: 1 byte (deve ser especificado como 6)

O número do arquivo: 2 bytes

O número do registro inicial no arquivo: 2 bytes

O comprimento do registro a ser lido: 2 bytes.

A quantidade de registros a serem lidos, combinada com todos os outros campos na resposta

esperada, não deve exceder o comprimento permitido da PDU MODBUS: 253 bytes. A resposta

normal é uma série de 'sub-respostas', uma para cada 'sub-solicitação'. O campo de contagem de

bytes é a contagem total combinada de bytes em todas as "sub-respostas". Além disso, cada

"sub-resposta" contém um campo que mostra sua própria contagem de bytes.

Embora seja permitido que o número do arquivo esteja no intervalo de 1 a 0xFFFF, deve-se

observar que a interoperabilidade com o equipamento herdado pode ser comprometida se o

número do arquivo for maior que 10 (0x0A). Aqui está um exemplo de uma solicitação para ler

dois grupos de referências do dispositivo remoto:

 O grupo 1 consiste em dois registros do arquivo 4, iniciando no registro 1 (endereço 0001).

 O grupo 2 consiste em dois registros do arquivo 3, iniciando no registro 9 (endereço 0009).


6.15 21 (0x15). Gravar registro de arquivo
Este código de função é usado para executar uma gravação de arquivo. Todos os comprimentos

de dados de solicitação são fornecidos em termos de número de bytes e todos os comprimentos

de registro são fornecidos em termos de número de palavras de 16 bits. Um arquivo é uma

organização de registros. Cada arquivo contém 10000 registros, endereçados 0000 a 9999

decimais ou 0X0000 a 0X270F. Por exemplo, o registro 12 é endereçado como 12. A função pode

escrever vários grupos de referências. Os grupos podem ser separados, ou seja, não contíguos,

mas as referências dentro de cada grupo devem ser seqüenciais. Cada grupo é definido em um

campo separado de "sub-solicitação" que contém 7 bytes mais os dados:

O tipo de referência: 1 byte (deve ser especificado como 6)

O número do arquivo: 2 bytes

O número do registro inicial no arquivo: 2 bytes

O comprimento do registro a ser gravado: 2 bytes

Os dados a serem gravados: 2 bytes por registro.

A quantidade de registros a serem gravados, combinada com todos os outros campos da

solicitação, não deve exceder o comprimento permitido da PDU MODBUS: 253 bytes. A resposta

normal é um eco da solicitação.


Embora seja permitido que o número do arquivo esteja no intervalo de 1 a 0xFFFF, deve-se

observar que a interoperabilidade com o equipamento herdado pode ser comprometida se o

número do arquivo for maior que 10 (0x0A). Aqui está um exemplo de uma solicitação para gravar

um grupo de referências no dispositivo remoto:

 O grupo consiste em três registros no arquivo 4, iniciando no registro 7 (endereço 0007).


6.16 22 (0x16) Registro de gravação de máscara

Esse código de função é usado para modificar o conteúdo de um registro de retenção

especificado usando uma combinação de uma máscara AND, uma máscara OR e o conteúdo

atual do registro. A função pode ser usada para definir ou apagar bits individuais no registro. A

solicitação especifica o registro de retenção a ser gravado, os dados a serem usados como a

máscara AND e os dados a serem usados como a máscara OR. Os registros são endereçados a

partir de zero. Portanto, os registros 1-16 são endereçados como 0 15. O algoritmo da função é:

Result = (Current Contents AND And_Mask) OR (Or_Mask AND (NOT And_Mask)). Por exemplo:
Nota:

 Se o valor Or_Mask for zero, o resultado será simplesmente o ANDing lógico do conteúdo

atual e And_Mask. Se o valor And_Mask for zero, o resultado será igual ao valor Or_Mask.

 O conteúdo do registro pode ser lido com a função Read Holding Registers (código de

função 03). Eles podem, no entanto, ser alterados posteriormente à medida que o

controlador varre seu programa de lógica do usuário.

A resposta normal é um eco da solicitação. A resposta é retornada após o registro ter sido

gravado.

Aqui está um exemplo de uma gravação de máscara para registrar 5 no dispositivo remoto,

usando os valores de máscara acima.


6.17 23 (0x17). Vários registros de leitura / escrita

Este código de função executa uma combinação de uma operação de leitura e uma operação de

escrita em uma única transação MODBUS. A operação de gravação é realizada antes da leitura.

Os registros de retenção são endereçados a partir de zero. Portanto, os registros de retenção 1-

16 são endereçados na PDU como 0-15. A solicitação especifica o endereço inicial e o número de

registros de retenção a serem lidos, bem como o endereço inicial, o número de registros de

retenção e os dados a serem gravados. A contagem de bytes especifica o número de bytes a

seguir no campo de gravação de dados. A resposta normal contém os dados do grupo de


registros que foram lidos. O campo de contagem de bytes especifica a quantidade de bytes a

seguir no campo de dados de leitura.

* N = Quantidade a Escrever

* N '= Quantidade a Ler

Aqui está um exemplo de uma solicitação para ler seis registros começando no registro 4 e

escrever três registros começando no registro 15:


6,18 24 (0x18) Fila FIFO de leitura

Esse código de função permite ler o conteúdo de uma fila de registro First-In-First Out (FIFO) em

um dispositivo remoto. A função retorna uma contagem dos registros na fila, seguidos pelos

dados na fila. É possível ler até 32 registros: a contagem, mais até 31 registros de dados na fila.

O registro de contagem de filas é retornado primeiro, seguido pelos registros de dados na fila. A

função lê o conteúdo da fila, mas não os limpa. Em uma resposta normal, a contagem de bytes
mostra a quantidade de bytes a seguir, incluindo os bytes da contagem da fila e os bytes do

registro de valor (mas não incluindo o campo de verificação de erro). A contagem da fila é a

quantidade de registros de dados na fila (não incluindo o registro de contagem). Se a contagem

da fila exceder 31, uma resposta de exceção será retornada com um código de erro 03 (Valor de

Dados Ilegais).

*N=

Contagem FIFO

Aqui está um exemplo de solicitação de leitura da fila FIFO para o dispositivo remoto. A

solicitação é ler a fila iniciando no registro de ponteiro 1246 (0x04DE):

Neste exemplo, o registro do ponteiro FIFO (1246 na solicitação) é retornado com uma contagem

de filas de 2. Os dois registradores de dados seguem a contagem de filas. São eles: 1247

(conteúdo 440 decimal - 0x01B8); e 1248 (conteúdo 4740-0x1284).


6.19 43 (0x2B) Transporte de interface encapsulada

Nota informativa: Solicita-se ao usuário que consulte o CÓDIGO DE FUNÇÕES RESERVADAS

MODBUS do Anexo A (informativo), SUBCODES E TIPOS DE MEI.

O Código de Função 43 e seu MEI Tipo 14 para Identificação de Dispositivo são um dos dois

Transportes de Interface Encapsulados atualmente disponíveis nesta Especificação. Os seguintes

códigos de função e tipos MEI não devem fazer parte desta especificação publicada e esses

códigos de função e tipos MEI são especificamente reservados: 43 / 0-12 e 43 / 15-255. O

transporte da interface encapsulada MODBUS (MEI) é um mecanismo para solicitações de


serviço de tunelamento e invocações de métodos, bem como seus retornos, dentro das PDUs

MODBUS. O principal recurso do Transporte MEI é o encapsulamento de chamadas de método

ou solicitações de serviço que fazem parte de uma interface definida, bem como retornos de

chamada de método ou respostas de serviço.

A interface de rede pode ser qualquer pilha de comunicação usada para enviar PDUs MODBUS,

como TCP / IP ou linha serial. Um tipo de MEI é um número atribuído MODBUS e, portanto, será

único, o valor entre 0 e 255 é reservado de acordo com o anexo A (informativo), exceto para os

tipos 13 e 14 do MEI. O tipo MEI é usado pelas implementações de transporte da MEI para

despachar uma invocação de método para a interface indicada. Como o serviço de transporte

MEI é independente da interface, qualquer comportamento ou política específica exigida pela

interface deve ser fornecida pela interface, por exemplo Processamento de transações MEI,

tratamento de erros de interface MEI, etc.

* MEI =

Interface Encapsulada MODBUS


Como exemplo, consulte Leia a solicitação de identificação do dispositivo.

6.20 43/13 (0x2B / 0x0D). CANopen Pedido de Referência Geral e Resposta PDU

O comando de referência geral CANopen é um encapsulamento dos serviços que serão usados

para acessar (ler ou gravar) as entradas de um dicionário de objetos de dispositivo aberto CAN,

além de controlar e monitorar o sistema e dispositivos CANopen.

O MEI tipo 13 (0x0D) é um número atribuído MODBUS licenciado pela CiA para a referência geral

do CANopen. O sistema deve funcionar dentro das limitações das redes MODBUS existentes.

Portanto, as informações necessárias para consultar ou modificar os dicionários de objetos no

sistema são mapeadas no formato de uma mensagem MODBUS. A PDU terá a limitação de 253

bytes na mensagem de solicitação e resposta.

Informativo: Consulte o Anexo B para obter uma referência a uma especificação que fornece

informações sobre o MEI Tipo 13.

6.21 43/14 (0x2B / 0x0E). Ler identificação do dispositivo

Este código de função permite ler apenas a identificação e informações adicionais relativas à

descrição física e funcional de um dispositivo remoto. A interface Read Device Identification é

modelada como um espaço de endereço composto por um conjunto de elementos de dados

endereçáveis. Os elementos de dados são chamados objetos e um ID do objeto os identifica.

A interface consiste em 3 categorias de objetos:

 Identificação básica do dispositivo. Todos os objetos desta categoria são obrigatórios:

Nome do fornecedor, Código do produto e número da revisão.


 Identificação regular do dispositivo. Além dos objetos de dados básicos, o dispositivo

fornece objetos de dados de identificação e descrição adicionais e opcionais. Todos os

objetos desta categoria são definidos no padrão, mas sua implementação é opcional.

 Identificação estendida do dispositivo. Além dos objetos de dados regulares, o dispositivo

fornece identificação e descrição adicionais e opcionais de dados privados sobre o próprio

dispositivo físico. Todos esses dados dependem do dispositivo.

* MEI = Interface Encapsulada MODBUS

Descrição dos parâmetros de solicitação:

Um número atribuído 14 da Interface Encapsulada MODBUS identifica a solicitação de

identificação de leitura.
O parâmetro "Ler código de identificação do dispositivo" permite definir quatro tipos de acesso:

01: solicitação para obter a identificação básica do dispositivo (acesso ao fluxo)

02: solicitação para obter a identificação regular do dispositivo (acesso ao fluxo)

03: solicitação para obter a identificação estendida do dispositivo (acesso ao fluxo)

04: solicitação para obter um objeto de identificação específico (acesso individual)

Um código de exceção 03 é enviado de volta na resposta se o código de leitura do código do

dispositivo for ilegal. No caso de uma resposta que não se encaixe em uma única resposta, vários

transações (solicitação / resposta) devem ser feitas. O byte de ID do objeto fornece a

identificação do primeiro objeto a ser obtido. Para a primeira transação, o cliente deve definir o ID

do objeto como 0 para obter o início dos dados de identificação do dispositivo. Para as transações

a seguir, o cliente deve definir o ID do objeto como o valor retornado pelo servidor em sua

resposta anterior. Observação: um objeto é indivisível; portanto, qualquer objeto deve ter um

tamanho consistente com o tamanho de

resposta de transação.

Se o ID do objeto não corresponder a nenhum objeto conhecido, o servidor responderá como se o

objeto 0 tivesse sido apontado (reinicie no início). No caso de um acesso individual: código

ReadDevId 04, o ID do Objeto na solicitação fornece a identificação do objeto a ser obtido e, se o

ID do Objeto não corresponder a nenhum objeto conhecido, o servidor retornará uma resposta de

exceção com o código de exceção = 02 (endereço de dados ilegal). Se for solicitado ao

dispositivo servidor um nível de descrição (código readDevice) maior que seu nível de

conformidade, ele deverá responder de acordo com seu nível de conformidade real.

Descrição do parâmetro de resposta:


Código da função: Código de função 43 (decimal) 0x2B (hex)

Tipo MEI 14 (0x0E) Número MEI do tipo atribuído à Interface de


identificação do dispositivo
Código ReadDevId: Igual ao código ReadDevId solicitado: 01, 02, 03 ou 04
Nível de conformidade de identificação do dispositivo e
Nível de conformidade tipo de acesso suportado
0x01: identificação básica (somente acesso ao fluxo)
0x02: identificação regular (somente acesso ao fluxo)
0x03: identificação estendida (somente acesso ao fluxo)
0x81: identificação básica (acesso ao fluxo e acesso
individual)
0x82: identificação regular (acesso ao fluxo e acesso
individual)
0x83: identificação estendida (acesso ao fluxo e acesso
individual)

No caso dos códigos ReadDevId 01, 02 ou 03 (acesso ao


Mais seguidores fluxo), se os dados de identificação não couberem em
uma única resposta, várias transações de solicitação /
resposta podem ser necessárias. 0x00: nenhum objeto
está disponível 0xFF: outro objeto de identificação está
disponível e são necessárias outras transações
MODBUS No caso do código ReadDevId 04 (acesso
individual), este campo deve ser definido como 00.
ID do próximo objeto Se "MoreFollows = FF", identificação do próximo objeto
a ser solicitado. Se "MoreFollows = 00", deve ser
definido como 00 (inútil)
Número de objetos Número de objetos de identificação retornados na
resposta (para um acesso individual, Número de
objetos = 1)

Object0.Id Identificação do primeiro Objeto retornado na PDU


(acesso ao fluxo) ou do Objeto solicitado (acesso
individual)
Object0.Length Comprimento do primeiro objeto em byte

Object0.Value Valor do primeiro Objeto (Object0.Length bytes)

ObjectN.Id Identificação do último objeto (dentro da resposta)

ObjectN.Length Comprimento do último objeto em byte

ObjectN.Value Valor do último Objeto (ObjectN.Length bytes)

Exemplo de uma solicitação de leitura de identificação de dispositivo para "Identificação básica de

dispositivo": neste exemplo, todas as informações são enviadas em uma PDU de resposta.
No caso de um dispositivo que exigiu várias transações para enviar a resposta, as seguintes

transações são iniciadas.

Primeira transação:

Segunda transação:
7 respostas de exceção MODBUS

Quando um dispositivo cliente envia uma solicitação para um dispositivo servidor, ele espera uma

resposta normal. Um dos quatro eventos possíveis pode ocorrer na consulta do cliente:

 Se o dispositivo do servidor receber a solicitação sem erro de comunicação e puder manipular a

consulta normalmente, ele retornará uma resposta normal.


 Se o servidor não receber a solicitação devido a um erro de comunicação, nenhuma resposta

será retornada. O programa cliente acabará processando uma condição de tempo limite para a

solicitação.

 Se o servidor receber a solicitação, mas detectar um erro de comunicação (paridade, LRC,

CRC, ...), nenhuma resposta será retornada. O programa cliente acabará processando uma

condição de tempo limite para a solicitação.

 Se o servidor receber a solicitação sem um erro de comunicação, mas não puder lidar com ela

(por exemplo, se a solicitação for ler uma saída ou registro inexistente), o servidor retornará uma

resposta de exceção informando o cliente sobre a natureza do erro.

A mensagem de resposta de exceção possui dois campos que a diferenciam de uma resposta

normal:

Campo do código de função: em uma resposta normal, o servidor faz eco do código de função da

solicitação original no campo de código de função da resposta. Todos os códigos de função têm

um bit mais significativo (MSB) de 0 (seus valores estão todos abaixo de 80 hexadecimais). Em

uma resposta de exceção, o servidor define o MSB do código de função como 1. Isso faz com

que o valor do código de função em uma resposta de exceção seja exatamente 80 hexadecimal

maior do que o valor seria para uma resposta normal. Com o conjunto MSB do código de função,

o programa de aplicativo do cliente pode reconhecer a resposta da exceção e examinar o campo

de dados para o código da exceção.

Campo de dados: em uma resposta normal, o servidor pode retornar dados ou estatísticas no

campo de dados (qualquer informação solicitada na solicitação). Em uma resposta de exceção, o

servidor retorna um código de exceção no campo de dados. Isso define a condição do servidor

que causou a exceção.


Exemplo de uma solicitação de cliente e resposta de exceção do servidor

Neste exemplo, o cliente endereça uma solicitação ao dispositivo do servidor. O código de função

(01) é para uma operação de Status de Saída de Leitura. Ele solicita o status da saída no

endereço 1185 (04A1 hex). Observe que apenas essa saída deve ser lida, conforme especificado

pelo campo número de saídas (0001). Se o endereço de saída não existir no dispositivo do

servidor, o servidor retornará a resposta da exceção com o código de exceção mostrado (02).

Isso especifica um endereço de dados ilegal para o servidor.

Uma lista de códigos de exceção começa na próxima página.

Códigos de exceção MODBUS


Código Nome Significado

01 FUNÇÃO ILEGAL O código de função recebido na consulta não é

uma ação permitida para o servidor. Isso pode

ocorrer porque o código de função é aplicável

apenas a dispositivos mais recentes e não foi

implementado na unidade selecionada. Também

pode indicar que o servidor está no estado errado

para processar uma solicitação desse tipo, por

exemplo, porque não está configurado e está

sendo solicitado a retornar valores de registro.

02 ENDEREÇO DE DADOS ILEGAIS O endereço de dados recebido na consulta não é


um endereço permitido para o servidor. Mais

especificamente, a combinação do número de

referência e do comprimento da transferência é

inválida. Para um controlador com 100 registros, a

PDU endereça o primeiro registro como 0 e o

último como 99. Se uma solicitação for enviada

com um endereço de registro inicial de 96 e uma

quantidade de registros de 4, essa solicitação

funcionará com êxito ( pelo menos no endereço)

nos registros 96, 97, 98, 99. Se uma solicitação

for enviada com um endereço de registro inicial de

96 e uma quantidade de registros de 5, essa

solicitação falhará com o Código de exceção 0x02

"Endereço de dados ilegais" pois ele tenta operar

nos registradores 96, 97, 98, 99 e 100 e não há

registrador com o endereço 100.

03 VALOR DE DADOS ILEGAIS Um valor contido no campo de dados da consulta

não é um valor permitido para o servidor. Isso

indica uma falha na estrutura do restante de uma

solicitação complexa, como se o comprimento

implícito estivesse incorreto. NÃO significa

especificamente que um item de dados enviado

para armazenamento em um registro tenha um

valor fora da expectativa do programa aplicativo,

uma vez que o protocolo MODBUS desconhece a

importância de qualquer valor específico de

qualquer registro específico.


04 FALHA NO DISPOSITIVO DO SER Ocorreu um erro irrecuperável enquanto o

VIDOR servidor estava tentando executar a ação

solicitada.

05 RECONHECER Uso especializado em conjunto com comandos de

programação. O servidor aceitou a solicitação e

está processando-a, mas será necessário um

longo período de tempo para fazer isso. Essa

resposta é retornada para impedir que um erro de

tempo limite ocorra no cliente. Em seguida, o

cliente pode emitir uma mensagem de programa

de pesquisa concluído para determinar se o

processamento foi concluído.

06 DISPOSITIVO DO SERVIDOR Uso especializado em conjunto com comandos de

OCUPADO programação. O servidor está envolvido no

processamento de um comando de programa de

longa duração. O cliente deve retransmitir a

mensagem posteriormente quando o servidor

estiver livre.

08 ERRO DE PARIDADE DE Uso especializado em conjunto com os códigos

MEMÓRIA de função 20 e 21 e o tipo de referência 6, para

indicar que a área de arquivo estendida não

passou na verificação de consistência. O servidor

tentou ler o arquivo de registro, mas detectou um

erro de paridade na memória. O cliente pode

tentar novamente a solicitação, mas o serviço

pode ser necessário no dispositivo do servidor.


0A CAMINHO DA PORTA NÃO O uso especializado em conjunto com os

DISPONÍVEL gateways indica que o gateway não pôde alocar

um caminho de comunicação interno da porta de

entrada para a porta de saída para processar a

solicitação. Geralmente significa que o gateway

está configurado incorretamente ou

sobrecarregado.

0B O DISPOSITIVO DE ALVO DO O uso especializado em conjunto com gateways

GATEWAY NÃO RESPONDEU indica que nenhuma resposta foi obtida do

dispositivo de destino. Geralmente significa que o

dispositivo não está presente na rede.

Anexo A (Informativo): CÓDIGOS DE FUNÇÃO RESERVADOS MODBUS, SUBCÓDIOS E

TIPOS DE MEI
Os seguintes códigos e subcódigos de função não devem fazer parte desta Especificação

publicada e esses códigos e subcódigos de função são especificamente reservados. O formato é

código / subcódigo da função ou apenas código da função em que todos os subcódigos (0-255)

são reservados: 8/19; 8/2165535, 9, 10, 13, 14, 41, 42, 90, 91, 125, 126 e 127.

O Código de Função 43 e seu MEI Tipo 14 para Identificação de Dispositivos e o MEI Tipo 13

para CANopen são solicitados por Referência Geral e PDU de Resposta. a interface encapsulada

disponível atualmente é transportada nesta especificação.

Os seguintes códigos de função e tipos MEI não devem fazer parte desta especificação publicada

e esses códigos de função e tipos MEI são especificamente reservados: 43 / 0-12 e 43 / 15-255.

Nesta especificação, não é suportado um código de função definida pelo usuário que tenha o

mesmo resultado ou o mesmo que o transporte de interface encapsulado.

MODBUS é uma marca registrada da Schneider Automation Inc.

Anexo B (informativo): COMANDO GERAL DE REFERÊNCIA CANOPEN

Consulte o site MODBUS ou o site CiA (CAN in Automation) para obter uma cópia e termos de

uso que cobrem o Código de Função 43 MEI Tipo 13.

Potrebbero piacerti anche