ERROR al leer puerto serial con JAVA
Saludos a todos, mi duda es la siguiente:
Tengo una aplicación en JAVA que lee desde el puerto serial el peso del un vehículo proporcionado por una bascula la cual posee un indicador digital del peso, y de dicho indicador sale un cable que se comunica con la PC a treves de puerto serial.
La mayoría de la mayoría de las veces lee bien, incluso dura horas trabajando excelentemente.. Peero aveces no lee el puerto es como si no supiera que esta hay, cuando surge este error, cierro la aplicación y la vuelvo abrir y nada, la solución para que siga leyendo el puerto ha sido REINICIAR la pc.
No tengo ni la más mínima idea de este error pues no sale seguido, si alguien me pudiera ofrecer alguna sugerencia gracias..
Utilizo la libreira Giovynet y el sistema operativo es Windows.
import giovynet.nativelink.SerialPort;
import giovynet.serial.Baud;
import giovynet.serial.Com;
import giovynet.serial.Parameters;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class PuertoIngreso {
//variables que uso para interacturar con el Puerto
List<String> listar;
SerialPort puerto = new SerialPort();
Com com1;
//Esta mascara la uso porque algunas veces lee estos caracteres raros de la bascula y se lo puse para cuando los lea los
//convierta a ""
Pattern p=Pattern.compile("[ÉÞþÓó$$&Â(æA`à@ÿÌ]");
public PuertoIngreso() {
try {
listar = puerto.getFreeSerialPort();
System.out.println(listar);
if (listar!=null&&listar.size()>0) {
for (String free : listar) {
System.out.println("Free port: "+free);
}
}//if
Parameters set = new Parameters();
set.setPort("COM1");
set.setBaudRate(Baud._2400);
set.getByteSize();
com1 = new Com(set);
}//try
catch (Exception e)
{
// ESTE ES LA EXEPCION QUE SE LANZA CUANDO NO CONSIGUE EL PUERTO
System.out.println("Exception 1" +e +" \n "+ e.getCause() + "\n" +e.getLocalizedMessage());
JOptionPane.showMessageDialog(null, "No se Consigue el puerto", "ERROR", JOptionPane.ERROR_MESSAGE);
//eset codigo lo puse en la catch para que al lanzar la excepcion cierre el puerto
try{
com1.close();
}catch(Exception es)
{
System.out.println(es);
}
}//catch
//Este for lo puse porque con las practica vi que requería aproximadamente de este numero de repeticiones
//para leer el peso
for(int a=0 ; a<=14; a++){ try
{
{
caracter = com1.receiveSingleString();
recibido += caracter;
Matcher m=p.matcher(recibido);
peso=m.replaceAll("");
}
}
catch(Exception es)
{
System.out.println("Exception 2 " + es);
//eset codigo lo puse en la catch para que al lanzar la excepcion cierre el puerto
try{
com1.close();
}catch(Exception est)
{
System.out.println(est);
}
}
}
//por ultimo al irse a la ventana que mostrara los pesos cierro el puerto para que no lo //deje abierto
try{
com1.close();
}catch(Exception es)
{
System.out.println(es);
}
MiVentana ventana=new MiVentana(parametros);
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CL OSE);
ventana.setSize(1100, 600);
ventana.setVisible(true);
}
}
Gracias por su ayuda
Tengo una aplicación en JAVA que lee desde el puerto serial el peso del un vehículo proporcionado por una bascula la cual posee un indicador digital del peso, y de dicho indicador sale un cable que se comunica con la PC a treves de puerto serial.
La mayoría de la mayoría de las veces lee bien, incluso dura horas trabajando excelentemente.. Peero aveces no lee el puerto es como si no supiera que esta hay, cuando surge este error, cierro la aplicación y la vuelvo abrir y nada, la solución para que siga leyendo el puerto ha sido REINICIAR la pc.
No tengo ni la más mínima idea de este error pues no sale seguido, si alguien me pudiera ofrecer alguna sugerencia gracias..
Utilizo la libreira Giovynet y el sistema operativo es Windows.
import giovynet.nativelink.SerialPort;
import giovynet.serial.Baud;
import giovynet.serial.Com;
import giovynet.serial.Parameters;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class PuertoIngreso {
//variables que uso para interacturar con el Puerto
List<String> listar;
SerialPort puerto = new SerialPort();
Com com1;
//Esta mascara la uso porque algunas veces lee estos caracteres raros de la bascula y se lo puse para cuando los lea los
//convierta a ""
Pattern p=Pattern.compile("[ÉÞþÓó$$&Â(æA`à@ÿÌ]");
public PuertoIngreso() {
try {
listar = puerto.getFreeSerialPort();
System.out.println(listar);
if (listar!=null&&listar.size()>0) {
for (String free : listar) {
System.out.println("Free port: "+free);
}
}//if
Parameters set = new Parameters();
set.setPort("COM1");
set.setBaudRate(Baud._2400);
set.getByteSize();
com1 = new Com(set);
}//try
catch (Exception e)
{
// ESTE ES LA EXEPCION QUE SE LANZA CUANDO NO CONSIGUE EL PUERTO
System.out.println("Exception 1" +e +" \n "+ e.getCause() + "\n" +e.getLocalizedMessage());
JOptionPane.showMessageDialog(null, "No se Consigue el puerto", "ERROR", JOptionPane.ERROR_MESSAGE);
//eset codigo lo puse en la catch para que al lanzar la excepcion cierre el puerto
try{
com1.close();
}catch(Exception es)
{
System.out.println(es);
}
}//catch
//Este for lo puse porque con las practica vi que requería aproximadamente de este numero de repeticiones
//para leer el peso
for(int a=0 ; a<=14; a++){ try
{
{
caracter = com1.receiveSingleString();
recibido += caracter;
Matcher m=p.matcher(recibido);
peso=m.replaceAll("");
}
}
catch(Exception es)
{
System.out.println("Exception 2 " + es);
//eset codigo lo puse en la catch para que al lanzar la excepcion cierre el puerto
try{
com1.close();
}catch(Exception est)
{
System.out.println(est);
}
}
}
//por ultimo al irse a la ventana que mostrara los pesos cierro el puerto para que no lo //deje abierto
try{
com1.close();
}catch(Exception es)
{
System.out.println(es);
}
MiVentana ventana=new MiVentana(parametros);
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CL OSE);
ventana.setSize(1100, 600);
ventana.setVisible(true);
}
}
Gracias por su ayuda
1 Respuesta
Respuesta de mpacheco
1