Foros del Web » Programación para mayores de 30 ;) » Java »

JAva rs-232

Estas en el tema de JAva rs-232 en el foro de Java en Foros del Web. Hola: quiero leer datos que me llegan desde la linea serie con java. he btenido el siguiente codigo pero me da errores si alguien me ...
  #1 (permalink)  
Antiguo 27/04/2007, 03:53
 
Fecha de Ingreso: abril-2007
Mensajes: 5
Antigüedad: 17 años
Puntos: 0
JAva rs-232

Hola:
quiero leer datos que me llegan desde la linea serie con java. he btenido el siguiente codigo pero me da errores si alguien me puede ayudar lo agradeceria.

public class Puerto_serie {
static CommPortIdentifier idPuerto;
FileOutputStream out;
File fitxategia;
int vaciado;
boolean jasotzen=false;
static Enumeration listaPuertos;
InputStream entrada;
String data,paketea="",gordetakoa="";
boolean bidalita=false,hutsik=false;
SerialPort puertoSerie;
Thread tLectura;
FileInputStream in;
int kontordua=0;
int ktrama=0;
byte[] ordua=new byte[8];
byte[] auxordua=new byte[8];
// En este ejemplo 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.
// Primero abre el puerto y luego le fija los parámetros

public Puerto_serie() {

System.out.println("konstruktorera sartzen da?");
// Si el puerto no está en uso, se intenta abrir
try {
// puertoSerie = (SerialPort)idPuerto.open( "Puerto_serie",2000 );
puertoSerie = (SerialPort)idPuerto.open( "Puerto_serieApp",2000 );
System.out.println("linea seriea zabaldu da");
} catch( PortInUseException e ) {}
// Se obtiene un canal de entrada
try {
entrada = puertoSerie.getInputStream();
System.out.println("Sarrerako stream bat lortu da");
} catch( IOException e ) {}

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

// Hacemos que se nos notifique cuando haya datos disponibles
// para lectura en el buffer de la puerta
try {
//puertoSerie.addEventListener(SerialPortEventListen er);
puertoSerie.addEventListener((SerialPortEventListe ner)this);
// puertoSerie.addEventListener(this);

System.out.println("addEventlistener-era heldu naz");
} catch (TooManyListenersException e) {
// TODO
}
puertoSerie.notifyOnDataAvailable( true );

// Se fijan los parámetros de comunicación del puerto
try {
puertoSerie.setSerialPortParams( 9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE );
System.out.println("linea seriea konfiguratu da");
} 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((Runnable)this);
tLectura.start();

}


public void run() {
try {
// En los threads, hay que procurar siempre que haya algún
// método de escape, para que no se queden continuamente
// bloqueados, en este caso, la comprobación de si hay datos
// o no disponibles en el buffer de la puerta, se hace
// intermitentemente

Thread.sleep( 20000 );
} catch( InterruptedException e ) {}

}


public void serialEvent( SerialPortEvent _ev ) {
try{
fitxategia= new File("fitxategia.txt");//Portu serietik iristen diren datuak fitxategi honetan gordeko dira
out=new FileOutputStream (fitxategia,true);
in=new FileInputStream(fitxategia);
}catch(FileNotFoundException e){}


switch( _ev.getEventType() ) {
// La mayoría de los eventos no se trata, éstos son los
// que se producen por cambios en las líneas de control del
// puerto que se está monitorizando
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;
// Cuando haya datos disponibles se leen y luego se
// imprime lo recibido en la consola
case SerialPortEvent.DATA_AVAILABLE:
byte[] bufferLectura = new byte[1];
try {
while( entrada.available() > 0 )
{
int nBytes = entrada.read( bufferLectura );
System.out.print( new String(bufferLectura,0,nBytes));
if(bufferLectura[0]=='1')
jasotzen=true;
if(((bufferLectura[0]!='U')&(bufferLectura[0]!='.')&(jasotzen==true))|(bufferLectura[0]=='\n')|(bufferLectura[0]=='\r'))
{
paketea=paketea+(new String(bufferLectura));
}
if( bufferLectura[0]=='.')
{
paketea=paketea+" ";
Date hoy= new Date();
data = hoy.toString();
System.out.println(data);
paketea=paketea+data;
paketea=paketea+".";
}
}

}catch( IOException e ) {}
}


}

public static void main( String[] args ) {
// Lista de los puertos disponibles en la máquina. Se carga en el
// mimo momento en que se inicia la JVM de Java

listaPuertos = CommPortIdentifier.getPortIdentifiers();
//System.out.println(listaPuertos);
//idPuerto = (CommPortIdentifier)listaPuertos.nextElement();
//System.out.println(idPuerto);
while( listaPuertos.hasMoreElements() ) {
System.out.println("while-era sartu naz");

idPuerto = (CommPortIdentifier)listaPuertos.nextElement();
System.out.println(idPuerto);
if( idPuerto.getPortType() == CommPortIdentifier.PORT_SERIAL ) {
// if( idPuerto.getName().equals("/dev/term/a") ) { // UNIX
if( idPuerto.getName().equals("COM1") ) { // WINDOWS
// Lector del puerto, se quedará esperando a que llegue algo
// al puerto
System.out.println(idPuerto.getName());
Puerto_serie lector;
lector = new Puerto_serie();

}
}


}

}
}
El error me da cuando lo ejecuto compilar lo hace bien.

