Java - CAPTURAR PESO BALANZA BIZERNA EN JAVA

 
Vista:
sin imagen de perfil
Val: 5
Ha aumentado su posición en 6 puestos en Java (en relación al último mes)
Gráfica de Java

CAPTURAR PESO BALANZA BIZERNA EN JAVA

Publicado por Leonardo (3 intervenciones) el 07/07/2019 18:47:28
Hola buenos dias, soy nuevo en esto de java, tengo una balanza y deseo capturar el peso a traves de un puerto serial de mi computador, ya esta configurado el puerto, etc, sin embargo este codigo que deberia funcionar para tener comunicacion con dicho puerto por alguna razon que desconozco me da muchos errores cuando lo compilo, entiendo que hay que bajar una libreria yo lo hice pero igual me dan errores como sino reconociera los objetos para el puerto COM, si alguien tiene la solucion mucho le agradezco por favor, aqui abajo les escribo el codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/**
*	
*/
import java.lang.*;
import java.io.*;
import java.util.*;
import javax.comm.*;	//Se agrega el API de java de comunicaciones.
 
/**
	Este programa corresponde al que configura la puerta serial. Para ello, utiliza los métodos definidos en 
	el API de java de comunicaciones. El sistema de funcionamiento es el siguiente:
		En un objeto se obtienen todos los puertos que hay en el sistema. Luego se va revisando la lista de
		puertos hasta encontrar un puerto serial. Una vez encontrado se pregunta si es el COM1, y si corresponde
		entonces se inicializa el puerto. 
		Para ello se crea un objeto de tipo SerialPort, el cual es abierto utilizando otro objeto de tipo 
		CommPortIdentifier, que posee el metodo para abrir puertos. 
		Luego se obtienen los buffer de entradas y salidas para la escritura y lectura de los datos, para ello 
		se utilizan objetos de tipo InputStream y OutputStream.
		Se asocia un listener al puerto serial, para incorporar un receptor de eventos para estar informados 
		de lo que suceda en el puerto.
		SE implementa un thread que es el que se encarga de que la aplicación se quede esperando en el puerto 
		que se haya abierto a que se reciban datos.
	Ademas, en esta clase, se obtiene el comando a enviar por la puerta serial el cual es escrito en el buffer
	de salida y luego se espera por una respuesta.
	Fianlemnte, se cuanta con un metodo para cerrar el puerto, que en este caso, solo basta con cerrar los 
	flujos de entrada y salidas y de esta manera no se puede leer ni escribir en el puerto serial.
*/
 
public class puertaSerial implements Runnable, SerialPortEventListener {
    static Enumeration portList;
    static CommPortIdentifier portId;  //este sirve para abrir el puerto.
    static SerialPort serialPort;
 
	 static ArrayList comando = new ArrayList();
 
	 static OutputStream outputStream;
	 static InputStream inputStream;
    static Thread readThread;
 
	 static puertaSerial puerto;
 
	 static final String PingMsg = "Fpoÿ";
	 static String Mensaje;
 
	/**
	* Constructor de la puerta serial. Se encarga de inicializar el puerto serial.
	*/
	 public puertaSerial() {
        try {
		  		//Si el puerto no está en uso, se intenta abrir
             serialPort = (SerialPort)portId.open("PuertoSerie",2000);
        } catch (PortInUseException e) { }
        try {
     			//Se Configuran los buffer de entrada y salida.        
				 inputStream = serialPort.getInputStream();
             outputStream = serialPort.getOutputStream();
        } catch (IOException e) { }
		  try {
    			//listener asociado a la puerta.        
				serialPort.addEventListener(this);
        } catch (TooManyListenersException e) {}
 
		  // Hacemos que se nos notifique cuando haya datos disponibles 
    	  // para lectura en el buffer de entrada.
		  serialPort.notifyOnDataAvailable(true);
 
        try {
    			//Se configuran los parametros de transmision        
				serialPort.setSerialPortParams(38400,
                SerialPort.DATABITS_8,
                SerialPort.STOPBITS_1,
                SerialPort.PARITY_NONE);
        } catch (UnsupportedCommOperationException e) {}
 
		  // Se crea y lanza el thread que se va a encargar de quedarse 
        // esperando en el puerto a que haya datos disponibles
		  readThread = new Thread(this);
        readThread.start();
    }
 
