Programación en castellano
Inicio > Foros > Servidores de Aplicaciones J2EE > Problemas con el puerto Serie
-Foros de debate

Servidores de Aplicaciones J2EE
Lista de foros | Lista de mensajes de este foro

Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.

Problemas con el puerto Serie
Enviado por lukax3 el día 27 de abril de 2005

Hola a todos!
estoy intentando hacer una aplicacion JAVA para leer o escribir desde el puerto serie, y no consigo probar el programa de ejemplo de Sun SimpleRead.java. Puedo compilar y ejecutar, pero al ejecutarlo no pasa nada. Éste es mi código:

import java.io.*;
import java.util.*;
import javax.comm.*;

public class SimpleRead implements Runnable, SerialPortEventListener {
static CommPortIdentifier portId;
static Enumeration portList;

InputStream inputStream;
SerialPort serialPort;
Thread readThread;

public static void main(String[] args)
{
portList = CommPortIdentifier.getPortIdentifiers();
System.out.println("Justo antes de entrar en el WHILE");

try
{
while (portList.hasMoreElements())
{
portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL)
{
if (portId.getName().equals("COM1"))
{
//if (portId.getName().equals("/dev/term/a")) {
System.out.println("Creamos un objetoSimpleRead");
SimpleRead reader = new SimpleRead();
}
}
}
}
catch (Exception e)
{
System.out.println("Excepcion del WHILE");
e.printStackTrace();
}
}

public SimpleRead() {
try {
serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);
} catch (PortInUseException e)
{
System.out.println("Excepcion en Constructor : PortInUse");
e.printStackTrace();
}
try {
inputStream = serialPort.getInputStream();
} catch (IOException e) {
System.out.println("Excepcion en Constructor : IO");
e.printStackTrace();
}
try {
serialPort.addEventListener(this);
} catch (TooManyListenersException e) {
System.out.println("Excepcion en Constructor : TooManyListeners");
e.printStackTrace();
}
serialPort.notifyOnDataAvailable(true);
try {
serialPort.setSerialPortParams(9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
} catch (UnsupportedCommOperationException e)
{
System.out.println("Excepcion en Constructor : UnsupportedCommOperation");
e.printStackTrace();
}
System.out.println("Inicializando el THREAD");
readThread = new Thread(this);
readThread.start();
}

public void run() {
try {
System.out.println("Esperando...");
Thread.sleep(200000);
} catch (InterruptedException e) {System.out.println("Excepcion en el RUN: Interrupted");

e.printStackTrace();}
}

public void serialEvent(SerialPortEvent event) {
switch(event.getEventType()) {
case SerialPortEvent.BI:
case SerialPortEvent.OE:
case SerialPortEvent.FE:
case SerialPortEvent.PE:
case SerialPortEvent.CD:
case SerialPortEvent.CTS:
case SerialPortEvent.DSR:
case SerialPortEvent.RI:
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
break;
case SerialPortEvent.DATA_AVAILABLE:
byte[] readBuffer = new byte[20];

try {
while (inputStream.available() > 0)
{
int numBytes = inputStream.read(readBuffer);
}
System.out.print(new String(readBuffer));
} catch (IOException e) {
System.out.println("Excepcion en el serialEvent: IO");
e.printStackTrace();}
break;
}
}
}
No me salta ninguna excepción ni nada, asi que si alguien puede ayudarme se lo agradecería mucho,
un saludo!

 
Re: Problemas con el puerto Serie
Enviado por Javi_822 el día 3 de mayo de 2005

Yo tengo el mismo problema. Hay varios programas de demo, y tanto sobre XP como sobre linux SUSE, me dice que no encuentra el nombre de puerto cuando arranco un programa llamado BlackBox del mismo paquete de software.
Con el SerialDemo me da una excepciop si le paso un fichero de conmfiguracion con el nombre de los dos com's.
¡Ah! Por supuesto con XP son COM1 y COM2, y con SUSE son /dev/ttyx.

A ver si alguien puede echar una ayudita.

 

Re: Problemas con el puerto Serie
Enviado por gustavo311 el día 6 de mayo de 2005

Al igual que tu yo soy principiante en java , sin embargo compile el codigo que tienes tu sin ningun problemas y al ejecutarlo funciona . Aun no le conecto ningun dispositivo , pro al ejecutarlo dice iniciando while ... y luego se queda esperando _ los datos . En internet encontre este codigo para la comunicacion con un dispositivo , haber si te sirve :

import java.awt.*;
import java.io.*;
import java.util.*;
import javax.comm.*;

