Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
org
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.
2 Abreviações
IP - Protocolo de Internet
MB – Protocolo MODBUS
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.
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
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.
Os códigos de subfunção são adicionados a alguns códigos de função para definir várias ações.
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
nesse caso, o servidor não requer nenhuma informação adicional. Somente o código da função
especifica a ação.
campo conterá um código de exceção que o aplicativo servidor pode usar para determinar a
Por exemplo, um cliente pode ler os estados ON / OFF de um grupo de saídas ou entradas
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
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)
Consequentemente: RS232 / RS485 ADU = 253 bytes + Endereço do servidor (1 byte) + CRC (2
Eles são:
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
O MODBUS baseia seu modelo de dados em uma série de tabelas que possuem características
distintivas.
As distinções entre entradas e saídas, e entre itens de dados endereçáveis por bits e
perfeitamente aceitável e muito comum considerar as quatro tabelas como sobrepostas, se essa
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
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
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
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
Ele também define claramente um modelo de dados MODBUS composto por 4 blocos que
n.
1.
4.5. Definir transação MODBUS
no lado do servidor.
Depois que a solicitação é processada por um servidor, é criada uma resposta MODBUS usando
processamento;
Documentado publicamente
Inclui códigos de função atribuídos públicos definidos, bem como códigos de função não
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.
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.
proposta.
Códigos de Função Reservados
Códigos de função atualmente usados por algumas empresas para produtos herdados e que
Este código de função é usado para ler de 1 a 2000 status contíguo das bobinas em um
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
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
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
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.
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
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
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
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
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
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.
Este código de função é usado para ler de 1 a 125 registros de entrada contíguos em um
dispositivo remoto.
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
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.
/ OFF solicitado é especificado por uma constante no campo Valor da bobina. Um valor de
Um valor de 0X0000 solicita que a bobina seja desligada. Todos os outros valores são ilegais e
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.
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
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
Neste exemplo, os dados de saída são 6D hex (0110 1101 binário). Da esquerda para a direita,
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
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.
A resposta normal à solicitação Return Query Data é fazer o loopback dos mesmos dados. O
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
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
Quando o dispositivo remoto recebe a solicitação, ele tenta reiniciar e executa seus testes de
confiança de inicialização.
eventos de comunicações da porta seja limpo também. O conteúdo de 00 00 deixa o log como
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.
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
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
contadores ou inicialização.
resposta retorna à quantidade de erros de CRC encontrados pelo dispositivo remoto desde sua
retornadas pelo dispositivo remoto desde seu último reinício, operação de limpeza de contadores
ou inicialização.
remoto, ou transmissão, que o dispositivo remoto processou desde sua última reinicialização,
remoto para o qual ele não retornou resposta (nem uma resposta normal nem uma resposta de
remoto para o qual ele retornou uma resposta de exceção de NAK (Negative Acknowledge),
remoto para o qual ele retornou uma resposta de exceção de Dispositivo do servidor ocupado,
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
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
Os campos de dados nas respostas a outros tipos de consultas podem conter contagens de erros
Este código de função é usado para obter uma palavra de status e uma contagem de eventos no
Ao buscar a contagem atual antes e depois de uma série de mensagens, um cliente pode
O contador de eventos pode ser redefinido por meio da função Diagnóstico (código 08), com uma
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
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)
Esse código de função é usado para obter uma palavra de status, contagem de eventos,
status e a contagem de eventos são idênticas às retornadas pela função obter contador de
mensagens processadas pelo dispositivo remoto desde sua última reinicialização, operação de
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
A resposta normal contém um campo de palavra de status de dois bytes, um campo de 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
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
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
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'
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
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.
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
bobina a serem forçadas. As bobinas são endereçadas a partir de zero. Portanto bobina
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
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)
da solicitação. Os dados são compactados como dois bytes por registro. A resposta normal
* 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
Este código de função é usado para executar uma leitura de registro de arquivo. Todos os
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-
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
Embora seja permitido que o número do arquivo esteja no intervalo de 1 a 0xFFFF, deve-se
número do arquivo for maior que 10 (0x0A). Aqui está um exemplo de uma solicitação para ler
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
solicitação, não deve exceder o comprimento permitido da PDU MODBUS: 253 bytes. A resposta
número do arquivo for maior que 10 (0x0A). Aqui está um exemplo de uma solicitação para gravar
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
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,
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.
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
* N = Quantidade a Escrever
Aqui está um exemplo de uma solicitação para ler seis registros começando no registro 4 e
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
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
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
O Código de Função 43 e seu MEI Tipo 14 para Identificação de Dispositivo são um dos dois
códigos de função e tipos MEI não devem fazer parte desta especificação publicada e esses
ou solicitações de serviço que fazem parte de uma interface definida, bem como retornos de
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
interface deve ser fornecida pela interface, por exemplo Processamento de transações MEI,
* MEI =
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,
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.
sistema são mapeadas no formato de uma mensagem MODBUS. A PDU terá a limitação de 253
Informativo: Consulte o Anexo B para obter uma referência a uma especificação que fornece
Este código de função permite ler apenas a identificação e informações adicionais relativas à
objetos desta categoria são definidos no padrão, mas sua implementação é opcional.
identificação de leitura.
O parâmetro "Ler código de identificação do dispositivo" permite definir quatro tipos de acesso:
dispositivo for ilegal. No caso de uma resposta que não se encaixe em uma única resposta, vários
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
resposta de transação.
objeto 0 tivesse sido apontado (reinicie no início). No caso de um acesso individual: código
ID do Objeto não corresponder a nenhum objeto conhecido, o servidor retornará uma resposta de
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.
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
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:
será retornada. O programa cliente acabará processando uma condição de tempo limite para a
solicitação.
CRC, ...), nenhuma resposta será retornada. O programa cliente acabará processando uma
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
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,
Campo de dados: em uma resposta normal, o servidor pode retornar dados ou estatísticas no
servidor retorna um código de exceção no campo de dados. Isso define a condiçã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).
solicitada.
estiver livre.
sobrecarregado.
TIPOS DE MEI
Os seguintes códigos e subcódigos de função não devem fazer parte desta Especificação
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
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
Consulte o site MODBUS ou o site CiA (CAN in Automation) para obter uma cópia e termos de