Protocolo de Comunicação STX-ETX

Em agosto de 2019 publiquei o artigo “FreeMODBUS – Apresentação & Port” onde apresentei uma breve introdução sobre o Modbus, FreeModbus e um “port” que desenvolvi para a placa  NXP Freedom Board KL25Z. Porém, o protocolo Modbus para algumas aplicações, pode trazer um excesso de complexidade desnecessária. Por exemplo, aplicações simples entre mestre-escravo ponto a ponto. Como alternativa de protocolo de comunicação mais simples temos o padrão STX-ETX.

O padrão STX-ETX, trata-se de um protocolo flexível e fácil de implementação dentro do padrão de sistema de segurança presentes no mercado. É um protocolo orientado a caractere, segmentação por delimitadores de dados e comprimento de frames variáveis.

Nota I: Infelizmente na minha pesquisa para escrever esse artigo não encontrei informação específica sobre a teoria desse padrão. Por conta disso vou apenas concentrar na implementação.

Nota II: Por se tratar de protocolo flexível e amplamente utilizado, existe bastante variações. A implementações que irei apresentar neste artigo, é algoritmo que costumo utilizar em meus projetos.

 

Implementação do Protocolo de Comunicação STX-ETX

 

As mensagens do protocolo de comunicação STX-ETX são formados por frames (conjunto de byte que forma a mensagem). O frame é divido em três grupos; 

Cabeçalho da mensagem (Message Header): onde é composto pelos bytes de sincronismo (SYN) e o byte STX. Esse conjunto de bytes tem como objetivo sinalizar o envio de um novo frame.

Conteúdo da mensagem (Message Content): para a implementação que desenvolvi o conteúdo da mensagem é formada por;

  • MSG Byte Number: Número de byte que é compõem o MSG Data[ n ], que varia de zero a quatro bytes.
  • Command / Status: é número do comando ou número registro, para as mensagens enviadas pelo master, as mensagens de retorno do Slave este byte é utilizado como status, para notificar master se recebimento da mensagem. 
  • MSG Data [ ]: bytes destinado ao conteúdo da informação.
  • Checksum: é o código usado para verificar a integridade de dados transmitidos.

Byte ETX: é byte que sinaliza o fim do frame. 

A seguir temos figura que ilustra a composição do frame da mensagem:

 

O Protocolo de Comunicação STX-ETX

Frame da Mensagem

 

Implementação

 

A implementação desenvolvida é dívida entre Master (mestre) e Slave (escravo). O algoritmo desenvolvido para Master, é uma aplicação desktop. Essa aplicação contém o algoritmo do protocolo e a interface de interação com o usuário, essa interface é simples baseada em terminal, onde permite que o usuário construa a mensagem a ser enviada ao dispositivo Slave. 

A seguir temos o código fonte do master onde contém o algoritmo que constrói a mensagem, o restante do código fonte do master pode ser consultado no Github.

 

 

 

O algoritmo desenvolvido para Slave é uma aplicação embarcada dedicada a microcontroladores. A implementação conta com a utilização do FreeRTOS, com isso o processo foi dividido em duas Task (tarefas). 

A primeira Task é “STX ETX RX” que tem como responsabilidade processar os dados proveniente da interrupção da UART. Ela reconstrói a mensagem e checa se o conteúdo está íntegro, uma vez que a mensagem é válida esse encaminhada para as camadas da aplicação.

A segunda Task é “STX ETX TX” que tem como atribuição preparar e formata a mensagem a ser enviada ao Master. 

A seguir temos o código fonte do Slave onde contém o algoritmo que constrói e processa a mensagem, o restante do código fonte do Slave pode ser consultado no Github.

 

 

Demonstração


A aplicação de demonstração para o protocolo de comunicação STX-ETX é bem simples, consiste em:

  • Master preparar e envia comandos para o Slave.
  • O Slave por sua vez recebe os comandos, processa e toma as ações de acordo com comandos recebidos. Segue a tabelas com os comandos:

 

