Hola
Necesito comunicarme con el puerto com de mi PC para controlar un automata.
Todo esto en ubuntu.
¿Alguien me puede ayudar?
| |||
Re: comunicacion con puerto com Yo he comprobado este codigo en windows2000 y funciona. creo que no deberia de dar problemas con ubuntu, lo único tendras que añadir el api de comunicaciones para linux. yo he usado el javacomm20-win32. package proiektua; import java.io.*; import java.util.*; import javax.comm.*; public class proba2_serie implements Runnable,SerialPortEventListener { static CommPortIdentifier idPuerto; static Enumeration listaPuertos; InputStream entrada; SerialPort puertoSerie; Thread tLectura; static String h=""; // 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 proba2_serie() { // Si el puerto no está en uso, se intenta abrir try { puertoSerie = (SerialPort)idPuerto.open( "AplLectura",2000 ); } catch( PortInUseException e ) {} // Se obtiene un canal de entrada try { entrada = puertoSerie.getInputStream(); } 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( 2400, 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 la puerta a que haya datos disponibles tLectura = new Thread( 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 ) { String[] datu_serie= new String[100]; int i=0; System.out.println("evento bat gertatu da"); 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[8]; try { while( entrada.available() > 0 ) { int nBytes = entrada.read( bufferLectura ); //byte c=(byte)entrada.read( bufferLectura ); } } catch( IOException e ) {} // System.out.println(bufferLectura[0]); //System.out.print( new String(bufferLectura) ); h=h + new String(bufferLectura); break; } datu_serie=StringtoArray(h,h); System.out.println(datu_serie[2]); //System.out.println(h); } 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(); while( listaPuertos.hasMoreElements() ) { idPuerto = (CommPortIdentifier)listaPuertos.nextElement(); 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 proba2_serie lector = new proba2_serie(); } } } } |