java.lang.ClassCastException: proiektua.Puerto_serie
at proiektua.Puerto_serie.<init>(Puerto_serie.java:59 )
at proiektua.Puerto_serie.main(Puerto_serie.java:175)
  #2 (permalink)  
Antiguo 30/04/2007, 03:08
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Re: JAva rs-232

Nada, no me hagas ni caso. El fin de semana jejejee.

**********************************************

Wenas.

Por lo que veo, no se si me equivoco, quieres hacer una clase que extienda de serialport??

puertoSerie = (SerialPort)idPuerto.open( "Puerto_serieApp",2000 );

Si es asi tendrias que poner el extends, sino esta linea que te he puesto estaria mal.

puertoSerie esta declarado como Puerto_serie no como SerialPort.


**********************************************

Última edición por elAntonie; 30/04/2007 a las 03:14
  #3 (permalink)  
Antiguo 30/04/2007, 09:02
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: JAva rs-232

Cita:
java.lang.ClassCastException: proiektua.Puerto_serie
Indica que es un error de classpath. Seguramente no lo tienes bien configurado a la hora de ejecutar el programa.

S!
  #4 (permalink)  
Antiguo 03/05/2007, 02:26
 
Fecha de Ingreso: abril-2007
Mensajes: 5
Antigüedad: 17 años
Puntos: 0
Busqueda Re: JAva rs-232

Gracias por responderme a los dos.
Al primero de los dos que me ha respondido puerto seie creo que lo tengo bien definido no?
SerialPort puertoSerie;
Respecto al segundo que de beria de poner en el classpath para solucionarlo?
Lo siento no haber podido contestar antes pero he estado el puente fuera.
Gracias por haberme contestado.
  #5 (permalink)  
Antiguo 03/05/2007, 03:49
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Re: JAva rs-232

Cita:
Iniciado por antonkas Ver Mensaje
Gracias por responderme a los dos.
Al primero de los dos que me ha respondido puerto seie creo que lo tengo bien definido no?
SerialPort puertoSerie;
Respecto al segundo que de beria de poner en el classpath para solucionarlo?
Lo siento no haber podido contestar antes pero he estado el puente fuera.
Gracias por haberme contestado.
Seguro que tienes el mismo classpath para compilarlo y para ejecutarlo???
  #6 (permalink)  
Antiguo 03/05/2007, 06:03
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Re: JAva rs-232

Hola:

El problema del ClassCastException posiblemente venga de una linea como esta

puertoSerie = (SerialPort)idPuerto.open( "Puerto_serieApp",2000 );

que tienes en el constructor. Es posible que idPuerto.open() no devuelva una clase SerialPort. En concreto, según marca la excepción, el error está en el constructor en la línea 59 y debe ser un "cast" similar a ese, si no es ese.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #7 (permalink)  
Antiguo 08/05/2007, 00:28
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: JAva rs-232

Cita:
java.lang.ClassCastException: proiektua.Puerto_serie
La clase que no encuentra es la clase principal, así que es simplemente una cuestión de que no encuentra en el classpath las clases que has hecho. Puede ser por que están dentro de un paquete y no las tienes en un directorio con ese nombre, por ejemplo.

Estoy de viaje fuera, así que no puedo contestar más que intermitentemente

S!
  #8 (permalink)  
Antiguo 08/05/2007, 02:07
 
Fecha de Ingreso: abril-2007
Mensajes: 5
Antigüedad: 17 años
Puntos: 0
Re: JAva rs-232

He conseguido solucionar el problema, aqui os dejo la solucion. Añadiendo esta linea simplemente funciona.

public class proba2_serie implements Runnable,SerialPortEventListener {
  #9 (permalink)  
Antiguo 07/06/2007, 01:23
 
Fecha de Ingreso: junio-2007
Mensajes: 2
Antigüedad: 16 años, 10 meses
Puntos: 0
Re: JAva rs-232

Hola!

Recupero este tema ya que tengo una dudilla. Al igual que antonkas tengo ya el código Java para conectarme mediante rs232, pero mi problema es con el parámetro de los bits de datos (DATABITS_x). Quiero mandar 4 bits de datos y como al principio me daba fallos en la compilacion definí los parametros como variables INT con el valor que yo queria. Es decir:

final int dataBits=4;
final int stopBits=1;
final int parity=0;

[...]

puertoSerie.setSerialPortParams (9600,dataBits,stopBits,parity);


He estado mirandolo más, y me he dado cuenta de que en todos lados el menor valor que veo es DATABITS_5. Entonces, no puedo mandar menos de 5 bits??

La solución podría ser mandar el dato dos veces seguidas para que sea un byte entero, y luego coger sólo la mitad, pero si lo pudiera mandar tal cual... Que me comentais??

Gracias de antemano
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:45.