Master

MSG

Command

Data

Set LED Green

1

Off: 0 | On: 1

Set LED Blue

2

Off: 0 | On: 1

Get Status Button

3

NA

Slave

MSG

Status

Data

Set LED Green

Ok: 1 | Fail: 0

NA | Cod. Error

Set LED Blue

Ok: 1 | Fail: 0

NA | Cod. Error

Get Status Button

Ok: 1 | Fail: 0

Value Button | Cod. Error

 

Como dito anteriormente a aplicação master é desenvolvida para desktop. Ela interage com o usuário para montar as mensagens a ser enviada para o Slave. A seguir temos algumas imagens da interface do usuário com alguns comandos enviados.

 

Comando para acionar o LED Azul

Comando para acionar o LED Azul

 

O Protocolo de Comunicação STX-ETX

Comando para acionar o LED verde

 

O Protocolo de Comunicação STX-ETX

Comando para ler o status do User Button

 

A aplicação desenvolvida para o Slave, é um firmware para STM32F0DISCOVERY, trata-se de kit de desenvolvimento para o microcontrolador STM32F0 que por sua vez é baseado arquitetura ARM Cortex-M0. Os comandos propostos para a aplicação limitam-se em acionar os LED’s presente na STM32F0DISCOVERY e ler o status do USER Button. A seguir temos figura que ilustra a arquitetura do software presente do Slave.

 

Diagrama da aplicação de demonstração

Diagrama da aplicação de demonstração

 

O algoritmo do Slave consiste em ler os dados recebidos pelo barramento serial (UART), reconstruir a mensagem e tomar as ações de acordo com as mensagens recebidas.

 

 

 

Conclusão

 

O protocolo de comunicação STX-ETX é uma boa alternativa para projetos mais simples que necessitam de uma comunicação ponto a ponto entres Master e Slave. É um padrão de fácil implementação.

O que você achou? Você trabalha ou já trabalhou com o protocolo de comunicação STX-ETX? Deixe o seu comentário a abaixo.

 

Saiba Mais

FreeMODBUS – Apresentação & Port

Protocolo Modbus: Fundamentos e Aplicações

Criando seu próprio shell para sistemas embarcados

 

 

Referência

 https://github.com/evandro-teixeira/protocolo_stx_etx

 

Sem licença

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

Comunicações » Protocolo de Comunicação STX-ETX
Comentários:
Notificações
Notificar
guest
4 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Francis David
Francis David
05/08/2020 23:32

Facil e digo que até intuitivo, comecei a desenvolver um protocolo para uma arquitetura master/slave não tinha conhecimento dessa, entretanto, o que fiz é muito parecido com o que foi descrito:
STX | ID | VALUE | CRC | ETX
Obrigado por compartilhar.

Evandro Teixeira
Evandro Teixeira
Reply to  Francis David
06/08/2020 12:55

Francis David fico feliz em saber que você gostou do artigo.
Conforme o Jeu Tonete apontou em seu comentário, existe alguns pontos a serem melhorados no algoritmo.

Jeu Tonete
Jeu Tonete
15/05/2020 09:00

Ótimo artigo, parabéns. Utilizo um protocolo semelhante a esse há algum tempo. O que difere é o que não utilizo o STX-ETX no header e final do frame. Funciona muito bem em comunicações digitais assíncronas, inclusive uso na comunicação entre módulo Bluetooth e microcontrolador. Vale ressaltar duas coisas: 1- O tamanho máximo de dados que pode ser trafegado nesse protocolo é 255 (máximo valor do MSG byte number) e precisa ser filtrado quando recebido para não estourar os vetores de recepção. 2- É válido comentar sobre o timeout na recepção que você implementou. Sem ele é muito fácil perder o… Leia mais »

Talvez você goste:

Nenhum resultado encontrado.

Séries

Menu