public class Bascula implements Runnable, SerialPortEventListener {
static String messageString = "P";
static SerialPort serialPort;
static OutputStream outputStream;
static CommPortIdentifier portId;
static Enumeration portList;
static InputStream inputStream;
static Thread readThread;

public static void main(String[] args) {
portList = CommPortIdentifier.getPortIdentifiers();

while (portList.hasMoreElements()) {
portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {

//-------------------ciclo
//-------------------escritura
if (portId.getName().equals("COM1")) {
try {
serialPort = (SerialPort)
portId.open("BasculaApp", 2000);
} catch (PortInUseException e) {}
try {
outputStream = serialPort.getOutputStream();
} catch (IOException e) {}
try {
serialPort.setSerialPortParams(9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
} catch (UnsupportedCommOperationException e) {}
try {
outputStream.write(messageString.getBytes());
} catch (IOException e) {}
//---------------fin escritura
//---------------parametros lectura
Bascula reader = new Bascula();
}
}
}

}

public Bascula() {
try {
serialPort = (SerialPort) portId.open("BasculaApp", 2000);
} catch (PortInUseException e) {}
try {
inputStream = serialPort.getInputStream();
} catch (IOException e) {}
try {
serialPort.addEventListener(this);
} catch (TooManyListenersException e) {}
serialPort.notifyOnDataAvailable(true);
try {
serialPort.setSerialPortParams(9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
} catch (UnsupportedCommOperationException e) {}
readThread = new Thread(this);
readThread.start();
}

public void run() {
try {
Thread.sleep(20000);
} catch (InterruptedException e) {}
}

public void serialEvent(SerialPortEvent event) {
switch(event.getEventType()) {
case SerialPortEvent.BI:
case SerialPortEvent.OE:
case SerialPortEvent.FE:
case SerialPortEvent.PE:
case SerialPortEvent.CD:
case SerialPortEvent.CTS:
case SerialPortEvent.DSR:
case SerialPortEvent.RI:
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
break;
case SerialPortEvent.DATA_AVAILABLE:
byte[] readBuffer = new byte[10];

try {
while (inputStream.available() > 0) {
int numBytes = inputStream.read(readBuffer);
}
System.out.print(new String(readBuffer));
} catch (IOException e) {}
break;
}
}

}
/*-----------------------------

 
Re: Re: Problemas con el puerto Serie
Enviado por Dani el día 13 de mayo de 2005

Soy aun novato en java, al principio no pude hacer correr ejemplos del manejo de la libreria debido a que hacia correr los programas con "make" y no con "run", talvez ese tambien sea el problema que tuvieron. Ahora probe el codigo de gustavo311 para un dispositivo, pero no logro recibir nada. Ya configuré los parametros segun lo que se comunica mi dispositivo , pero no recibo nada.
Este se comunica a 600bps 7 bit de datos, 2 de stop, sin paridad. Solo sele envia un caracter y este deberia responder.
Le estaria muy agradecido si alguien me puede dar una mano con ello

 


Re: Problemas con el puerto Serie
Enviado por valentinaroca el día 29 de mayo de 2005

hola, ese codigo lo vi en una pagina y ami si me funciona, pero por si, buscalo y descargalo nuevamente, la pagina es http://www.itapizaco.edu.mx/paginas/JavaTut/froufe...
este escribe y con este lees
http://www.itapizaco.edu.mx/paginas/JavaTut/froufe...
recuerda que son dos computadores conectados por el puerto serial, y debes de corre java1901 en un pc y java1902 en el otro, me explico corres java1902 que lee, y luego corres java1901 que envia en el otro pc y listo.
Yo uni las dos clases en una sola te mando mi codigo a ver si lo puedes usar, solo ten en cuenta que yo manejo mi codigo desde un entorno swing pero la parte practica es parecida ...
Si no te funciona puedes escribirme a mi correo y con gusto te mando el codigo completo valentinaroca@hotmail.com Chaolin

import java.io.*;
import java.util.*;
import javax.comm.*;


public class Enviar implements Runnable,SerialPortEventListener {
CommPortIdentifier idPuerto;
Enumeration listaPuertos;
InputStream entrada;
OutputStream salida;
SerialPort puertoSerie;
Thread tLectura;
int nBytes;
Pantalla Pantalla1;


public void Enviar(Pantalla pantalla,int velocidad,int paridad,int intbits_parada,int numero_bits) {

this.Pantalla1=pantalla;
listaPuertos = CommPortIdentifier.getPortIdentifiers();

while( listaPuertos.hasMoreElements() ) {
idPuerto = (CommPortIdentifier)listaPuertos.nextElement();
if( idPuerto.getPortType() == CommPortIdentifier.PORT_SERIAL ) {
if( idPuerto.getName().equals("COM1") ) { // WINDOWS
// Lector del puerto, se quedará esperando a que llegue algo
// al puerto
try {
puertoSerie = (SerialPort)idPuerto.open( "AplLectura",2000 );
} catch( PortInUseException e ) {}
// Se obtiene un canal de entrada
try {
entrada = puertoSerie.getInputStream();
} catch( IOException e ) {}

try {
salida = puertoSerie.getOutputStream();
} catch( IOException e ) {}


// Añadimos un receptor de eventos para estar informados de lo
// que suceda en el puerto
try {
puertoSerie.addEventListener( this );
} catch( TooManyListenersException e ) {}

// Hacemos que se nos notifique cuando haya datos disponibles
// para lectura en el buffer de la puerta
puertoSerie.notifyOnDataAvailable( true );

// Se fijan los parámetros de comunicación del puerto
try {
puertoSerie.setSerialPortParams( velocidad,
numero_bits,
intbits_parada,
paridad);
} catch( UnsupportedCommOperationException e ) {}

// Se crea y lanza el thread que se va a encargar de quedarse
// esperando en la puerta a que haya datos disponibles
tLectura = new Thread( this );
tLectura.start();
}
}
}
}

// metodo que recibe el mensaje y lo envia
void envia(String mensaje1){
try {
salida.write( mensaje.getBytes() );
} catch( IOException e ) {}

}

 
Re: Re: Problemas con el puerto Serie
Enviado por Alberto Gomez el día 9 de abril de 2008

Sobre Windows os falta el código que carga el driver antes de invocar a getPortIdentifiers:

String temp_string = \\\\\\\"C:\\\\\\\" + File.separator + \\\\\\\"j2sdk1.4.2_13\\\\\\\" + File.separator + \\\\\\\"lib\\\\\\\" + File.separator + \\\\\\\"javax.comm.properties\\\\\\\";
Method loadDriver_Method = CommPortIdentifier.class.getDeclaredMethod(\\\\\\\"loadDriver\\\\\\\", new Class[] {String.class});
loadDriver_Method.setAccessible(true);
loadDriver_Method.invoke(\\\\\\\"loadDriver\\\\\\\", new Object[] {temp_string});

Fijaos que hay que construir la ruta hacia el javax.comm.properties

 

Re: Re: Problemas con el puerto Serie
Enviado por fabio el día 30 de noviembre de 2007

algun que me ayude por favor

lo que pasa es que estoy tratando de comunicarme por el puero serial y me sale el siguente error

Error loading SolarisSerial: java.lang.UnsatisfiedLinkError: no SolarisSerialPar
allel in java.library.path
Caught java.lang.UnsatisfiedLinkError: readRegistrySerial while loading driver c
om.sun.comm.SolarisDriver
Error loading SolarisSerial: java.lang.UnsatisfiedLinkError: no SolarisSerialPar
allel in java.library.path
Caught java.lang.UnsatisfiedLinkError: readRegistrySerial while loading driver c
om.sun.comm.SolarisDriver
Press any key to continue...

si alguno me puede resolver la inquietud le estaria grandemende agradesido

 

Re: Re: Problemas con el puerto Serie
Enviado por danius el día 23 de septiembre de 2005

Buenas todos.
Con respecto a lo del código para leer datos del puerto serie, he conseguido que me lea, pero el problema ahora es que lo que recibo son una secuencia de caracteres como el simbolo del euro,cuadraditos, etc etc.
No se porque pasa esto, pero en el programa lo que se va leyendo se mete en un array de byte y supongo que eso habra que pasarlo a algun otro fomato o algo de eso ¿no?.

Os agradecería mucho que me echarais una mano.
Gracias de antemano. Un saludo

CHAOOOOOO

 

Re: Re: Problemas con el puerto Serie
Enviado por Paula el día 29 de septiembre de 2005

Hola yo ya hice mi aplicación, pero resulta que no se como instalar la libreria comm a java, alguno de ustedes sabe que por favor me pueda guiar, mi correo es paanfipo@yahoo.es
Muchas gracias

 
Re: Re: Re: Problemas con el puerto Serie
Enviado por alejandra el día 18 de octubre de 2005

hola paula, me gustaria saber si pudiste instalar la libreria comm, pues al igual que tu yo tambien tengo prblemas con ella, ojala me pudieras ayudar...
Gracias

 
Re: Re: Re: Re: Problemas con el puerto Serie
Enviado por Gonzalo Odiard el día 26 de octubre de 2005

Esto lo probé en Linux.
Para instalar el manejo de java desde el puerto serial hay que hacer lo siguiente:
1) Copiar los .so que vienen con el paquete comm (libLinuxSerialParalell.so y libLinuxSerialParalell_g.so) en jre/lib/i386/ (relativo a la instalacion de java)
2) Copiar el archivo comm.jar en jre/lib/ext/ (relativo a la instalacion de java)
3) Copiar el archivo javax.comm.properties adjunto en jre/lib/ (relativo a la instalacion de java)
4) Copiar los .so adjuntos en /usr/lib (si, los mismos archivos van en dos directorios)
5) Darle permisos al puerto. (para poder leer o escribir)

 
Re: Re: Re: Re: Re: Problemas con el puerto Serie
Enviado por Giovanny el día 29 de agosto de 2008

El enlace muestra un como manipular puertos seriales con java, usa dos librerias una dll y un jar, el proyecto es proyecto 100% Open Source, actualmete esta desarrollado para windows, pero se planea extender para sistemas operativos como open solaris y linux...
http://sites.google.com/site/giovynetdesarrollos/m...

 






Tienda
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: musica mp3 | logos y melodias | hospedaje web linux | registro de dominios | servidores dedicados
más internet: comprar | recursos gratis | posicionamiento en buscadores | tienda virtual | gifs animados