Sem resposta de Rede

Boa tarde.
Criamos uma rede Ethernet e usando um Switch para comunicação com o Arduino e o ScadaBR.
Quando pingavamos o Arduino no prompt tudo normal, 100% de resposta.
Mas o Scada exibia “Sem Resposta de Rede”. Por que?

O exemplo que usei foi esse http://blog.usinainfo.com.br/comunicando-o-arduino-com-o-scadabr-atraves-do-protocolo-tcpip/

O Código do Arduino é esse

//Inclusão das bibliotecas do Projeto
#include <SPI.h>
#include <Ethernet.h>
#include <Modbus.h>
#include <ModbusIP.h>
#include <Ultrasonic.h>
//--------------------
//Defines do projeto
#define trig 8
#define echo 9
#define Pi_aprox 3.1415927
#define Num_Medidas_Distanc 100
#define Circulo
#define CirculoRaio 0.069 //[m]
#define Tank_A 0.2065 //[m]
#define TankRaioMenor 0.054 //[m]
//---------------------
//Criação dos Input Register, os offsets ja foram definidos
const int VOLUME_RESTANTE = 0;
const int VOLUME_REDUZIDO = 1;
const int VAZAO_A = 2;
const int VAZAO_B = 3;
//-----------------
//Criação de Objetos;
ModbusIP mb;
Ultrasonic ultrasom(trig,echo);
//------------------
//Variáveis
float AreaPerfilReservatorio;
float VolumeTotalRetirado;
float VolumeRestante;
long tempoinicio = 0;
long intervalo = 1000;
unsigned long tempoatual;
unsigned long cloopTime;
volatile int frequencia_fluxoA;
volatile int frequencia_fluxoB;
unsigned char MedeFrequenciaA = 2;
unsigned char MedeFrequenciaB = 3;
unsigned int litrosPminutoA;
unsigned int litrosPminutoB;
float distanciaT1;
float distanciaT2;
float VariacaoDistancia;
float VariacaoVazao;
float VolumeEmLitros;
//-----------------------
//Funções
float CalculaAreaPerfilReservatorio(void);
float MedeDistanciaEmMetros(void);
float MediaDistancias(void);
//--------------------

float CalculaAreaPerfilReservatorio(void)
{
    float AreaCalc;
    AreaCalc = Pi_aprox * pow(CirculoRaio,2);
    return AreaCalc;    
}

float MediaDistancias(void)
{
    int i;
    float SomaMedidas;
    float Media;

    SomaMedidas = 0.0;
    for(i=0;i< Num_Medidas_Distanc;i++)
    {
        SomaMedidas = SomaMedidas + MedeDistanciaEmMetros();
        return Media;
    }
}

float MedeDistanciaEmMetros(void)
{
    float cmMsec,DistMetros;
    long microsec = ultrasom.timing();

    cmMsec = ultrasom.convert(microsec,Ultrasonic::CM);
    DistMetros = (cmMsec /100.0);
    return DistMetros;
}

void flow()
{
    frequencia_fluxoA++;
    frequencia_fluxoB++;
}

void setup() 
{
    //Configura os parametros da Rede
    byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
    byte ip[] ={10, 1, 1 ,2};
    mb.config(mac,ip);
    //----------------
    //Adiciona os Input Registers
    mb.addIreg(VOLUME_RESTANTE);
    mb.addIreg(VOLUME_REDUZIDO);
    mb.addIreg(VAZAO_A);
    mb.addIreg(VAZAO_B);
    //------------------
    AreaPerfilReservatorio = CalculaAreaPerfilReservatorio();
    VolumeTotalRetirado = 0.0;
    pinMode(MedeFrequenciaA,INPUT);
    pinMode(MedeFrequenciaB,INPUT);
    attachInterrupt(0,flow,RISING);
    attachInterrupt(1,flow,RISING);
    sei();
    tempoatual = millis();
    cloopTime = tempoatual;
}

void loop() 
{
    mb.task();
    tempoatual = millis();
    distanciaT1 = MediaDistancias();
    if(tempoatual - tempoinicio > intervalo)
    {
        distanciaT2 = MediaDistancias();
        tempoinicio = tempoatual;
    }
    VariacaoDistancia = ((distanciaT1 - distanciaT2)/100); //[m]
    VariacaoVazao = (AreaPerfilReservatorio * VariacaoDistancia);
    VolumeTotalRetirado = VolumeTotalRetirado + VariacaoVazao;
    VolumeEmLitros = (VolumeTotalRetirado * 1000.0);

    VolumeRestante = ((Pi_aprox * (Tank_A - MedeDistanciaEmMetros()))/3)*((pow(TankRaioMenor,2)+ TankRaioMenor * CirculoRaio + pow(CirculoRaio,2)));


    if(tempoatual>=(cloopTime +1000))
    {
        cloopTime = tempoatual;
        litrosPminutoA = (frequencia_fluxoA / 7.5);
        frequencia_fluxoA = 0;
        litrosPminutoB = (frequencia_fluxoB / 7.5);
        frequencia_fluxoB = 0;
      
    }  
    mb.Ireg(VOLUME_RESTANTE,VolumeRestante);
    mb.Ireg(VOLUME_REDUZIDO,VolumeEmLitros);
    mb.Ireg(VAZAO_A,litrosPminutoA);
    mb.Ireg(VAZAO_B,litrosPminutoB);
}

Também estou com o mesmo problema mas com modbus serial pela com3 com arduino mega.
O arduino até fica piscando a comunicação mas tenho a mesma resposta de que não foi encontrado o nós e quando vou ler dados dá “sem resposta de rede”.

Alguém teria uma ideia do que seja !

Boa tarde amigo. Sou leigo e cada caso é um caso, mas estava passando por esse mesmo problema do ScadaBR não encontrar nós. Eu estava usando delay() e escrevendo na porta Serial, depois que pedi ajuda aqui e um colega aqui do fórum me orientou eu removi isso e o Scada encontrava nó já no começo da pesquisa.

Pessoal, eu uso o arduino e o ESP por wifi, ethernet e serial, e não tenho problemas em nenhum deles, verifique o Timeout (ms), o scada por padrão faz duas requisição e aguarda 500ms, já usei este código da usinainfo e de em vez em quando a requisição do scada calha de acontecer no momento do processamento de outras tarefas, ai vão precisar ajustar o timeout, em todas as situação que passei sempre tive problemas com isto.

1 curtida

Obrigado, Kleber, por ajudar.

Boa tarde Kleber.
Desculpe a demora para responder. Entrei de férias na faculdade e acabei deixando o projeto de lado. Mas agora estou voltando com ele.
Muito Obrigado por responder. Vamos testar aqui e se der certo eu aviso.