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

Leer Datos Puerto Serial

Estas en el tema de Leer Datos Puerto Serial en el foro de Java en Foros del Web. Buenos dias compañeros estoy utilizando el siguiente codigo que encontre para leer datos del puerto serial, el codigo corre pero no me muestra nada, es ...
  #1 (permalink)  
Antiguo 01/09/2012, 10:38
 
Fecha de Ingreso: diciembre-2007
Mensajes: 427
Antigüedad: 16 años, 4 meses
Puntos: 35
Leer Datos Puerto Serial

Buenos dias compañeros estoy utilizando el siguiente codigo que encontre
para leer datos del puerto serial, el codigo corre pero no me muestra nada, es para utilizarlo con una planta telefonica y obtener el registro de todas las llamadas que entran y salen.
Parece que no reconociera ningun evento pero es el codigo que visto que siempre se usa para esto...

Alguien que me pueda ayudar por favor
Código:
package comunication;

import gnu.io.CommPortIdentifier;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import gnu.io.UnsupportedCommOperationException;
import java.io.*;
import java.util.*;


/**
 * Este es un ejemplo de uso del API de Comunicaciones Java que permite la
 * lectura de información a través de uno de los puertos serie de la
 * máquina en que se ejecuta.
 * El ejemplo se ha probado en Windows y Solaris, utilizando la línea
 * de código que identifica el puerto a utilizar correspondiente
 */

public class Comunication implements Runnable,SerialPortEventListener {
  static CommPortIdentifier idPuerto;
  static Enumeration listaPuertos;
  InputStream entrada;
  SerialPort puertoSerie;
  Thread tLectura;

  // 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 Comunication() {
    // Si el puerto no está en uso, se intenta abrir
    try {
      puertoSerie = (SerialPort)idPuerto.open( "AplLectura",2000 );
    } catch( PortInUseException e ) {
    System.out.println(e);
    }
    // Se obtiene un canal de entrada
    try {
      entrada = puertoSerie.getInputStream();
    } catch( IOException e ) {
    System.out.println(e);
    }
	  
    // Añadimos un receptor de eventos para estar informados de lo
    // que suceda en el puerto
    try {
      puertoSerie.addEventListener( this );
	  } catch( TooManyListenersException e ) {
          System.out.println(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( 9600,
        SerialPort.DATABITS_8,
        SerialPort.STOPBITS_1,
        SerialPort.PARITY_NONE );
    } catch( UnsupportedCommOperationException e ) {
        System.out.println(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();
    }
  
    @Override
  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
        System.out.println("Entra hilo");
      Thread.sleep( 2000 );
    } catch( InterruptedException e ) 
    {
    System.out.println(e);
    }
    }

  
    @Override
  public void serialEvent( SerialPortEvent _ev ) {
      System.out.println("Entra evento serial");
    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[20];
        try {
          while( entrada.available() > 0 ) {
            int nBytes = entrada.read( bufferLectura );
            }
          System.out.print( new String(bufferLectura) );
        } catch( IOException e ) {
        System.out.println(e);
        }
        break;
      }
    }
  
  
  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("COM1") ) {           // WINDOWS
          // Lector del puerto, se quedará esperando a que llegue algo
          // al puerto
          Comunication lector = new Comunication();
          }
        }
      }
    }
  }
  #2 (permalink)  
Antiguo 03/09/2012, 12:49
Avatar de zero0097  
Fecha de Ingreso: abril-2010
Ubicación: México
Mensajes: 481
Antigüedad: 14 años
Puntos: 69
Respuesta: Leer Datos Puerto Serial

yo ni sabia que esto existía, siempre usé la librería rxtx :(...
__________________
De nada, hay te encargo +1...
  #3 (permalink)  
Antiguo 03/09/2012, 13:11
 
Fecha de Ingreso: diciembre-2007
Mensajes: 427
Antigüedad: 16 años, 4 meses
Puntos: 35
Respuesta: Leer Datos Puerto Serial

ahi estoy empleando la libreria rxtx.
Si tienes algun ejemplo mejor me serviria mucho...
  #4 (permalink)  
Antiguo 03/09/2012, 13:32
 
Fecha de Ingreso: enero-2008
Mensajes: 614
Antigüedad: 16 años, 3 meses
Puntos: 57
Respuesta: Leer Datos Puerto Serial

Siempre he tenido problemas al tratar de utilizar el puerto serial, nunca me funciona la primera vez (nunca he utilizado Java para trabajar con puertos seriales). La respuesta de siempre es, asegurate que te estas conectado al puerto correcto y que la aplicacion o hardware que esta enviando datos esta utilizando los mismos parametros que tu estas utilizando como bits de datos, bits de parada, etc.

Lei que vas a trabajar con llamadas telefonicas (bueno, eso es lo que entendi). Al puerto que estas tratando de conectarte es un modem y lo que intentas construir es algo asi como un identificador de llamadas?

Si te estas conectando a un modem, primero debes inicializar el modem con cadenas de inicializacion (init strings)
https://www.google.com/search?q=mode...w=1440&bih=751
  #5 (permalink)  
Antiguo 03/09/2012, 14:34
 
Fecha de Ingreso: diciembre-2007
Mensajes: 427
Antigüedad: 16 años, 4 meses
Puntos: 35
Respuesta: Leer Datos Puerto Serial

Gracias por la respuesta, pero es q por hyperterminal la planta me manda los datos,
es decir por hyperterminal yo veo cuales son las llamadas que entran y salen.

Necesito es poder traer esos valores con un codigo java.
Salu2.

Etiquetas: puerto, serial, string
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 21:04.