Erro no Driver Modbus Serial na versão do ScadaBR 1.1.0-RC do Branches

Augusto

Poderia compartilhar a classe SerialPortWrapperImpl ?
A classe que eu encontrei em: https://github.com/IOT-DSA/dslink-java-modbus/blob/master/src/main/java/modbus/SerialPortWrapperImpl.java não possui todos os argumentos que voce utiliza.

Boas Carlos,

Claro que sim.
Caso necessite de mais alguma coisa é só dizer.

Aqui esta a classe SerialPortWrapperImpl completa:

package com.serotonin.mango.rt.dataSource.modbus;

import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import com.serotonin.modbus4j.serial.SerialPortWrapper;

/**
*

  • This class is not finished
  • @author Terry Packer

*/
public class SerialPortWrapperImpl implements SerialPortWrapper {
private SerialPort serialPort;
private String commPortId;
private int baudRate;
private int flowControlIn;
private int flowControlOut;
private int dataBits;
private int stopBits;
private int parity;
private int timeOutComPort;

public SerialPortWrapperImpl() {
	super();
}

public SerialPortWrapperImpl(String commPortId, int baudRate,
		int flowControlIn, int flowControlOut, int dataBits, int stopBits,
		int parity, int timeOutComPort) {
	this.commPortId = commPortId;
	this.baudRate = baudRate;
	this.flowControlIn = flowControlIn;
	this.flowControlOut = flowControlOut;
	this.dataBits = dataBits;
	this.stopBits = stopBits;
	this.parity = parity;
	this.timeOutComPort = timeOutComPort;
}

public String getCommPortId() {
	return commPortId;
}

public void setCommPortId(String commPortId) {
	this.commPortId = commPortId;
}

public void setBaudRate(int baudRate) {
	this.baudRate = baudRate;
}

public void setFlowControlIn(int flowControlIn) {
	this.flowControlIn = flowControlIn;
}

public void setFlowControlOut(int flowControlOut) {
	this.flowControlOut = flowControlOut;
}

public void setDataBits(int dataBits) {
	this.dataBits = dataBits;
}

public void setStopBits(int stopBits) {
	this.stopBits = stopBits;
}

public void setParity(int parity) {
	this.parity = parity;
}

@Override
public void close() throws Exception {
	if (serialPort != null) {
		serialPort.close();
		serialPort = null;
	}
}

@Override
public void open() throws Exception {
	// System.out.println(commPortId);
	CommPortIdentifier portIdentifier = CommPortIdentifier
			.getPortIdentifier(commPortId);

	// System.out.println(commPortId);
	CommPort commPort = portIdentifier.open(commPortId, timeOutComPort);

	if (commPort instanceof SerialPort) {
		serialPort = (SerialPort) commPort;
		try {
			serialPort.setSerialPortParams(this.getBaudRate(),
					this.getDataBits(), this.getStopBits(),
					this.getParity());
			serialPort.setFlowControlMode(this.getFlowControlIn()
					| this.getFlowControlOut());
		} catch (Exception e) {
			e.printStackTrace();
		}
		// System.out.println("Open " + this.commPortId + " sucessfully !");
		// return serialPort;
	} else {
		// System.out.println("aaaaaaaaaaaa");
	}
}

@Override
public InputStream getInputStream() {
	InputStream in = null;
	try {
		in = serialPort.getInputStream();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

	return in;
}

@Override
public OutputStream getOutputStream() {
	OutputStream out = null;
	try {
		out = serialPort.getOutputStream();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

	return out;
}

@Override
public int getBaudRate() {
	// TODO Auto-generated method stub
	return this.baudRate;
}

@Override
public int getStopBits() {
	// TODO Auto-generated method stub
	return this.stopBits;
}

@Override
public int getParity() {
	// TODO Auto-generated method stub
	return this.parity;
}

@Override
public int getFlowControlIn() {
	// TODO Auto-generated method stub
	return this.flowControlIn;
}

@Override
public int getFlowControlOut() {
	// TODO Auto-generated method stub
	return this.flowControlOut;
}

@Override
public int getDataBits() {
	// TODO Auto-generated method stub
	return this.dataBits;
}

}

1 curtida

Estou com o mesmo problema. O data point fica : Valor do ponto pode não ser confiável.

Alguém conseguiu resolver ?

Boas,

Se estiveres a trabalhar no código fonte do ScadaBR 1.1 o driver de Modbus possui um erro na classe “SerialPortWrapperImpl”, se copiares o código que coloquei no poste acima e substituires o código fonte por este nesta classe esse aviso vai desaparecer.

qualquer duvido é só dizeres.

Jcassa

Segui os passos do Augusto e deu certo.
Aparecem algumas mensagens de erro no catalina.out mas isso ainda devo arrumar. Nada que impeça o TX e RX pela porta serial.

Se resolver a questão das mensagens de erro poderia partilhar a sua correcção.

Obrigada,

Olá amigos,

Então, eu estava utilizando a versão 1.0 , e um conversor USB/485, notei que ao adicionar o segundo dispositivo USB, a comunicação com o SCADA é parada.

Boas,

Sim o problema é esse mesmo quando temos 1 só porta serial trabalha normalmente, mas se adicionarmos mais do que uma a comunicação para.

Se realizar esta correcção o problema da comunicação fica resolvido.
No meu caso não utilizava conversor mas um software que cria portas serial virtuais no servidor que depois se convertiam em TCP/IP para poder comunicar numa rede Ethernet.

O driver de Modbus na versão 1.0 acho que é ligeiramente diferente do driver da versão 1.1.0. Ma existe sempre a possibilidade de Actualizar todas as classes deste driver na versão 1.0 com o driver da versão 1.1.0.

Abraço,

Olá,
Para resolver o problema só preciso substituir a classe SerialPortWrapperImpl? Preciso compilar ela ?

Boa noite,
estou tentando resolver este problema no scadabr1.1, mas não consegui localizar esta pasta,
fica dentro do diretório do scadabr?Desculpe a ignorância, poderias em informa esse passo a passo, obrigado!

epinheiro

O diretório é: \src\com\serotonin\mango\rt\dataSource\modbus
Alterei o arquivo ModbusSerialDataSource.java conforme mensagem do Augusto_Casais em ago/17.
Adicionei o arquivo SerialPortWrapperImpl.java conforme mensagem do Augusto_Casais em nov/17.
Ainda não resolvi os problemas informados por mim em 20/03/17. Percebi que com o tempo a comunicação cessa. Espero resolver o quanto antes…

Oi Carlos,

Conseguiu resolver o problema que detectou no driver?

Augusto

Ainda não, porém, está na minha fila de prioridades.

Carlos

Quando tiver novidades avise.

Vou tentar também ver se consigo verificar qual é a origem do problema.

Augusto ola, estou precisando de uma ajuda, estou tendo os mesmos problemas com a comunicação serial modbus, mas não consegui fazer a correção citada por vc acima, e desta forma nem mesmo com uma seria consegui resultados, vc tem a versão alteradas destas classes para download??

Amigo conseguiu resolver o problema da comunicação ModBus Serial?? Estou com esse problema e não obtive sucesso, pode ajudar??

Consegui utilizando a versão 1.0CE

Boa tarde senhores,
Atualmente estou com problema para utilizar o Modbus serial em minha aplicação. Utilizo a versão 0.9.9 do ScadaLTS e na recente atualização (2.0.0) não teve a correção deste problema. Já tentei fazer as alterações conforme os colegas acima no eclipse, porém ao Buildar, ela compila todo o código e acaba encontrando diversos problemas em outras classes e não compila.
Os senhores tem alguma ideia, caminho ou forma de resolver o problema do Modbus serial? Sem que seja utilizar um conversor?

Você pode utilizar as seguintes opções:

  1. Instale e use o software mbusd, seguindo as orientações constantes no tópico: Imagem ScadaBR RPi usando MySQL

ou

  1. Instale e use o software socat: sudo apt-get install socat
    Use o comando substituindo suas informações e portas, etc.:

**a. sudo socat tcp-listen:54321,reuseaddr /dev/ttyUSB0,b9600,raw,echo=0

b. Exposing serial port for connections from remote computer:
socat TCP4-LISTEN:8890 /dev/ttyUSB0,raw,echo=1,crnl
(two way connection between local port 8890 and /dev/ttyUSB0)

or

c. Forward /dev/ttyUSB0 to remote machine:
socat TCP:10.10.100.254:8899 /dev/ttyUSB0,raw,echo=1,crnl
(two way connection between server at 192.168.1.88 port 5331 and /dev/ttyUSB0)**

Fonte: https://raspberrytips.com/raspberry-pi-firewall/

Obrigado pela resposta. Irei fazer os procedimentos acima esta semana. Passo uma resposta se for positiva ou negativa, mas de qualquer forma obrigado pela ajuda.
Edit: Pelo que estava vendo, seu tópico é relacionado com a utilização do RPi, porém em minha aplicação tenho apenas o CLP + PC.