![]() |
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) |
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. ********************************************** |
Re: JAva rs-232 Cita:
S! |
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. |
Re: JAva rs-232 Cita:
|
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. |
Re: JAva rs-232 Cita:
Estoy de viaje fuera, así que no puedo contestar más que intermitentemente :-) S! |
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 { |
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 |
| La zona horaria es GMT -6. Ahora son las 07:28. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.