estou tentando ler uma porta serial de uma balanca rodoviaria, utilizando java,
mas nao consigo, utilizei o virtualSerialPort para ver o que trafegava na rede,
entrei em contato com a fabrica, mas eles so tem exemplos em dephi e VB,
e fica meio dificil de traduzir, jah que o java utiliza maquina virtual, e os exemplos
chamam funcoes direto do sistema operacional.
alguem podeira me passar os passos resumidos de como capturar as informacoes ?
isso vai ser interessante… vou acompanhar e depois tentar fazer algo. eu ja trabalhei com serial mais foi em delphi.
descobri umas coisas a mais,
consegui fazer a comunicacao com a balanca atravez de uma dll, fornecida pela fabricante da mesma, utilizando a biblioteca JNA, onde eh simples fazer, mas nao eh o interessante, pois provavelmente nao seja multiplataforma,
agora estou lendo este post http://www.viamais.net/blog/index.php?s=rxtx , se conseguir posto mais coisas.
import com.sun.jna.Native;
import com.sun.jna.win32.StdCallLibrary;
public class JNATeste {
public static void main(String[] args) {
JNATeste h = new JNATeste();
// carregando a .dll
User32 us = (User32) Native.loadLibrary(User32.class);
us.MessageBoxA(0, "MSG", "Titulo", 0);
}
// parte principal. Voce deve conhecer a biblioteca, seus métodos, o conjunto tipo/parametro e retorno
interface User32 extends StdCallLibrary {
public int MessageBoxA(int hwnd, String text, String caption, int type);
}
}
É só tomar cuidado com a localização da biblioteca (sua .dll), a conversão de tipos.
Ou então tentar usar JNI, esta fico te devendo.
Site:
https://jna.dev.java.net/
sim, quanto a dll eu consegui, desta forma:
interface MylibComp
import com.sun.jna.Library;
import com.sun.jna.platform.win32.WinDef.HWND;
public interface MyLibComp extends Library {
//coloca as assinaturas do metodos contidos na DLL que ira ser carregada
public double lbCapturarPeso(int port);
public double lbZerarPeso(int porta);
public boolean lbReiniciarBalanca(int porta);
void lbExibirUltimoErro(HWND handle);
}
classe main:
import com.sun.jna.Native;
import javax.swing.JOptionPane;
public class Main {
public static void main(String[] args) {
//constante LB_FALHA, que equivale a 2 elevado a 32 (0xFFFFFFFF)(4.294967295 E9).
//aqui carrega a bibliotaca para a classe MylibComp, da dll colocada no disco C
MyLibComp m = (MyLibComp) Native.loadLibrary(
"c:\\Balanca.dll", MyLibComp.class);
//usando os metodos,
JOptionPane.showMessageDialog(null, m.lbCapturarPeso(1), "ler peso com 1", JOptionPane.INFORMATION_MESSAGE);
JOptionPane.showMessageDialog(null, m.lbReiniciarBalanca(1), "reiniciar bal", JOptionPane.INFORMATION_MESSAGE);
JOptionPane.showMessageDialog(null, m.lbZerarPeso(1), "zerar peso com 1", JOptionPane.INFORMATION_MESSAGE);
}
}
funcionou, so tenho q tirar um tempo pra testar se funciona em outros SO, o que provavelmente nao,
e a fabrica nao relata nada sobre outras plataformas,
Tenta usar algo do tipo:
// identifica o sistema operacional
String sistemaOperacional = System.getProperty("os.name");
if (sistemaOperacional.contains("Windows")) {
System.out.println(sistemaOperacional);
System.out.println("Carregando biblioteca para Windows (.dll): " + sistemaOperacional);
//... sua logica aqui
//... sua logica aqui
} else if ( sistemaOperacional.contains("Linux") ) {
System.out.println(sistemaOperacional);
System.out.println("Carregando biblioteca para Linux (.so): " + sistemaOperacional);
//... sua logica aqui
//... sua logica aqui
} // fim de else
}// fim de main
Windows, Linux, Mac.
Somente testei com Windows, nunca com outros SO.
Vale a tentativa.
voce tah certo Anderson, vai funcionar,
vale, com ceteza vale a pena, e se possivel vou utilizar como recomendação linux, mas antes vou ter que ver com a fabrica =(, se pelo menos passar o codigo, ai talvez recompilasse para linux, mas vamos aguardar…
Estou tentando fazer a comunicação com as balanças rodoviárias da Toledo, e estou com o mesmo problema.
Alguém poderia me informar ou me passar um link com as dll’s da balança pra poder fazer minhas classes??
Obrigado a todos, desde já.
Qual modelo da sua balança?