FreeMODBUS – Apresentação & Port

Aqui no portal Embarcados existem excelentes artigos sobre o protocolo de comunicação MODBUS, tais como os artigos do Carlos Márcio Freitas, que realizam a apresentação do protocolo de comunicação e o uso de ferramentas de diagnóstico e simuladores, vide “Protocolo Modbus: Fundamentos e Aplicações” e “Protocolo Modbus: Exemplos e Simuladores”.

FreeMODBUS

O FreeMODBUS é uma implementação gratuita e de código aberto do popular protocolo MODBUS, especialmente dedicado para sistemas embarcados. O MODBUS é um protocolo de rede popular no ambiente de produção industrial. Uma pilha de comunicação MODBUS requer duas camadas: O Protocolo de Aplicação MODBUS que define o modelo de dados e funções e uma camada de Rede. 

O FreeMODBUS suporta os modos de transmissão RTU/ASCII definidos na especificação de linha serial Modbus 1.0, também suporta MODBUS TCP definido no Modbus Messaging no TCP / IP. Ele está licenciado sob a licença BSD que permite seu uso em ambientes comerciais. A seguir temos as funções MODBUS que são atualmente suportadas:

  • Ler registro de entrada (0x04)
  • Read Holding Registers (0x03)
  • Escreva o registro único (0x06)
  • Gravar vários registros (0x10)
  • Ler / gravar vários registros (0x17)
  • Ler bobinas (0x01)
  • Escrever bobina única (0x05)
  • Escreva várias bobinas (0x0F)
  • Ler entradas discretas (0x02)
  • Informar ID do escravo (0x11)

O FreeMODBUS possui diversos “ports” e exemplos para diferentes microcontroladores, são eles:

  • Ports ASCII/RTU
    • FreeRTOS / STR71X
    • AVR ATMega8/16/32/128/168/169
    • Freescale MCF5235
    • TI MSP430
    • LPC214X
    • Z8 Encore! / Z8F6422
    • Win32
    • Linux / Cygwin
    • FreeRTOS / AT91SAM7X
    • HCS08
    • Atmel SAM3S
  • Ports TCP
    • Win32
    • lwIP/MCF5235
    • lwIP/STR71X

Requisitos de Hardware e Software para “Port”

Como visto no parágrafo anterior, no repositório do FreeMODBUS existe poucos microcontroladores suportados. Inclusive a família de microcontroladores Kinetis ARM Cortex-M0 que venho trabalhando. O FreeMODBUS possui em sua documentação explicando como deve ser feito o “port”. Antes de detalhar como realizar o “port” para um novo microcontrolador, é importante saber os seus requisitos. 

  • Aproximadamente 5 – 10 Kbytes de memória FLASH e 300 bytes de memória RAM.

Nota: O tamanho real depende das funções MODBUS configuradas. A função pode ser ativada / desativada usando o arquivo de cabeçalho mbconfig.h .

  • Uma UART com suporte para interrupção. Para conformidade padrão, 2 bits de parada são necessários para nenhum modo de paridade. 7 bits de dados são necessários para MODBUS ASCII
  • Um TIMER com uma resolução de pelo menos 750 microssegundos.
  • O FreeMODBUS permite trabalhar com ou sem um sistema operacional. 

Para os “ports” que venham ter um RTOS, se o RTOS contenha ou possua o recurso de Filas de eventos, tal recurso pode ser utilizado para evitar a espera ocupada na tarefa do MODBUS. 

Para sistemas rodando sem RTOS, uma abordagem baseada em pesquisa em combinação com uma variável global pode ser usada.

Realizando o “Port”

O “port” realizado foi o padrão de transmissão RTU para a Freedom Board KL25Z. O microcontrolador alvo presente na placa atende a todos requisitos descritos anteriormente.

Da maneira que organizando os arquivos dos projetos é bem simples realizar o “port” do FreeMODBUS, o mesmo contém camada de baixo nível onde é feito o acesso aos periféricos do microcontrolador (UART e Timer). Essa camada está presente no diretório port. Esse diretório possui quatro arquivos; port.h, portevent.c, portserial.c e porttimer.c

O arquivo port.h é onde contém as macros de uso geral/global para os arquivos que estão presente no diretório port.

Para “port” sem utilizar um sistema operacional não é necessário nenhuma alterações no arquivo portevent.c .

O arquivo portserial.c onde serão inseridos as funções de acesso a UART.

O arquivo porttimer.c é onde é configurado a funções de Timer do microcontrolador.

Diretório FreeMODBUS

O “port” feito para a Freedom Board KL25Z, foi feitos utilizando a Bibliotecas de Software para FRDM-KL25Z que venho apresentado aqui no Embarcados.

Para a funcionalidade de Timer, “port” implementado utiliza o periférico PIT – Periodic Interrupt Timer para FRDM-KL25Z, que possui um artigo detalhando o seu funcionamento. 

A implementação da Serial é utilizado o UART1 – Universal Asynchronous Receiver / Transmitter.

A aplicação de demonstração é baseada no exemplo de implementação “bare metal” que está presente do diretório do projeto (/demo/BARE/demo.c).

Conclusão 

O FreeMODBUS é uma ótima alternativa de implementação para o MODBUS para ser empregado em sistemas embarcados. O mesmo oferece suporte aos modos de transmissão RTU, ASCII e TCP / IP.

O “port” do FreeMODBUS implementado para a Freedom Board KL25Z está no GitHub.

O que você achou? Você trabalha ou já trabalhou com FreeMODBUS? Deixe o seu comentário a abaixo.

Referência 

https://github.com/evandro-teixeira/FreeModbus_KL25Z
https://github.com/nucleron/freemodbus-v1.5.0

Imagem de destaque: https://wiki.teltonika.lt/wiki/images/thumb/4/4d/Configuration_examples_modbus_logo.png/800px-Configuration_examples_modbus_logo.png

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Software » FreeMODBUS - Apresentação & Port
Comentários:
Notificações
Notificar
guest
0 Comentários
Inline Feedbacks
View all comments
Talvez você goste:

Séries

Menu