	 /**
	 * Metodo que permite a los threads no quedarse continuamente bloqueados,
	 * sirve comoun metodo de escape. En este caso, la comprobación de si hay datos
    * o no disponibles en el buffer de la puerta, se hace
    * intermitentemente
	 */
    public void run() {
        try {
            Thread.sleep(20000);
        } catch (InterruptedException e) {}
    }
 
	 /**
	 * Metodo inicializacion, en este metodo se obtiene un puerto serial correspondiente al COM1 (para el caso de windows
	 * en el caso de UNIX, se debe buscar el puerto /dev/term/a).
	 */
    public static void InitPort() {
		  portList = CommPortIdentifier.getPortIdentifiers(); //lista que posee todos los puertos del sistema
 
        while (portList.hasMoreElements()) {		//se recorre la lista
            portId = (CommPortIdentifier) portList.nextElement();	//se obtiene un elemento de la lista
            if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {	//Se pregunta si corresponde a un puerto serial
                if (portId.getName().equals("COM1")) {	//Pregunta si corresponde al COM1
                   puerto = new puertaSerial();				//Se inicializa el puerto
		  }
            }
        }
 }
 
	 /**
	 * Este metodo es el encargado de cerrar los flujos de entrada y salida, para cerrar el puerto serial
	 */
	 public static void ClosePort() {
	 	try {
			inputStream.close();
			outputStream.close();
		} catch (IOException e) { }
	}
 
	 /**
	 *	Metodo utilizado para inicializar la variable comando, que es la que posee la informacion para 
	 * el comando que se desee enviar.
	 */
	 public static void init() {
		int tamano = comando.size();
 
		for (int i = 0; i < tamano; i++) {
			comando.remove(0);
	}
    }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 186
Ha disminuido su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

CAPTURAR PESO BALANZA BIZERNA EN JAVA

Publicado por Juan (70 intervenciones) el 09/07/2019 08:37:53
Hola leonardo, yo he importado la librería y no he tenido problemas, posiblemente estés exportando la librería que no es, te dejo el enlace de la librería:

https://mega.nz/#!P7gECI4Z!qrM-FDUSaGfElx5fqd9mibstEcpGfVDpe2Vni-Kn844
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 5
Ha aumentado su posición en 6 puestos en Java (en relación al último mes)
Gráfica de Java

CAPTURAR PESO BALANZA BIZERNA EN JAVA

Publicado por Leonardo (3 intervenciones) el 09/07/2019 11:36:34
Amigo la verdad sigo conel problema aun despues de bajar esta libreria, si tiene ud otro codigo mucho le agradeceria si lo pone a disposicion por favor, por otra parte hay algo que no entiendo, si el puerto esta ocupado por el dispositivo en este caso la balanza como yo le voy a enviar un comando a este para que me devuelva el peso? si me va decir que es acceso denegado por que esta siendo usado por la balanza, es decir, si me explica el contexto del asunto tambien se lo agradezco a ver si puedo resolverlo con otro lenguaje, me urge este y disculpe la molestia. Te envio otro codigo que probe mucho mas sencillo con la pantalla exacta en netBeans a ver que es lo que tengo malo alli.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

CAPTURAR PESO BALANZA BIZERNA EN JAVA

Publicado por Tom (1831 intervenciones) el 09/07/2019 12:55:19
Los puertos serie de un PC son generalmente full-duplex.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 5
Ha aumentado su posición en 6 puestos en Java (en relación al último mes)
Gráfica de Java

CAPTURAR PESO BALANZA BIZERNA EN JAVA

Publicado por Leonardo (3 intervenciones) el 09/07/2019 12:58:52
Entiendo pero yo hice una prueba muy sencilla que es dejar abierto el com1 con hiperterminal y luego por comando DOS le envie un dato al puerto echo HH>COM1 por ejemplo y me dice acceso denegado, claro es obvio por que esta ocupado, alli me surgio la duda, lo hice en basic e igual me da el error.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

CAPTURAR PESO BALANZA BIZERNA EN JAVA

Publicado por Gabriel (1 intervención) el 14/05/2021 14:52:02
El comando get.inputstream no me lo lee, porque será?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar