{"id":2492,"date":"2021-05-11T14:39:37","date_gmt":"2021-05-11T17:39:37","guid":{"rendered":"https:\/\/wireengenharia.com\/br\/?p=2492"},"modified":"2021-05-11T14:39:37","modified_gmt":"2021-05-11T17:39:37","slug":"protocolo-modbus-introducao","status":"publish","type":"post","link":"https:\/\/wireengenharia.com\/br\/protocolo-modbus-introducao\/","title":{"rendered":"Protocolo Modbus &#8211; Introdu\u00e7\u00e3o"},"content":{"rendered":"<p><strong>O mundo da automa\u00e7\u00e3o \u2013 O protocolo Modbus<\/strong><\/p>\n<p>Estamos come\u00e7ando uma nova coluna com informa\u00e7\u00f5es que s\u00e3o importantes para este atual mundo da automa\u00e7\u00e3o, que j\u00e1 est\u00e1 \u201ccasado\u201d com a rede de dados j\u00e1 h\u00e1 algum tempo, em especial, o protocolo IP.<\/p>\n<p>Muito se houve falar na ind\u00fastria 4.0, que a automa\u00e7\u00e3o vai dominar o mundo, gerando desemprego e, sim, \u00e9 bem verdade que isto dever\u00e1 ocorrer num breve futuro.<\/p>\n<p>Mas para que voc\u00ea tenha um lugar cativo neste atual mundo da automa\u00e7\u00e3o, \u00e9 importante come\u00e7ar a entender como a automa\u00e7\u00e3o est\u00e1 acontecendo, tecnologias, protocolos, etc, que estaremos abordando de agora em diante nesta coluna. Entre outras tecnologias e protocolos, vamos abordar al\u00e9m do Modbus, o protocolos BACNET, CAN, LON, KNX, protocolos sem fio, protocolos para IoT&#8230; Vamos abordar sobre o LORA, SIGFOX, NBIoT, entre diversos outros, al\u00e9m do que est\u00e1 acontecendo no mundo na \u00e1rea de automa\u00e7\u00e3o e cidades inteligentes e como a Internet liga tudo ao redor.<\/p>\n<p>Penso que o ponto de partida para come\u00e7armos falar de automa\u00e7\u00e3o, come\u00e7a pelo entendimento do protocolo Modbus, que embora tenha sido criado na d\u00e9cada de 70 (1979),\u00a0 se mantem atual em fun\u00e7\u00e3o da sua simplicidade e robustez. Al\u00e9m do Modbus RTU, j\u00e1 existe o Modbus encapsulado no protocolo IP.<\/p>\n<p>Vamos tentar tratar destes assuntos, da forma mais did\u00e1tica poss\u00edvel e, deixaremos sempre um link (<a href=\"http:\/\/www.mobus.org\">www.mobus.org<\/a>) para que se possa aprofundar em cada uma das tecnol\u00f3gicas que ser\u00e3o abordadas aqui. Mas, vamos ao que interessa e come\u00e7armos a falar de automa\u00e7\u00e3o do inicio, ou seja, o protocolo Modbus. Para cada protocolo ou tecnologia, desenvolveremos de 2 a 3 artigos e assim por diante, para ficar uma leitura simples, did\u00e1tica e n\u00e3o muito grande.<\/p>\n<p>O Modbus se situa na camada 7 da arquitetura OSI, de 7 camadas (aplica\u00e7\u00e3o). Passou a ser um padr\u00e3o de fato, no ano de 1979 e, at\u00e9 hoje, a maioria dos equipamentos do mundo predial e fabril (geradores, controladores de motores, medidores de energia, etc) utilizam o protocolo Modbus, sendo que hoje temos milh\u00f5es de dispositivos enviando e recendo informa\u00e7\u00f5es por meio deste protocolo.<\/p>\n<p>O Modbus pode ser encapsulado no protocolo TCP (da pilha TCP\/IP) na porta 502. MODBUS \u00e9 um protocolo de solicita\u00e7\u00e3o \/ resposta tipo Mestre e escravo, que oferece servi\u00e7os especificados por c\u00f3digos de fun\u00e7\u00e3o. Os c\u00f3digos de fun\u00e7\u00e3o MODBUS s\u00e3o elementos das PDUs ( do protocolo) que enviam \u00a0solicita\u00e7\u00e3o \/ resposta MODBUS. A figura 1 apresenta a pilha de protocolo MOBUS que atualmente \u00e9 implementado usando:<\/p>\n<ul>\n<li>TCP \/ IP sobre Ethernet.<\/li>\n<li>Transmiss\u00e3o serial ass\u00edncrona em uma variedade de m\u00eddias (fio: EIA \/ TIA -232-E, EIA-422,EIA \/ TIA-485-A; fibra, r\u00e1dio, etc.)<\/li>\n<li>MODBUS PLUS<\/li>\n<\/ul>\n<p><img decoding=\"async\" title=\"Pilha Modbus\" src=\"a\" alt=\"\" \/><\/p>\n<p><img decoding=\"async\" class=\"\" src=\"teste\" alt=\"\" width=\"Infinity\" height=\"100\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Figura 1 \u2013 A pilha de protocolo Modbus<\/p>\n<p>&nbsp;<\/p>\n<p>A figura 2 apresenta a versatilidade da transfer\u00eancia de informa\u00e7\u00f5es Modbus sobre diversas tecnologias que d\u00e1 a ideia da versatilidade do protocolo, ou seja, dentro do mundo IP, serial RS 232 e 485.<\/p>\n<p>Todos os tipos de dispositivos (PLC, IHM, Painel de Controle, Driver, Controle de Movimento, Dispositivo de I \/ O) podem usar Protocolo MODBUS para iniciar uma opera\u00e7\u00e3o remota. A mesma comunica\u00e7\u00e3o pode ser feita tamb\u00e9m na linha serial como em redes Ethernet TCP \/ IP. Os gateways permitem uma comunica\u00e7\u00e3o entre v\u00e1rios tipos de barramentos ou redes usando o protocolo MODBUS.<\/p>\n<p>Figura 2 \u2013 Exemplo de uma arquitetura de rede Modbus<\/p>\n<p><strong>O PROTOCOLO<\/strong><\/p>\n<p>O protocolo MODBUS, conforme figura 3, define uma unidade de dados de protocolo simples (PDU) independente das camadas de comunica\u00e7\u00e3o subjacentes. O mapeamento do protocolo MODBUS em barramentos espec\u00edficos ou rede pode introduzir alguns campos adicionais na unidade de dados da aplica\u00e7\u00e3o (ADU).<\/p>\n<p>Figura 3 \u2013 Formato do quadro Modbus<\/p>\n<p>A unidade de dados da aplica\u00e7\u00e3o MODBUS \u00e9 constru\u00edda pelo cliente que inicia uma transa\u00e7\u00e3o MODBUS. A fun\u00e7\u00e3o indica ao servidor que tipo de a\u00e7\u00e3o deve ser executado e o aplicativo MODBUS protocol estabelece o formato de um pedido iniciado por um cliente.<\/p>\n<p>O campo de c\u00f3digo de fun\u00e7\u00e3o de uma unidade de dados MODBUS \u00e9 codificado em um byte. C\u00f3digos v\u00e1lidos est\u00e3o no intervalo de 1 &#8230; 255 decimal (o intervalo 128 &#8211; 255 \u00e9 reservado e usado para respostas). Quando uma mensagem \u00e9 enviada de um Cliente para um dispositivo Servidor, o campo do c\u00f3digo de fun\u00e7\u00e3o informa ao servidor que tipo de a\u00e7\u00e3o deve ser executada. O c\u00f3digo de fun\u00e7\u00e3o &#8220;0&#8221; n\u00e3o \u00e9 v\u00e1lido.<\/p>\n<p>C\u00f3digos de subfun\u00e7\u00e3o s\u00e3o adicionados a alguns c\u00f3digos de fun\u00e7\u00e3o para definir v\u00e1rias a\u00e7\u00f5es. O campo de dados de mensagens enviadas de um cliente para dispositivos do servidor cont\u00e9m informa\u00e7\u00f5es adicionais que o servidor usa para executar a a\u00e7\u00e3o definida pelo c\u00f3digo de fun\u00e7\u00e3o. Isso pode incluir itens como endere\u00e7os discretos e de registro, a quantidade de itens a serem manipulados e a contagem de bytes de dados reais no campo.<\/p>\n<p>O campo de dados pode ser inexistente (de comprimento zero) em certos tipos de pedidos, neste caso o servidor n\u00e3o requer nenhuma informa\u00e7\u00e3o adicional. O c\u00f3digo de fun\u00e7\u00e3o sozinho especifica a a\u00e7\u00e3o que deve ser feita.<\/p>\n<p>O tamanho da PDU MODBUS \u00e9 limitado pela restri\u00e7\u00e3o de tamanho herdada da primeira implementa\u00e7\u00e3o MODBUS na rede Serial Line (m\u00e1x. RS485 &#8211; ADU = 256 bytes).<\/p>\n<p>Assim sendo:<\/p>\n<p>PDU MODBUS para comunica\u00e7\u00e3o em linha serial = 256 &#8211; Endere\u00e7o do servidor (1 byte) &#8211; CRC (2bytes) = 253 bytes.<\/p>\n<p>Consequentemente:<\/p>\n<p>ADU RS232 \/ RS485 = 253 bytes + Endere\u00e7o do servidor (1 byte) + CRC (2 bytes) = 256 bytes.<\/p>\n<p>TCP MODBUS ADU = 253 bytes + MBAP (7 bytes) = 260 bytes.<\/p>\n<p>O protocolo MODBUS define tr\u00eas PDUs. S\u00e3o eles:<\/p>\n<ul>\n<li>PDU de solicita\u00e7\u00e3o MODBUS, mb_req_pdu<\/li>\n<li>PDU de resposta MODBUS, mb_rsp_pdu<\/li>\n<li>PDU de Resposta de Exce\u00e7\u00e3o MODBUS, mb_excep_rsp_pdu<\/li>\n<\/ul>\n<p>O MODBUS baseia seu modelo de dados em uma s\u00e9rie de tabelas que possuem caracter\u00edsticas diferenciadas.<\/p>\n<p>O Modbus manipula 4 tipos de banco de dados que s\u00e3o:<\/p>\n<p>Tabela 1 \u2013 Tabela prim\u00e1ria<\/p>\n<p>Todos os dados manipulados via MODBUS (bits, registradores) devem estar localizados no dispositivo, ou seja, na mem\u00f3ria da aplica\u00e7\u00e3o. Mas endere\u00e7o f\u00edsico na mem\u00f3ria n\u00e3o deve ser confundido com dados de refer\u00eancia.<\/p>\n<p>Vamos encerrar esta primeira parte explicando melhor esta tabela prim\u00e1ria:<\/p>\n<p>Exemplo 1: Dispositivo com 4 blocos separados ( 4 bancos de dados)<\/p>\n<p>O exemplo da figura 4 mostra a organiza\u00e7\u00e3o dos dados em um dispositivo exemplo com entradas e sa\u00eddas digitais e anal\u00f3gicas.<\/p>\n<p>Cada bloco \u00e9 separado porque os de blocos diferentes n\u00e3o tem correla\u00e7\u00e3o, ou seja, as entradas e sa\u00eddas anal\u00f3gicas e digitais s\u00e3o independentes. Desta forma, o bloco \u00e9 assim acess\u00edvel com diferentes fun\u00e7\u00f5es MODBUS.<\/p>\n<p>Figura 4 \u2013 Modelo de dados separado por blocos<\/p>\n<p>Exemplo 2: Dispositivo com apenas 1 bloco<\/p>\n<p>No exemplo da figura 5, o dispositivo tem apenas 1 bloco de dados. Os mesmos dados podem ser alcan\u00e7ados atrav\u00e9s de v\u00e1rias fun\u00e7\u00f5es MODBUS, seja atrav\u00e9s de um acesso de 16 bits ou atrav\u00e9s de um bit de acesso.<\/p>\n<p>Estes blocos s\u00e3o totalmente conceituais. Eles podem existir como endere\u00e7os de mem\u00f3ria distintos em um dado sistema, mas tamb\u00e9m podem se sobrepor entre si. Por exemplo, o coil 1 pode existir na mesma posi\u00e7\u00e3o de mem\u00f3ria que o primeiro bit da palavra representada pelo registrador de reten\u00e7\u00e3o 1. O esquema de endere\u00e7amento \u00e9 totalmente definido pelo dispositivo escravo, e a interpreta\u00e7\u00e3o de cada bloco de mem\u00f3ria \u00e9 uma parte importante do modelo de dados do dispositivo.<\/p>\n<p>&nbsp;<\/p>\n<p>Figura 5 \u2013 Modelo de dados com 1 bloco<\/p>\n<p><strong>Explicando melhor estes registradores<\/strong><\/p>\n<p>Os dados que podem ser acessados pelo Modbus s\u00e3o armazenados, de forma geral, em um dos quatro bancos de dados, ou faixas de endere\u00e7o: coils, entradas discretas, registradores holding (que estamos chamando de reten\u00e7\u00e3o) e registradores de entrada. Esses nomes de registradores podem variar, dependendo do fabricante. Por exempo, o que estamos chamando de registradores holding (reten\u00e7\u00e3o) podem ser denominados de uma melhor forma, como <strong>registradores de sa\u00edda<\/strong>, e os <strong>coils<\/strong>, para facilitar o entendimento, podem ser referidos como <strong>sa\u00eddas digitais (1 bit)<\/strong>. Os dispositivos escravos armazenam localmente estes dados nos dispositivos e podem ser acessados pelo protocolo de forma geral por meio de um subconjunto da mem\u00f3ria principal do dispositivo. Por outro lado, os mestres Modbus precisam solicitar acesso a esses dados, utilizando diversos c\u00f3digos de fun\u00e7\u00e3o.<\/p>\n<p>Nesse esquema de endere\u00e7amento, cada tipo de dados recebe um prefixo, como mostrado na tabela 2.<\/p>\n<p>&nbsp;<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"225\">Bloco de dados<\/td>\n<td width=\"123\">Prefixo<\/td>\n<\/tr>\n<tr>\n<td width=\"225\">Coil<\/td>\n<td width=\"123\">0<\/td>\n<\/tr>\n<tr>\n<td width=\"225\">Entrada discreta<\/td>\n<td width=\"123\">1<\/td>\n<\/tr>\n<tr>\n<td width=\"225\">Registrador de entrada<\/td>\n<td width=\"123\">3<\/td>\n<\/tr>\n<tr>\n<td width=\"225\">Registrador Holding (reten\u00e7\u00e3o)<\/td>\n<td width=\"123\">4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Tabela 2 &#8211; \u00a0Esquema do prefixo de endere\u00e7amento<\/p>\n<p><strong>Coils utilizam o prefixo 0.<\/strong> Isso significa que a refer\u00eancia 4001 pode se referir ao registrador holding 1 ou ao coil 4001. Por esse motivo, \u00e9 recomendado que todas as implementa\u00e7\u00f5es novas utilizem o endere\u00e7amento de 6 d\u00edgitos com zeros na frente. Essa informa\u00e7\u00e3o dever\u00e1 ser anotada na documenta\u00e7\u00e3o. Dessa forma, o registrador holding 1 \u00e9 referenciado como 400.001 e o coil 4001 \u00e9 referenciado como 004.001.<\/p>\n<p>Embora a especifica\u00e7\u00e3o defina que diferentes tipos de dados devem existir em blocos diferentes e atribua uma faixa de endere\u00e7os local para cada tipo, isso n\u00e3o implica que haver\u00e1 necessariamente um esquema de endere\u00e7amento intuitivo ou facilmente compreens\u00edvel para a documenta\u00e7\u00e3o da mem\u00f3ria que pode ser acessada pelo Modbus para um determinado dispositivo. Para simplificar a discuss\u00e3o sobre as posi\u00e7\u00f5es dos blocos de mem\u00f3ria, foi introduzido um esquema de numera\u00e7\u00e3o que inclui prefixos ao endere\u00e7o dos dados em quest\u00e3o.<\/p>\n<p>Por exemplo, em vez de se referir a um item como registrador holding (reten\u00e7\u00e3o) 14 no endere\u00e7o 13, o manual do dispositivo pode se referir a um item de dados no endere\u00e7o 4.014, 40.014 ou 400.014. Em todos esses casos, o primeiro n\u00famero especificado \u00e9 4, que representa os registradores holding; os demais n\u00fameros especificam um endere\u00e7o. A diferen\u00e7a entre 4XXX, 4XXXX e 4XXXXX depende do espa\u00e7o de endere\u00e7os utilizado pelo dispositivo. Se todos os 65.536 registradores estiverem em uso, utilizaremos a nota\u00e7\u00e3o 4XXXXX, pois ela permite o uso da faixa de 400.001 a 465.536. Se apenas alguns registradores forem usados, uma pr\u00e1tica comum \u00e9 usar a faixa de 4.001 a 4.999.<\/p>\n<p>&nbsp;<\/p>\n<p>Na pr\u00f3xima edi\u00e7\u00e3o, vamos avan\u00e7ar mais no protocolo Modbus com exemplos de rede e sistemas de automa\u00e7\u00e3o.<\/p>\n<p>Bibliografia<\/p>\n<p><a href=\"http:\/\/www.modbus.org\">www.modbus.org<\/a><\/p>\n<p><a href=\"https:\/\/www.ni.com\/pt-br\/innovations\">https:\/\/www.ni.com\/pt-br\/innovations<\/a><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O mundo da automa\u00e7\u00e3o \u2013 O protocolo Modbus Estamos come\u00e7ando uma nova coluna com informa\u00e7\u00f5es que s\u00e3o importantes para este atual mundo da automa\u00e7\u00e3o, que j\u00e1<span class=\"excerpt-hellip\"> [\u2026]<\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"pagelayer_contact_templates":[],"_pagelayer_content":"","_joinchat":[],"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2492","post","type-post","status-publish","format-standard","hentry","category-sem-categoria"],"_links":{"self":[{"href":"https:\/\/wireengenharia.com\/br\/wp-json\/wp\/v2\/posts\/2492","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wireengenharia.com\/br\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wireengenharia.com\/br\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wireengenharia.com\/br\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wireengenharia.com\/br\/wp-json\/wp\/v2\/comments?post=2492"}],"version-history":[{"count":1,"href":"https:\/\/wireengenharia.com\/br\/wp-json\/wp\/v2\/posts\/2492\/revisions"}],"predecessor-version":[{"id":2493,"href":"https:\/\/wireengenharia.com\/br\/wp-json\/wp\/v2\/posts\/2492\/revisions\/2493"}],"wp:attachment":[{"href":"https:\/\/wireengenharia.com\/br\/wp-json\/wp\/v2\/media?parent=2492"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wireengenharia.com\/br\/wp-json\/wp\/v2\/categories?post=2492"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wireengenharia.com\/br\/wp-json\/wp\/v2\/tags?post=2492"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}