Comunicação arduino com ScadaBR usando modbus IP

Bom dia!
Estou trabalhando em um projeto onde tenho que comunicar o arduino uno com o scadaBra usando protocolo modbus IP
alguém já tem alguma trabalho nesse ramos onde possa me fornecer exemplos de código configurando o arduino para se comunicar com o scadaBr usando um shield ethernet?

Desde já agradeço a Todos

ola Otto,

vc ja tem o Arduino com shield ethernet ou ainda é algo teorico?
minha sugestao de linha de trabalho seria vc trocar uns “packets” simples via ethernet primeiro, para dominar a parte “não-ScadaBR” primeiro.

em um segundo passo, programe o arduino + ethernet para enviar alguns dados para o “HTTP Receiver” (protocolo nativo do ScadaBR, basta fazer um “get” no http://IPDOSCADABR:8080/ScadaBR/httpds?VAR=VALOR ) - veja help no datasource HTTP Receiver. Assim vc elimina todos os problemas de rede como IP, firewall, dhcp etc. e deixa o caminho “preparado”.

por ultimo aí sim, iria concluir o trabalho com modbus IP.
vamos pegar os modbus-RTU e modbus-ASCII que ja existem e “portar” para TCP.

sobre a comunicacao basica em ethernet, tcp, ip etc. o recomendado seria estudar nos próprios tutoriais & foruns de Arduino, depois te ajudamos aqui a implementar o modbus.

nao conheço uma implementação pronta, mas o google pode surpreender.

existem ainda outras bibliotecas de Modbus (ex. freemodbus) mas nao necessariamente prontas para o Arduino.

um outro caminho 100% alternativo seria integrar o arduino via pachube e puxar de volta, via internet, para o scadabr. não é muito elegante num contexto industrial, mas seria divertido no minimo.

o q vc acha?

abç
Victor

Olá victor!
Eu me interessei muito pela primeira opção que vc me falou a do “Http Receiver”, pois meu principal objetivo é enviar dados do arduino para o scadaBR, e sim eu já possu um shield ethernet, onde eu posso encontrolar material para estudo do http reveiver e de como utiliza-lo com o arduino?
Desde já agradeço a ajuda

Olá Otto,

O “Http Receiver” é um listener GET/POST. Portanto, você deve definir um nome para variável na entrada de dados e seu tipo de dado.

Você pode testar a funcionalidade utilizando num computador um ScadaBR com um Http Publisher (Sender) e um Http Listener. Os dois são correlatos e você pode usar a sintaxe do pacote no seu arduino para fazer dele um broadcast das informações que precisa.

Um pouco de “sniffing” na rede e você conhece o formato do pacote.

Abraços
Diego Ferreira

Olá. Tenho um projeto que preciso fazer exatamente este procedimento de aquisição de dados usando O arduino, ethernet shield e ScadaBR

Porém estou tendo dificuldade para enviar os dados do arduino para o SCADABR. Não está funcionando.
Se alguém tiver algum código que já tenha testado e funcionou.
Estou usando como base os exemplos que já vem no arduino, porém não funcionaram… O exemplo do Webserver até funciona, porém o exemplo do Webclient(que é o que preciso para mandar a url com os dados) não funciona.

Grato

Oi Andrews,

podemos te ajudar mas antes vou pedir para vc detalhar bem os testes que fez:

  • seu programa no Arduino (ou pelo menos um link para ele)
  • que protocolo está usando no ScadaBR
  • como configurou o seu sistema…

não tenho ainda o Arduino com Ethernet Shield, mas de maneira geral o procedimento será

  1. aprender a fazer uma requisição do tipo GET com o Arduino (ou seja chamar uma URL do tipo http://seu-ip:8080/ScadaBR/httpds?valor=1000 )

  2. aprender a configurar o protocolo HTTP Receiver no ScadaBR

  3. acompanhar os pacotes se estão realmente trafegando e ajustar os datapoints conforme necessário

boa sorte, poste aqui seus avanços e problemas (lembrando sempre de dizer exatamente o que estava fazendo, e exatamente que mensagens aparecem)

abraço

Consegui fazer um teste com o http receiver no scadabr, mas encontrei um outro problema, não consigo acessar o scadabr de um outro dispositivo, ou seja eu instalei o scadabr no meu computador, mas quando tento acessar ele de um outro computador ou até mesmo do arduino não consigo, vocês sabem como faço para configurar o tomcat para ter acesso externo?

Desde já agradeço a ajuda

Consegui fazer o arduino comunicar com o Scadabr, um colega do outro forum Laboratório de Garagem me passou uma dica de usar Strings no código do arduino e deu certo!
Segue o código de exemplo para quem tiver o mesmo problema!

#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //endereço mac, pode ser este mesmo. Não tem problema caso você tenha apenas 1 arduino na rede
IPAddress ip(192,168,1, 177); // endereço do arduino na rede(exemplo)
byte server[] = { 192, 168, 1, 3 }; // Scadabr // Endereço do servidor à ser conetado, no meu caso o ScadaBR(exemplo)
EthernetClient client;
String a = “GET /ScadaBR/httpds?teste=”; // string que guarda o endereço no ScadabBr para onde enviarei a variável
int b; // variável
String c = " HTTP/1.0"; // complemento necessario para o funcionamento desta função http

void setup(){

Ethernet.begin(mac, ip); // conecta o cliente ao servidor
Serial.begin(9600);
}
void loop()
{

delay(100);

b = analogRead(A0); //leitura de um sensor de temperatura por exemplo

String codigo = a + b + c; //link contendo o endereço completo

client.connect(server,8080); // conceta com o servidor na porta 8080
client.println(codigo); // envia a string codigo que é o nosso link http junto com a variável do sensor
client.println(); // quebra de linha
client.stop(); // termina a conexão e após faz o looping novamente
}

Ottonpc, Para você ter acesso ao ScadaBr de Outro PC, este outro Pc deve estar conectado a mesma rede do Scadabr e você deve digitar no navegador o IP da máquina que roda o scadabr seguido da porta. Por exemplo http://192.168.1.3:8080/ScadaBR

Caso queira fazer um acesso externo, fora da sua rede doméstica, Tem algumas implicações, Tem que verificar se a porta 8080 do seu roteador está aberta p/ acesso externo, tem que verificar se seu ip é dinâmico ou Fixo, para que se possa fazer o acesso ao Scadabr. Explique melhor quais são os passos que você faz para acessar externamente para podermos te ajudar.

Valeu André!

Quando postar códigos, configure o formato de texto como “Plain Text”, assim podemos saber o que você inclui nos códigos =]


#include <Strings.h>

Abraços

Venho através deste agradeçer a todos pela ajuda, já estou conseguindo uma comunicação entre o arduino e o scadabr, agora estou com uma outra dúvida, consigo enviar algum comando do scadabr para o arduino via http?

Oi Otto,

Você está utilizando o HTTP Receiver certo? O ScadaBR possui um Publisher HTTP que faz a mesma função que foi criada pelo Andrews no Arduino, fazendo o ScadaBR funcionar como Server. O Publisher é um Cliente, assim, basta inverter o jogo.

O que precisa ser feito no arduino é criar um server para esperar conexão e tratar as entradas de GET e POST...

http://arduino.cc/en/Tutorial/WebServer

Talvez o Victor saiba uma maneira mais simples de fazer isso =]

Mas fica a dica - Publisher+WebServer no Arduino

O Publisher você vai encontrar na barra de menu do ScadaBR, ao lado dos eventos de manutenção. Clica no "?" do Publisher pra entender como usa =]

Abraços

Olá,

estou desenvolvento um projeto com o arduino Yún e gostaria de utilizar o ScadaBr para armazenar os dados que eu recebo de sensores acoplados a placa. Consegui encontrar um endereço que me possibilita ler as entradas analogicas e digitais do arduino, através da placa Wifi, tipo: "http://192.168.0.100/arduino/analog/2%20:%20analogRead(2)", que me retorna o valor de um LDR, tipo: "221";

Gostaria de saber como devo proceder para utilizar o HTTP Receiver para armazenar tal parâmetro e para me apresentar seu valor em tela. 

Tenho pouca experiência, por isso gostaria de receber qualquer ajuda. 

Muito Obrigado,
Gabriel Lima.