PROTOCOLO DE COMUNICAÇÃO MODBUS
Modbus ou MODBUS é um protocolo de comunicação de dados cliente/servidor na camada de aplicação do modelo OSI. [1] Foi originalmente publicado pela Modicon (agora Schneider Electric ) em 1979 para uso com seus controladores lógicos programáveis (CLPs). [2] O Modbus tornou-se um protocolo de comunicação padrão de fato para comunicação entre dispositivos eletrônicos industriais em uma ampla variedade de barramentos e redes. [3] [1]
O Modbus é popular em ambientes industriais porque é publicado abertamente e isento de royalties . Ele foi desenvolvido para aplicações industriais, é relativamente fácil de implantar e manter em comparação com outros padrões e impõe poucas restrições ao formato dos dados a serem transmitidos.
O protocolo Modbus usa linhas de comunicação serial , Ethernet ou o conjunto de protocolos da Internet como camada de transporte. [1] O Modbus suporta comunicação de e para vários dispositivos conectados ao mesmo cabo ou rede Ethernet. Por exemplo, pode haver um dispositivo que mede temperatura e outro dispositivo para medir umidade conectados ao mesmo cabo, ambos comunicando as medições ao mesmo computador , via Modbus.
Modbus é frequentemente usado para conectar um computador de supervisão de planta/sistema com uma unidade terminal remota (RTU) em sistemas de controle de supervisão e aquisição de dados ( SCADA ). Muitos dos tipos de dados são nomeados a partir do controle industrial de dispositivos de fábrica, como a lógica ladder , devido ao seu uso no acionamento de relés: uma saída física de bit único é chamada de bobina , e uma entrada física de bit único é chamada de entrada discreta ou um contato .
O desenvolvimento e atualização dos protocolos Modbus são gerenciados pela Organização Modbus [4] desde abril de 2004, quando a Schneider Electric transferiu os direitos para aquela organização. [5] A Organização Modbus é uma associação de usuários e fornecedores de dispositivos compatíveis com Modbus que defende o uso contínuo da tecnologia. [6] Modbus Organization, Inc. é uma associação comercial para a promoção e desenvolvimento do protocolo Modbus. [4]
Descrição do protocolo
Os padrões de comunicação ou barramentos implantados para comunicação Modbus são: [1]
- TCP/IP sobre Ethernet
- Comunicação serial assíncrona em uma ampla gama de padrões, tecnologias: EIA/TIA-232-E, EIA-422, EIA/TIA-485-A, fibra, radiofrequência,...
- MODBUS PLUS, uma rede de passagem de tokens de alta velocidade.
Para suportar a comunicação Modbus em uma rede, muitos modems e gateways são projetados de forma proprietária (Referência à imagem: Arquitetura de uma rede para comunicação Modbus ). Diferentes implementações utilizam comunicação com ou sem fio, como na banda de rádio ISM , e até mesmo Serviço de Mensagens Curtas (SMS) ou Serviço Geral de Rádio de Pacotes (GPRS).
PDU e ADU
Modbus define cliente que é uma entidade que inicia uma transação para solicitar qualquer tarefa específica de seu “receptor de solicitação”. [7] O "receptor de solicitação" do cliente, com o qual o cliente iniciou a transação, é então chamado de server . [7] Por exemplo, quando um MCU se conecta a um sensor para ler seus dados por Modbus em uma rede cabeada, por exemplo, barramento RS485, o MCU neste contexto é o cliente e o sensor é o servidor.
O Modbus define uma unidade de dados de protocolo ( PDU ) independentemente de seus protocolos de camada inferior em sua pilha de protocolos. O mapeamento do protocolo MODBUS em barramentos ou redes específicas requer alguns campos adicionais, que são definidos como unidade de dados de aplicação ( ADU ). ADU é formada por um cliente dentro de uma rede Modbus quando o cliente inicia uma transação. Os conteúdos são: [8]
- PDU = Código de função + dados
- ADU = Endereço adicional + PDU + verificação de erros
ADU é oficialmente chamado de quadro Modbus pela Organização Modbus, [8] embora o quadro seja usado como unidade de dados na camada de enlace de dados no modelo OSI e TCP/IP (enquanto Modbus é um protocolo da camada de aplicação).
O tamanho máximo da PDU é 253 bytes. O tamanho máximo do ADU na rede RS232/RS485 é de 256 bytes e com TCP é de 260 bytes. [9]
Para codificação de dados, o Modbus usa uma representação big-endian para endereços e campos de dados. Assim, para um valor de 16 bits, o byte mais significativo é enviado primeiro. Por exemplo, quando um registrador de 16 bits tem valor 0x1234, o byte 0x12 é enviado antes do byte 0x34. [9]
O código da função tem 1 byte que fornece o código da função a ser executada. Os códigos de função são valores inteiros, variando de 1 a 255, e o intervalo de 128 a 255 é para respostas de exceção.
O campo de dados da PDU possui o endereço de 0 a 65535 (não confundir com o endereço do campo Endereço adicional da ADU). [10] O campo de dados da PDU pode estar vazio, e então ter tamanho 0. Neste caso, o servidor não solicitará nenhuma informação e o código da função define a função a ser executada. Se não houver erro durante o processo de execução, o campo de dados da resposta do ADU do servidor para o cliente incluirá os dados solicitados, ou seja, os dados que o cliente recebeu anteriormente. Se houver algum erro, o servidor responderá com um código de exceção. [7]
Transação Modbus e PDU
Uma transação Modbus entre cliente e servidor inclui: [7] [11]
- Etapa 1 : o cliente inicia uma solicitação com PDU = código de função + solicitação de dados
- Etapa 2 : O servidor recebe a solicitação do cliente. O servidor irá então ler/analisar o código de função, obter o endereço do campo de dados da PDU, obter o valor desse campo de dados e finalmente executar a ação com base no código de função. Se não houver erro durante essas etapas, o servidor responderá PDU = Código de função + resposta de dados. Como não há erro durante essas etapas, o código de função respondido pelo servidor também será o código de função enviado pelo cliente. Se houver algum erro durante essas etapas, o servidor responderá PDU = Código da função de exceção + Código de exceção (referência ao PDU mb_excep_rsp_pdu definido abaixo).
- Passo 3 : O cliente recebe a resposta e finaliza a transação.
Com base nisso, o Modbus define 3 tipos de PDU: [9]
- 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
mb_req_pdu = Código da função (1 byte) + dados da solicitação (n byte)
o tamanho do campo de dados da solicitação depende do código da função e geralmente inclui valores como valor da variável, deslocamento de dados, códigos de subfunção,...
mb_rsp_pdu = Código da função (1 byte) + dados de resposta (n byte)
Assim como em mb_req_pdu, o tamanho do campo de dados de resposta depende do código da função e geralmente inclui valores como valor da variável, deslocamento de dados, códigos de subfunções,...
mb_excep_rsp_pdu = Código da função de exceção (1 byte) + dados da solicitação (n byte)
Código de função de exceção = código de função (1 byte) + 0x80
O código de função de exceção terá então o bit MSB igual a 1 e seu bit esquerdo será igual ao código de função.
O código de exceção (1 byte) de mb_excep_rsp_pdu é definido na tabela " Códigos de exceção MODBUS ".
Modelo de dados Modbus
Modbus define seu modelo de dados baseado em uma série de tabelas com quatro tabelas primárias: [12]
Tabelas primárias | Acesso | Tamanho | Características |
---|---|---|---|
Bobina (saída discreta) [13] | Ler escrever | 1 bit | Valor ativado/desativado de leitura/gravação |
Entrada discreta | Somente leitura | 1 bit | Valor ligado/desligado de leitura |
Registro de entrada | Somente leitura | 16 bits (0–65.535) | Leia medições e status |
Registro de retenção | Ler escrever | 16 bits (0–65.535) | Valores de configuração de leitura/gravação |
Código de função
O Modbus define três tipos de códigos de função: Público, Definido pelo Usuário e Reservado. [14]
Códigos de função pública
Tipo de função | Nome da função | Código de função | Comente | ||
---|---|---|---|---|---|
Acesso de dados | Acesso a bits | Entradas físicas discretas | Ler entradas discretas | 2 | |
Bits internos ou bobinas físicas | Ler bobinas | 1 | |||
Escreva bobina única | 5 | ||||
Escreva várias bobinas | 15 | ||||
Acesso de 16 bits | Registros de entrada física | Ler registros de entrada | 4 | ||
Registros Internos ou Registros de Saída Física | Leia vários registros de retenção | 3 | |||
Gravar registro de retenção único | 6 | ||||
Escreva vários registros de retenção | 16 | ||||
Ler/escrever vários registros | 23 | ||||
Registro de gravação de máscara | 22 | ||||
Ler fila FIFO | 24 | ||||
Acesso ao registro de arquivo | Ler registro de arquivo | 20 | |||
Gravar registro de arquivo | 21 | ||||
Diagnóstico | Ler status de exceção | 7 | apenas serial | ||
Diagnóstico | 8 | apenas serial | |||
Obtenha o contador de eventos Com | 11 | apenas serial | |||
Obtenha o registro de eventos Com | 12 | apenas serial | |||
ID do servidor de relatório | 17 | apenas serial | |||
Leia a identificação do dispositivo | 43 | ||||
Outro | Transporte de interface encapsulada | 43 |
Nota : Algumas fontes utilizam terminologia diferente do padrão; por exemplo Force Single Coil em vez de Write Single Coil . [15]
Código de função 01 (ler bobinas) como exemplo de código de função pública [ editar ]
O código de função 01 (ler bobinas) permite ler o estado de 1 a 2.000 bobinas de um dispositivo remoto. mb_req_pdu (request PDU) terá então 2 bytes para indicar o endereço da primeira bobina a ler (de 0x0000 a 0xFFFF), e 2 bytes para indicar o número de bobinas a ler. mb_req_pdu define o endereço da bobina pelo índice 0, ou seja, a 1ª bobina (a primeira bobina) tem endereço 0x0. mb_rsp_pdu (PDU de resposta) - se a leitura for bem-sucedida - possui 1 byte para indicar o número de bytes que é o número de bobinas que mb_req_pdu exigiu, e os bytes esquerdos armazenam o status (valor ligado/desligado) dessas bobinas solicitadas. [16] Especificamente, mb_rsp_pdu e mb_rsp_pdu do código de função 01 é: [16]
mb_req_pdu :
- Código de função: 0x01 (1 byte)
- Endereço inicial (endereço da primeira bobina a ser lida): De 0x0000 a 0xFFFF (2 bytes)
- Quantidade de bobinas a serem lidas: Faixa de 1 a 2.000 (0x7D0) (2 bytes)
mb_rsp_pdu
- Código de função: 0x01 (1 byte)
- Contagem de bytes: 1 byte
- Status da bobina: n byte
Por exemplo, mb_req_pdu e mb_rsp_pdu para ler o status das bobinas de 20 a 38 serão: [17]
mb_req_pdu :
- Código de função: 0x01
- Byte alto do endereço inicial: 0x00
- Endereço inicial Byte baixo: 0x13
- Quantidade de saídas byte alto: 0x00
- Quantidade de saídas Byte baixo: 0x13
O endereço inicial (2 bytes) é 0x0013 (ou 19 em decimal), que é a 20ª bobina.
A quantidade de saídas (2 bytes) é 0x0013, (ou 19 em decimal) o que corresponde a 19 valores de status das bobinas 20 a 38.
mb_rsp_pdu :
- Código de função: 0x01
- Contagem de bytes: 0x03
- Status de saída 27-20: 0xCD
- Status de saída 35-28: 0x6B
- Status de saída 38-36: 0x05
Como são necessárias 19 bobinas (20-38), são usados 3 bytes para indicar o estado da bobina. Portanto, essa contagem de bytes é 0x03. Os estados da bobina de 20 a 27 são 0xCD, que é 1100 1101 em binário. Portanto, a bobina 27 é MSb e a bobina 20 é LSb. O mesmo para a bobina 28 a 35. Com a bobina 36 a 38, o estado será 0x05, que é 0000 0101. O estado da bobina 38 é o terceiro bit (contagem a partir da direita), ou seja, 1, a bobina 37 é 0 e a bobina 36 o estado é o bit LSb, ou seja, 1. 5 bits à esquerda são todos 0.
Códigos de função definidos pelo usuário
Códigos de função definidos pelo usuário são códigos de função definidos pelos usuários. O Modbus fornece dois intervalos de valores para códigos de função definidos pelo usuário: 65 a 72 e 100 a 110. Obviamente, os códigos de função definidos pelo usuário não são exclusivos. [14]
Códigos de função reservados
Códigos de função reservados são códigos de função usados por algumas empresas para produtos legados e não estão disponíveis para uso público. [14]
Respostas de exceção
Quando um cliente envia uma solicitação a um servidor, pode haver quatro eventos possíveis para essa solicitação: [18]
- Se o servidor receber a solicitação e executar com sucesso, o servidor retornará uma resposta normal.
- Se o servidor não puder receber a solicitação devido a um erro no canal de comunicação, o servidor não responderá nada ao cliente. O cliente terá então o erro de solicitação de tempo limite.
- Se o servidor receber a solicitação e detectar um erro no canal de comunicação (por exemplo, paridade, LRC, CRC), o servidor não responderá nada ao cliente. O cliente terá então o erro de solicitação de tempo limite.
- Se o servidor receber a solicitação e não conseguir executá-la (por exemplo, o cliente solicita a leitura de um registro inexistente), o servidor retornará uma resposta de exceção ao cliente para indicar a natureza do erro.
A mensagem de resposta de exceção inclui dois outros campos quando comparada a uma mensagem de resposta normal: [18]
- Código de função: O bit MSB de exceção do código de função é 1. Isso tornará este código de função 0x80 maior do que o código de função da mensagem de solicitação.
- Dados: o servidor retorna o código de exceção dentro do campo Dados. Este campo define a natureza do erro.
Todos os códigos de exceção Modbus: [19]
Código | Texto | Detalhes |
---|---|---|
1 | Função ilegal | O código da função recebido na consulta não é reconhecido ou permitido pelo servidor |
2 | Endereço de dados ilegais | O endereço de dados de algumas ou de todas as entidades necessárias não são permitidos ou não existem no servidor |
3 | Valor de dados ilegais | Valor não é aceito pelo servidor |
4 | Falha no dispositivo do servidor | Ocorreu um erro irrecuperável enquanto o servidor tentava executar a ação solicitada |
5 | Reconhecer | O servidor aceitou a solicitação e a está processando, mas é necessário um longo período de tempo. Esta resposta é retornada para evitar que ocorra um erro de tempo limite no cliente. o cliente pode em seguida emitir uma mensagem Poll Program Complete para determinar se o processamento foi concluído |
6 | Dispositivo de servidor ocupado | O servidor está processando um comando de longa duração; o cliente deve tentar novamente mais tarde |
7 | Reconhecimento Negativo | O servidor não consegue executar as funções de programação; o cliente deve solicitar informações de diagnóstico ou erro do servidor |
8 | Erro de paridade de memória | O servidor detectou um erro de paridade na memória; o cliente pode tentar novamente a solicitação |
10 | Caminho do gateway indisponível | Especializado para gateways Modbus: indica um gateway mal configurado |
11 | O dispositivo de destino do gateway não respondeu | Especializado para gateways Modbus: enviado quando o servidor não responde |
Protocolo Modbus sobre linha serial
O padrão Modbus também define Modbus over Serial Line , um protocolo sobre a camada de enlace de dados do modelo OSI para que o protocolo da camada de aplicação Modbus seja comunicado através de um barramento serial . [20] O protocolo Modbus Serial Line é um protocolo mestre-escravo que suporta um mestre e vários escravos no barramento serial. [21] Com o protocolo Modbus na camada de aplicação, o modelo cliente/servidor é utilizado para os dispositivos no canal de comunicação. Com Modbus sobre linha serial, a função do cliente é implementada pelo mestre e a função do servidor é implementada pelo escravo . [21] [22]
A convenção de nomenclatura da organização inverte o uso comum de ter vários clientes e apenas um servidor. Para evitar esta confusão, a camada de transporte RS-485 utiliza os termos “nó” ou “dispositivo” em vez de “servidor”, e o “cliente” não é um “nó”. [22]
Um barramento serial para Modbus através de linha serial pode ter no máximo 247 escravos comunicando-se com 1 mestre . Esses escravos possuem um endereço único que varia de 1 a 247 (valor decimal). [23] O mestre não precisa ter endereço. [23] O processo de comunicação é iniciado pelo mestre, pois somente ele pode iniciar uma transação Modbus. Um escravo nunca transmitirá quaisquer dados ou executará qualquer ação sem uma solicitação do mestre, e os escravos não podem se comunicar entre si. [24]
No Modbus sobre linha serial , o mestre inicia solicitações aos escravos nos modos unicast ou broadcast . No modo unicast , o mestre iniciará uma solicitação a um único escravo com um endereço específico. Ao receber e finalizar a solicitação, o escravo responderá com uma mensagem ao mestre. [23] Neste modo, uma transação Modbus inclui duas mensagens: uma solicitação do mestre e uma resposta do escravo. Cada escravo deve possuir um endereço único (de 1 a 247) para ser endereçado de forma independente para a comunicação. [23] No modo broadcast , o mestre pode enviar uma solicitação a todos os escravos, usando o endereço de broadcast 0 , [23] que é o endereço reservado para trocas de broadcast (e não o endereço do mestre). Os escravos devem aceitar trocas de transmissão, mas não devem responder. [24] O mapeamento da PDU do Modbus para o barramento serial do protocolo Modbus sobre linha serial resulta na PDU da linha serial Modbus. [23]
Linha serial Modbus PDU = Endereço + PDU + CRC (ou LRC)
Com PDU = código de função + dados
- Endereço é endereço escravo
- PDU é definido de forma idêntica ao PDU do protocolo Modbus Application
- Campo de verificação de erros com CRC/LRC: Os métodos de verificação de erros dependem das versões do protocolo MODBUS via linha serial, seja Modbus RTU ou Modbus ASCII .
Na camada Física , o MODBUS sobre Linha Serial realiza sua comunicação em bit por RS485 ou RS232 , sendo a interface TIA/EIA-485 Two-Wire a forma mais popular. A interface RS485 de quatro fios também é usada. TIA/EIA-232-E (RS232) também pode ser usado, mas está limitado à comunicação ponto a ponto de curto alcance. [21] MODBUS over Serial Line possui dois modos de transmissão RTU e ASCII que correspondem a duas versões do protocolo, conhecidas como Modbus RTU e Modbus ASCII . [25]
Modbus RTU
Modbus RTU ( Remote Terminal Unit ), que é a implementação mais comum disponível para Modbus, faz uso de uma representação binária compacta dos dados para comunicação de protocolo. O formato RTU segue os comandos/dados com uma soma de verificação de redundância cíclica como um mecanismo de verificação de erros para garantir a confiabilidade dos dados. Uma mensagem Modbus RTU deve ser transmitida continuamente sem hesitações entre caracteres. As mensagens Modbus são enquadradas (separadas) por períodos ociosos (silenciosos). Cada dado/mensagem de 1 byte (8 bits) do Modbus RTU precisa ter mais 3 bits para formar o total de 11 bits: [3] [25]
- 1 bit inicial
- Dados/mensagem de 8 bits, o bit LSB é enviado primeiro
- Paridade de 1 bit
- 1 ponto de parada
Um quadro Modbus RTU será então: [26]
Endereço escravo | Código de Função | Dados | CDC |
---|---|---|---|
1 byte | 1 byte | 0 - 252 bytes | 2 bytes: 1 byte CRC baixo e 1 byte CRC alto |
O cálculo CRC é amplamente conhecido como CRC-16-MODBUS cujo polinômio é x 16 + x 15 + x 2 + 1 (sendo polinômio algébrico hexadecimal normal 8005
e invertido A001
). [27]
Exemplo de quadro Modbus RTU em hexadecimal : 01 04 02 FF FF B8 80
(cálculo CRC-16-MODBUS para os 5 bytes de 01
até FF
dá 80B8
, que é transmitido primeiro o byte menos significativo).
Para garantir a integridade do quadro Modbus durante a transmissão, o intervalo de tempo entre dois quadros deve ser pelo menos igual ao tempo de transmissão de 3,5 caracteres, e o intervalo de tempo entre dois caracteres consecutivos não deve ser superior ao tempo de transmissão de 1,5 caracteres. [26]
Por exemplo, com a taxa de transmissão padrão de 19.200 bps, o tempo de transmissão de 3,5 (t3,5) e 1,5 (t1,5) caracteres é (observe que cada caractere de 8 bits requer 3 bits de enquadramento extras para ser transmitido):
Para taxas de transmissão maiores, o Modbus RTU recomenda usar os valores fixos 750µs para t1.5 e 1.750ms para t3.5. [26]
Modbus ASCII
O Modbus ASCII utiliza caracteres ASCII para comunicação de protocolo. O formato ASCII usa uma soma de verificação de redundância longitudinal . As mensagens Modbus ASCII são enquadradas por dois pontos iniciais (":") e uma nova linha final (CR/LF).
Um quadro Modbus ASCII inclui: [28]
Nome | Comprimento (bytes) | Função |
---|---|---|
Começar | 1 | Dois pontos : ( valor ASCII 3A 16 ) |
Endereço | 2 | Endereço da estação |
Função | 2 | Indica o código de função, por exemplo, "ler bobinas" |
Dados | n × 2 | Dados + comprimento serão preenchidos dependendo do tipo de mensagem |
LRC | 2 | Soma de verificação ( verificação de redundância longitudinal ) |
Fim | 2 | Par retorno de carro + alimentação de linha (CR/LF) (valores ASCII 0D 16 e 0A 16 ) |
Endereço, Função, Dados e LRC são valores codificados hexadecimais ASCII, em que valores de 8 bits (0–255) são codificados como dois caracteres ASCII legíveis por humanos nos intervalos 0–9 e A–F. Por exemplo, um valor de 122 (7A 16 ) é codificado como dois caracteres ASCII, "7" e "A", e transmitido como dois bytes, 55
(37 16 , valor ASCII para "7") e 65
(41 16 , valor ASCII para").
LRC é calculado como a soma de valores de 8 bits (excluindo os caracteres iniciais e finais), negado ( complemento de dois ) e codificado como um valor de 8 bits. Por exemplo, se Endereço, Função e Dados forem 247, 3, 19, 137, 0 e 10, o complemento de dois de sua soma (416) é −416; isso cortado para 8 bits é 96 (256 × 2 − 416 = 60 16 ), fornecendo o seguinte quadro de 17 caracteres ASCII: :F7031389000A60␍␊
. LRC é especificado para uso apenas como uma soma de verificação: como é calculado nos dados codificados e não nos caracteres transmitidos, sua característica 'longitudinal' não está disponível para uso com bits de paridade para localizar erros de bit único.
Mensagens Modbus em TCP/IP
Modbus TCP
Modbus TCP ou Modbus TCP/IP é uma variante do Modbus usada para comunicações em redes TCP/IP , conectando-se pela porta 502 . [29] Não requer cálculo de checksum, pois as camadas inferiores já fornecem proteção de checksum.
A nomenclatura Modbus TCP é a mesma do protocolo Modbus sobre linha serial, pois qualquer dispositivo que envia um comando Modbus é o 'cliente' e a resposta vem de um 'servidor'. [30]
O ADU para Modbus TCP é oficialmente chamado de MODBUS TCP/IP ADU (ou Modbus TCP/IP ADU) pela organização Modbus [31] e também é chamado de quadro Modbus TCP por outras partes. [3]
MODBUS TCP/IP ADU = Cabeçalho MBAP + Código de função + Dados
Onde MBAP - que significa cabeçalho do protocolo de aplicação MODBUS - é o cabeçalho dedicado usado no TCP/IP para identificar a unidade de dados de aplicação MODBUS.
O cabeçalho do MBAP contém os seguintes campos: [32]
Nome | Comprimento (bytes) | Função |
---|---|---|
Identificador de transação | 2 | Para sincronização entre mensagens de servidor e cliente |
Identificador de protocolo | 2 | 0 para Modbus/TCP |
Campo de comprimento | 2 | Número de bytes restantes neste quadro |
Identificador da unidade | 1 | Endereço do servidor (255 se não for usado), tratado como endereço escravo no Modbus pela linha serial |
O identificador de unidade é usado com dispositivos Modbus TCP que são compostos de vários dispositivos Modbus, por exemplo, Modbus TCP para gateways Modbus RTU. Nesse caso, o identificador da unidade é o endereço do servidor do dispositivo atrás do gateway.
Um formato de quadro MODBUS TCP/IP ADU/Modbus TCP será: [32] [31]
Identificador de transação | Identificador de protocolo | Comprimento | Identificador da unidade | Código de função | Dados |
---|---|---|---|---|---|
2 bytes | 2 bytes | 2 bytes | 1 byte | 1 byte | n bytes |
Exemplo de quadro Modbus TCP/IP ADU/Modbus TCP em hexadecimal :
12 34 00 00 00 06 01 03 00 01 00 01
0x12
e0x34
: Com o ID da transação = 0x1234 (2 bytes) como um "número único" a ser identificado entre o cliente/servidor Modbus TCP, o byte alto do ID da transação é 0x12 e o byte baixo do ID da transação é 0x340x00
e0x00
: Identificador de protocolo byte alto e byte baixo0x00
e0x06
: Comprimento do byte alto e do byte baixo. O comprimento é de 6 bytes que inclui: identificador da unidade (endereço escravo) (1 byte), código de função (1 byte), byte alto do endereço do registrador a ser lido (1 byte), byte inferior do endereço do registrador a ser lido (1 byte ) e dados (2 bytes = byte alto e byte baixo do número de registros a serem lidos)0x01
: Identificador da unidade (endereço do escravo)0x03
: Código de função (leitura de vários registros retidos)0x00
e0x01
: byte alto e byte baixo do endereço do registrador a ser lido. O endereço do registrador a ser lido neste caso é0x0001
.0x00
e0x01
: byte alto e byte baixo do número de registros a serem lidos. O número de registros a serem lidos neste caso é0x0001
. (ou seja, 1 registro)
Outras versões do protocolo Modbus sobre TCP/IP
- Modbus sobre TCP/IP , Modbus sobre TCP ou Modbus RTU/IP – uma variante que difere do Modbus TCP porque uma soma de verificação é incluída na carga útil, como acontece com o Modbus RTU.
- Modbus sobre UDP – alguns experimentaram usar Modbus sobre UDP em redes IP, o que elimina a sobrecarga do TCP. [33]
Outras versões do protocolo Modbus
Além dos amplamente utilizados Modbus RTU, Modbus ASCII e Modbus TCP, existem muitas variantes de protocolos Modbus:
- Modbus Plus ( Modbus+ , MB+ ou MBP ) – Modbus Plus é propriedade da Schneider Electric , embora seja inédito em vez de patenteado e, ao contrário de outras variantes, suporta comunicações ponto a ponto entre vários clientes. [34] Apesar do nome, Modbus Plus [35] não é uma variante do Modbus. É um protocolo diferente , envolvendo passagem de token . Requer um coprocessador dedicado para lidar com a rotação rápida de tokens do tipo HDLC . Ele usa par trançado a 1 Mbit/s e inclui isolamento de transformador em cada nó, o que o torna acionado por transição/borda em vez de acionado por tensão/nível. É necessário hardware especial para conectar o Modbus Plus a um computador, normalmente uma placa feita para o barramento ISA , PCI ou PCMCIA . O Modbus Plus normalmente é implementado usando um chipset personalizado disponível apenas para parceiros da Schneider.
- Pemex Modbus – uma extensão do Modbus padrão com suporte para dados históricos e de fluxo. Ele foi projetado para a empresa de petróleo e gás Pemex para uso no controle de processos e nunca foi amplamente adotado.
- Enron Modbus – outra extensão do Modbus padrão desenvolvido pela Enron com suporte para variáveis inteiras e de ponto flutuante de 32 bits e dados históricos e de fluxo. Os tipos de dados são mapeados usando endereços padrão. [36] Os dados históricos servem para atender a um padrão da indústria do American Petroleum Institute (API) sobre como os dados devem ser armazenados. [ carece de fontes ]
Os modelos de dados e as chamadas de função são idênticos para as primeiras quatro variantes listadas acima; apenas o encapsulamento é diferente. No entanto, as variantes não são interoperáveis, nem os formatos de quadro.
Mapeamento JBUS
Outro protocolo de fato intimamente relacionado ao Modbus apareceu mais tarde e foi definido pela fabricante de PLC April Automates, resultado de um esforço colaborativo entre as empresas francesas Renault Automation e Merlin Gerin et Cie em 1985: JBUS . As diferenças entre Modbus e JBUS naquela época (número de entidades, estações de servidor) são agora irrelevantes, pois este protocolo quase desapareceu com a série April PLC, que a AEG Schneider Automation comprou em 1994 e depois tornou obsoleta. No entanto, o nome JBUS sobreviveu até certo ponto.
JBUS suporta os códigos de função 1, 2, 3, 4, 5, 6, 15 e 16 e, portanto, todas as entidades descritas acima, embora a numeração seja diferente:
- Número e endereço coincidem: a entidade # x possui o endereço x no quadro de dados.
- Consequentemente, o número da entidade não inclui o tipo de entidade. Por exemplo, manter o registro nº 40010 no Modbus será manter o registro nº 9, no endereço 9 no JBUS.
- O número 0 (e, portanto, o endereço 0) não é suportado. O servidor não deve implementar nenhum dado real neste número e endereço e pode retornar um valor nulo ou gerar um erro quando solicitado.
Limitações
- Como o Modbus foi projetado no final da década de 1970 para se comunicar com controladores lógicos programáveis, o número de tipos de dados é limitado àqueles compreendidos pelos CLPs da época. Objetos binários grandes não são suportados.
- Não existe uma maneira padrão para um nó encontrar a descrição de um objeto de dados, por exemplo, para saber que um valor de registro representa uma temperatura entre 30 e 175 graus.
- Como o Modbus é um protocolo cliente/servidor (anteriormente mestre/escravo), [22] não há como um dispositivo de campo obter dados pelo mecanismo manipulador de eventos (exceto via Ethernet TCP/IP, chamado open-mbus) como cliente. O nó deve pesquisar rotineiramente cada dispositivo de campo e procurar alterações nos dados. Isso consome largura de banda e tempo de rede em aplicações onde a largura de banda pode ser cara, como em um link de rádio com baixa taxa de bits.
- O Modbus está restrito a endereçar 247 dispositivos em um link de dados, o que limita o número de dispositivos de campo que podem ser conectados a uma estação pai (novamente, Ethernet TCP/IP é uma exceção).
- O próprio protocolo Modbus não oferece segurança contra comandos não autorizados ou interceptação de dados. [37]
Referências
- ^a b c d Protocolo de aplicação MODBUS 2012, p. 2.
- ^ MODICON, Inc. 1996 , "Prefácio"
- ^abc Drury , Bill (2009) . Manual de acionamentos e controles de técnicas de controle (PDF)(2ª ed.). Instituição de Engenharia e Tecnologia. páginas 508–.
- ^a b "Página inicial do Modbus". Modbus. Organização Modbus,Inc. Recuperado em 2 de agosto de 2013.
- ^ "Perguntas frequentes sobre Modbus" . Modbus . Organização Modbus, Inc. Recuperado em 1 de novembro de 2012 .
- ^ "Sobre a organização Modbus" . Modbus . Organização Modbus, Inc. Recuperado em 8 de novembro de 2012 .
- ^a b c d Protocolo de aplicação MODBUS 2012, p. 4, "4.1 Descrição do protocolo"
- ^a b Protocolo de aplicação MODBUS 2012, p. 3, "4.1 Descrição do protocolo"
- ^a b c Protocolo de aplicação MODBUS 2012, p. 5, "4.1 Descrição do protocolo"
- ^ Protocolo de aplicação MODBUS 2012 , p. 7, "4.4 Modelo de endereçamento MODBUS"
- ^ Protocolo de aplicação MODBUS 2012 , p. 9, "Figura 9 Diagrama de estado de transação MODBUS"
- ^ Protocolo de aplicação MODBUS 2012 , p. 6, "4.3 Modelo de dados MODBUS"
- ^ "Simulador Mestre Modpoll Modbus" . modbusdriver. com . Recuperado em 13/10/2023 "-t 0" é para "Tipo de dados de saída discreta (bobina)"
- ^a b c Protocolo de aplicação MODBUS 2012, p. 10, "5 categorias de códigos de função"
- ^ Clarke, Gordon; Reynders, Deon (2004). Protocolos Scada Modernos Práticos: Dnp3, 60870.5 e Sistemas Relacionados . Novos. págs. 47–51. ISBN 0-7506-5799-5.
- ^a b Protocolo de aplicação MODBUS 2012, p. 11
- ^ Protocolo de aplicação MODBUS 2012 , p. 12, "6.1 01 (0x01) Ler bobinas"
- ^a b Protocolo de aplicação MODBUS 2012, p. 47, "7 Respostas de Exceção MODBUS"
- ^ Protocolo de aplicação MODBUS 2012 , p. 48, "7 Respostas de Exceção MODBUS"
- ^ MODBUS sobre protocolo de linha serial 2006 , p. 4
- ^a b c MODBUS sobre protocolo de linha serial 2006, p. 5
- ^a b c "Organização Modbus substitui Mestre-Escravo por Cliente-Servidor (comunicado à imprensa)"(PDF). modbus.org. 9 de julho de 2020. Recuperado em 11 de julho de 2023.
- ^a b c d e f MODBUS sobre protocolo de linha serial 2006, p. 8
- ^a b MODBUS sobre protocolo de linha serial 2006, p. 7
- ^a b MODBUS sobre protocolo de linha serial 2006, p. 12
- ^a b c MODBUS sobre protocolo de linha serial 2006, p. 13, "2.5.1.1 Enquadramento RTU de Mensagem MODBUS"
- ^ MODBUS sobre protocolo de linha serial 2006 , p. 39
- ^ MODBUS sobre protocolo de linha serial 2006 , p. 17, "2.5.2.1 Enquadramento ASCII de mensagem MODBUS"
- ^ Mensagens MODBUS em TCP/IP 2006 , p. 6
- ^ Prat, Jérôme (13 de fevereiro de 2017). "Curso intensivo: Cliente/Servidor/Mestre/Escravo" . Tecnologia ProSoft . Recuperado em 17/10/2022 .
- ^a b Mensagens MODBUS em TCP/IP 2006, p. 4, "3.1.2 MODBUS na unidade de dados de aplicação TCP/IP"
- ^a b Mensagens MODBUS em TCP/IP 2006, p. 5, "3.1.3 Descrição do cabeçalho do MBAP"
- ^ "Biblioteca Java Modbus - Sobre" . 2010 . Recuperado em 07/02/2017 .
- ^ "Qual é a diferença entre Modbus e Modbus Plus?" . Schneider Elétrica. 21 de agosto de 2004 . Recuperado em 07/02/2017 .
- ^ "Modbus Plus - Rede Modbus Plus - Visão geral dos produtos - Schneider Electric Estados Unidos" . Schneider-electric. com . Recuperado em 03/01/2014 .
- ^ "Simplesmente Modbus - Sobre o Enron Modbus" . Simplesmente Modbus . Recuperado em 07/02/2017 .
- ^ Palmer; Shenoi, Sujeet, eds. (23–25 de março de 2009). Protecção de infra-estruturas críticas III . Terceira Conferência Internacional IFIP WG 11. 10. Hanover, New Hampshire: Springer. pág. 87. ISBN 978-3-642-04797-8.
Trabalhos citados
- Protocolo de aplicação MODBUS (2012). Especificação do protocolo de aplicação Modbus V1.1b3 (PDF) . A Organização Modbus . Recuperado em 10/10/2023 .
- MODBUS sobre protocolo de linha serial (2006). Guia de especificação e implementação de MODBUS sobre linha serial V1.02 (PDF) .
- Mensagens MODBUS em TCP/IP (2006). Guia de implementação de mensagens MODBUS em TCP/IP V1.0b (PDF) . Organização Modbus.
- MODICON, Inc. Guia de referência do protocolo Modicon Modbus/Modbus sobre linha serial (somente para aplicativos legados) (PDF) .
Links externos
Especificações
- Organização Modbus – links para especificações de protocolo
- Modbus sobre linha serial V1.02 – Organização Modbus (2006)
- Guia de referência do protocolo Modicon Modbus – Organização Modbus (1996). Esta é uma especificação Modbus obsoleta e só deve ser usada para resolver problemas legados.
Outro
- Modbus para técnicos de campo em modbusbacnet.com
- Tutorial Modbus na RF Wireless World