Durante algum tempo tentei implementar o protocolo Modbus RTU em microcontrolador, porem devido a uma limitação do compilador que uso não foi possível implementar, o compilador transforma internamente variáveis em hexadecimal ou numerais decimais para codificação ASCII. O protocolo Modbus ASCII também não foi possível, pois o compilador não aceita caracteres alfabéticos em variáveis (A-F ASCII que compõem uma representação de valor hexadecimal).
Acredito ser esta uma limitação de vários compiladores para microcontroladores, pois a transformação interna de numerais decimais para o padrão ASCII e necessária para o LCD o que facilita o uso, a mesma transformação interna e feita para a função SERIAL OUT.
Baseado no conhecimento que tive em tentar aplicar o Protocolo Modbus, desenvolvi um protocolo simples em ASCII para microcontroladores (escravo) já em funcionamento em Hyper terminal com as seguintes características:
1 - Sera de uso livre e gratuito.
2- Método de pergunta (mestre-PC) e resposta (escravo).
3- Trabalha apenas com números.
3 - Suporta 9 escravos, e 98 tags por escravo
4 - Fácil de implementar, acompanhara um codico fonte de exemplo que pode ser transportado para Linguagem C ou Basic.
5- E aplicável na maioria dos compiladores. (Incluindo o LDMicro ladder, embora não sei se todo o protocolo possa ser aplicado, pois conheço pouco esse compilador).
6- Possui 4 funções composta de Leitura de saídas digitais, entradas digitais e analógicas, escrita em saída digital, registradores (setpoints) e PWM.
Devido ao escravo apenas responder quando feita uma pergunta do mestre, não ha possibilidade de congestionamento da rede e as perguntas e respostas endereçadas evitam o truncamento de informações.
Nesta imagem abaixo tem um modelo e 3 exemplos do protocolo:
http://postimage.org/image/pd078vq5l/
O codico HEX gerado da aplicação do protocolo para um microcontrolador teve o tamanho de 1.4K ocupando pouco mais de 16% da memoria total de um PIC 16F877.
O objetivo desse post e desenvolver o protocolo no SCADABR, eu não tenho conhecimento de programação em Java e precisaria de uma colaboração, a implementação no software iria consistir no seguinte.
1-Envio de comandos em atualização por tempo.
2-Interpretar os 3 últimos números ASCII que compõem o valor do PWM, entradas analógicas e setpoint.
3-Data Point com escrita de valor variável (0-255)
4-Data source do tipo Byte, onde seria possível uma leitura múltipla de 8 saídas ou entradas digital (no momento o protocolo esta em leitura unica). Os valores da soma dos Bits de saída sera em numeral (0-255) e não em hexadecimal.
5- Dois alertas de erro, como a cada pergunta deve haver uma resposta, caso não haja resposta a uma pergunta do mestre, o mestre deve enviar um codico (função 0 endereçada) caso haja resposta a função 0, o erro sera codico incorreto, caso não haja resposta, sera mensagem de escravo off-line.
Qualquer duvida estou a disposição para responder,.
Aguardo cometários
Rafael