Problema de comunicação Modbus TCP

Prezados,
Estou enfrentando problemas quando tento utilizar a biblioteca do prof.André Sarmento.
Estou tentando ler 9 variáveis analógicas e 8 digitais.
Quando carrego os exemplos que acompnham a lib, funciona muito bem.
O problema é quando entro com meu código.
Sempre aparecem as mensagens abaixo:

|com.serotonin.modbus4j.exception.ModbusTransportException: java.net.SocketTimeoutException: connect timed out|

Sem resposta da rede.

Estou utilizando a Emonlib. para ler sensores detensão e corrente. Estes somam 6 sensores. Estou colocando um período de atualização de 1 segundo, 450ms de timeout e 2 retry.
Desculpem os absurdos…é que sou novo nisso tudo.

Segue um pedaço do código:

void loop() {

//Call once inside loop() - all magic here

mb.task();

//Read each two seconds

/if (millis() > ts + 2000) {

ts = millis();

float TEMP = analogRead(A0);
temperatura = (TEMP * 5 / (1023)) / 0.01;
// Calculate all. No.of half wavelengths (crossings), time-out
emon1.calcVI(20, 2000);
//extract Vrms into Variable
float TCTC1   = emon1.Vrms;
//repete para os outros monitores
emon2.calcVI(20, 2000);
float TCTC2   = emon2.Vrms;
emon3.calcVI(20, 2000);
float TCG   = emon3.Vrms;
emon4.calcVI(20, 2000);
float TGGD   = emon4.Vrms;

emon5.calcVI(17, 100); 
float currentDraw = emon5.Irms; 



//Setting conversions

int MLACS1 = analogRead(A6);

int MLACS2 = analogRead(A7);
mb.Ists(SPDS, digitalRead(SPDS_ISTS0));//Sensor de porta

digitalWrite(ARF1, mb.Coil(ARF1_COIL0));//refletor 1

digitalWrite(ARF2, mb.Coil(ARF2_COIL1));//refletor 2

digitalWrite(CCTC1, mb.Coil(CCTC1_COIL2));//chaveia ctc 1

digitalWrite(CCTC2, mb.Coil(CCTC2_COIL3));//chaveia ctc 2

digitalWrite(SRN, mb.Coil(SRN_COIL4));//sirene

digitalWrite(LGGD, mb.Coil(LGGD_COIL5));//liga gerador



mb.Ireg(TEMP_IREG0, temperatura);

mb.Ireg(TCTC1_IREG1, TCTC1);

mb.Ireg(TCTC2_IREG2, TCTC2);

mb.Ireg(TCG_IREG3, TCG);

mb.Ireg(CCG_IREG4, currentDraw);

mb.Ireg(TGGD_IREG8, TGGD);

mb.Ireg(MLACS1_IREG6, MLACS1);

mb.Ireg(MLACS2_IREG7, MLACS2);

}
}

Ola Tiago tudo bem?

Precisa ver se a configuração do Datasource e Datapoints está correta.

Outra dica é que voce teste o Pool Modbus com outro software para ver se seu microcontrolador está realmente respondendo da forma correta.
sugiro que teste com esse:

https://www.modbustools.com/modbus_poll.html
é uma versão trial mas acredito que deva te ajudar no seu desenvolvimento.

Se funcionar com ele, com certeza ira funcionar no SCADABR.

Um abraço
Renne Takao

Valeu Renne! O problema era com os tempos de atualização.
Eles eram maiores do que o requerido pela própria Emonlib para processar as variáveis de tensão, corrente, potência e FP.

Está funcionando muito bem!

Parabéns Tiago! Mostre as alterações que fez para que o código funcionar. Muita gente aqui tem desejo de usar essa lib, mas não tem a minima noção de como fazer.

Prezado Wagner,
A Emonlib roda muito facilmente no Arduino.
Meu projeto é formado por 6 placas MEGA2560 que realizam a aquisição de quatro pares de sensores de corrente e tensão.
A Emonlib pega esses valores e faz todo o trabalho pesado via arduino. Depois eu somente configuro as variáveis com seus respectivos registradores utilizando Modbus IP.
Após programar os endereços de rede e Modbus e gravar na MEGA eu leio pelo ScadaBR da forma convencional, como se fosse um CLP.
Entendo que o código fonte falará mais do eu posso explicar e por isso estou à disposição para enviá-lo.
Meu problema era que ao carregar no Arduino, eu havia colocado uma amostragem de 200 e um tempo de 2000ms para a Emolib(no meu caso são 4 pares de sensores e assim tem emon1, emon2…emon4).
Quando ia para o ScadaBR colocava um tempo de varredura dos nós de apenas 3s e aí ele não conseguia ver o nó(arduino MEGA2560).

Tamo junto! Daqui a pouco mando o código aqui! Tenho certeza que a galera vai gostar.