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.
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;
/**
*
*/
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;
}
}
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:
ou
**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)**
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.