Inicio > Java > Manejo del puerto serial (RS232) con Java

Manejo del puerto serial (RS232) con Java

Buen día a todos!!
Acá les traigo un nuevo post, y seguro les interesará..

Se trata de utilizar el puerto serial con Java.

Se trata de un proceso muy pero muy sencillo, construí una clase para hacer este trabajo y voy a explicar el código.

En primer lugar, estoy utilizando el JDK 1.6, con netbeans 6.8.

Bueno, a trabajar.

Para poder hacer esto utilize las librerias para puerto serial GyovinetDriver, que viene siendo un Wrapper para usar el puerto serial tanto en Windows como en Linux.

Bueno, dicho esto, al codigo.

La clase se llama PuertoObj, y vamos con las declaraciones.

Objeto que hace referencia directa al puerto com.
Este objeto es el que enviara los comandos y recibirá las respuestas en el puerto

Com puerto;

Para configurar el puerto com, necesitamos establecer los parámetros de la conexión
en un objeto Parameters.
private Parameters parametros;

La variable formatoCadena y subCadena, reciben string indicando cual es el formato de la cadena recibida por el puerto después de enviar un comando y que parte de la cadena necesitamos regresar con el método LeerDatos de esta clase
Por ejemplo, si el formato que recibiremos por el puerto es SNNNNNNNSKGC puede
que solo nos interese recibir la parte SNNNNNNN que es la que representa el peso(si hablamos de una bascula) Mas adelante están los getters y setters para estas 2 variables.

private String formatoCadena;
private String subCadena;

Esta variable se usa junto con las 2 variables anteriores. En el método LeerDatos
de esta clase, verán de forma mas detallada como funciona.

private int caracterIniciaLectura;

Esta variable toma un valor dependiendo de si queremos regresar todo lo recibimos del puerto o solo la parte que nos interesa. Esto si están configuradas las variables formatoCAdena y subCadena.

private boolean bRegresaCadenaCompleta = false;

Vamos con el codigo en si
Primero un constructor sin parámetros, que lo que hace es inicializar el objeto Parameters

Public PuertoObj() throws Exception
 {
 parametros = new Parameters();
 }

Para poder usar esta clase, debemos pasar toda la información de conexión a ella, para eso utilizamos un método llamado ConfiguraPuerto, que recibie algunos parámetros.
Aquí esta el codigo.

public void ConfiguraPuerto(String nombrePuerto,
 String baudios,
 String paridad,
 String bitsPorCaracter,
 String bitsDeParada) throws Exception{</strong>

parametros.setPort(nombrePuerto);

parametros.setBaudRate(Baud.valueOf(baudios));
 parametros.setParity(paridad);
 parametros.setByteSize(bitsPorCaracter);
 parametros.setStopBits(bitsDeParada);

}

Como pueden ver, este metodo recibe el puerto a utilizar, los baudios, la paridad, etc.
Estos datos son pasados al objeto Parameters que fue inicializado en el constructor de esta clase.

Una vez configurado el puerto, podemos abrirlo, para esto usamos el siguiente metodo.

public void AbrirPuerto() throws Exception
 {
 //Determinal el caracter final de la lectura
 caracterIniciaLectura = 0;
 if(formatoCadena!=null){
 if(subCadena==null)
 subCadena = formatoCadena;</strong>

caracterIniciaLectura = formatoCadena.indexOf(subCadena);
 }else{
 formatoCadena = "";
 bRegresaCadenaCompleta = true;
 }
 try
 {
 if (getFormatoCadena().length()>0){
 //puerto = formatoCadena.length();
 }
 puerto = new Com(parametros);
 }
 catch (Exception ex)
 {
 throw ex;
 }
 }

Este metodo configura a este objeto para que tenga en cuenta la cadena que va a regresar con el metodo LeerDatos, presten especial atención a la linea

puerto = new Com(parametros);

Esta linea es la que realmente abre el puerto, es decir crea una instancia de la clase Com y en el constructor pasa los parámetros que definimos con el método ConfiguraPuerto.

Llegando a este punto en nuestro programa, si todo sale bien, estamos en posición de mandar comandos a nuestro dispositivo, vamos a definir el método que nos ayudara en esta tarea.

public void EscribirDatos(String comando) throws Exception
 {
 try
 {
 puerto.sendArrayChar(comando.toCharArray());
 }
 catch (Exception ex)
 {
 //throw ex;
 }
 }

El objeto puerto, tiene algunas variantes para enviar caracteres al puerto, después de estar probando algunas el método sendArrayChar() es el que me funciono para lo que yo estaba haciendo (Que es conectar con una bascula). Uds pueden probar otros métodos, ya nos contaran qué fue lo que les funcionó.

Volviendo, el método anterior es muy sencillo, solo se le dice que escriba el comando en forma de arreglo de caracteres en el puerto. Cuidado con las excepciones, se debe atrapar o reportar las que se generen.

Ya escrito el comando en el puerto, vamos a leer la respuesta. Esta es otra cosa sencilla, acá va el método que sirve para esta tarea.

public String LeerDatos()
 {
 String dato = "";
 try {
 String dt = puerto.receiveToString(formatoCadena.length());</strong>

//System.out.println("La salida es: "+dt.length());
 if (dt == null || dt.trim().compareTo("")==0) {
 return "No hay datos";
 }
 if (!bRegresaCadenaCompleta) {
 dato = dt.substring(caracterIniciaLectura, subCadena.length());
 } else {
 dato = dt;
 }
 } catch (Exception ex) {
 Logger.getLogger(PuertoObj.class.getName()).log(Level.SEVERE, null, ex);
 }

return dato;

}

La linea mas importante es:

 String dt = puerto.receiveToString(formatoCadena.length());

Observen como le he pasado como parámetro la longitud de la palabra que espero recibir por el puerto. Una vez recibida la palabra, es tratada para devolver solo la parte que le interesa al usuario, ¿recuerdan el uso de las variables formatoCadena, y subCadena? Pues aquí es donde se utilizan.

Para finalizar el ciclo, se debe cerrar el puerto. Aquí esta el metodo.

public void CerrarPuerto()throws Exception{
 try {
 puerto.close();
 } catch (Exception ex) {
 //Logger.getLogger(PuertoObj.class.getName()).log(Level.SEVERE, null, ex);
 throw ex;
 }
 }

Para terminar con el código de nuestra clase, vienen los getter y setters de formatoCadena y subCadena

public String getFormatoCadena() {
 return formatoCadena;
 }

public void setFormatoCadena(String formatoCadena) {
 this.formatoCadena = formatoCadena;
 }

public String getSubCadena() {
 return subCadena;
 }

public void setSubCadena(String subCadena) {
 this.subCadena = subCadena;
 }

Hasta aquí, tenemos nuestra clase terminada.
Sencillo no??

Para lograr que el programa funcione hay que tomar en cuenta algunos detalles.

Primero, descargar el driver para manejo del puerto serial desde java del siguiente link
http://code.google.com/p/giovynetserialport/downloads/list

Al decargar el archivos vienen una serie de carpetas, los archivos importantes son GyovinetDriver.jar y libSerialPort.dll para trabajar con windows.

Segundo, el archivo libSerialPort.dll se debe copiar a la ruta de las librerias donde esta instalado el JDK. En mi caso es C:\Archivos de programa\Java\jdk1.6.0_18\jre\lib.

Y Tercero, se debe agregar la librería GiovinetDriver.jar a nuestro proyecto.

Ahora si, ya tenemos todo listo.. para usar nuestra clase vamos a hacer lo siguiente.:

Incluir el import de nuestra clase; en mi caso queda así:

import Util.PuertoObj;
 public static void main(String[] args) {

PuertoObj puerto = new PuertoObj();

puerto.ConfiguraPuerto(“COM1”,”_9600”,”E”,”8”,”1”);
 puerto.setFormatoCadena(“SNNNNNNNSKGC”);
 puerto.setSubCadena(“SNNNNNNN”);
 puerto.AbrirPuerto();

//En mi bascula, el comando P indica que me envíe el peso actual
 puerto.EscribirDatos(“P”);

//Leemos lo recibido
 System.out.println(“El dato recibido es: ”+puerto.LeerDatos());

//Y cerramos el puerto
 puerto.close();

}

El código del método anterior lo escribí al vuelo, si usas Netbeans o cualquier otro IDE, seguro te va a indicar que debes manejar las excepciones. Ajusta el código para que funcione.

En la linea:

 puerto.ConfiguraPuerto(“COM1”,”_9600”,”E”,”8”,”1”);

observa que el segundo parámetro lo mande así “_9600″, eso es porque la clase Baud sabe interpretar los baudios expresados de esa manera(Lo puedes ver en el método ConfiguraPuerto de nuestra clase PuertoObj).

Como ven, manejar el puerto serial desde un programa hecho en Java es muy sencillo, utilizando la librería GyovinetDriver.

Se me olvidaba!!
En nuestra clase PuertoObj, hay un metodo estatico que nos devuelve una lista de tipo String con los puertos seriales instalados en nuestro PC, aqui va el codigo de este metodo.


public static List getPuertosLibres()throws Exception{
 List puertosLibres = null;</strong>

try{
 SerialPort sp = new SerialPort();
 puertosLibres = sp.getFreeSerialPort();
 }catch(Exception ex){

throw ex;

}
 return puertosLibres;
 }

Tengo un proyecto de ejemplo funcional, si les interesa envíenme un correo a r_quinteroa@hotmail.com, y con gusto les enviare una copia.

Bueno, esto es todo por hoy, espero que este post les sirva de algo y no olviden dejar sus comentarios.
Hasta la proxima.

Si te gusta esta entrada, invítame una cerveza.

About these ads
  1. Albert Moreno
    mayo 27, 2011 en 7:58 pm | #1

    Excelente aporte mi hermano, de verdad me sirvio de gran ayuda :)

  2. Rene
    mayo 30, 2011 en 8:38 am | #2

    Albert, revise la lista de errores que me enviaste. Ese error se produce porque no encuentra la libreria libSerialPort.dll. Copiala a la ruta de las librerias de JDK en mi caso es C:\Archivos de programa\Java\jdk1.6.0_18\jre\lib; y a system32. Con eso tu proyecto debe funcionar.

  3. damarin
    enero 30, 2012 en 5:11 pm | #3

    buenas compañero necesito mandar y revisar informacion atraves del RS232 pero tengo netbeans 7.0.1 ylo necesito interactuar entre dos computadores mi pregunta es si tu ejemplo tambien puede servir en mi proyecto gracias

    • febrero 1, 2012 en 2:49 pm | #4

      Buenas tardes damarin.
      Si tu netbeans puede trabajar con el JDK 1.6 de Java, entonces el ejemplo si te serviria.
      Revisa que JDK tienes y me avisas.
      Saludos.

  4. Abelardo
    febrero 2, 2012 en 4:29 pm | #5

    De donde se puede bajar la libreria GyovinetDriver?

  5. damarin
    febrero 3, 2012 en 6:33 am | #6

    buenas dias arvinform estuve la libreria y no he podido hacer la comunicacion con el otro pc mi Netbeans trabaja con e JDK 1.7.0 o nose si descarge la libreria corresta para poder trabajar en windows
    gracias

  6. Alejandro
    febrero 22, 2012 en 9:23 am | #7

    Buenos días,

    Estupendo ejemplo. Me funciona bien. Pero me gustaría hacer una pregunta.
    Estoy enviando una cadena hexadecimal caracter a caracter con el siguiente código :

    data = hexStringToByteArray(“00ffff000b000102030405060708090a0b0c0d0e0f1″);

    for (int i = 0; i < data.length; i++) {
    com.sendSingleData(data[i]);

    public static byte[] hexStringToByteArray(String s) {
    int len = s.length();
    byte[] data = new byte[len / 2];
    for (int i = 0; i < len; i += 2) {
    data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
    + Character.digit(s.charAt(i+1), 16));
    }
    return data;

    ¿Como puedo hacer para enviar en una sola instrucció toda la cadena hexadecimal ?
    Estoy monitorizando el puerto serie para ver lo que envío y el log me sale demasiado grande cuando envío caracter a caracter.

    Gracias

    • febrero 24, 2012 en 3:36 pm | #8

      Que tal Alejandro, me alegra que el ejemplo te sirva.
      Para tratar de entender mejor tu problema, ¿porque tienes la cadena en caracteres hexadecimales???

      Lo que veo en el codigo que muestras, es que tu conviertes la cadena Hexadecimal(00ffff000b000102030405060708090a0b0c0d0e0f1)
      a un arreglo de bytes, y en el siguiente codigo

      for (int i = 0; i < data.length; i++) {
      com.sendSingleData(data[i]);

      envias el valor de la posicion actual del arreglo de bytes, donde esa posicion es un valor numerico.
      Posiblemente lo que necesites, es convertir cada posicion del arreglo de bytes a un valor char, para asi tener un arreglo de chars.

      Una posible solucion seria:

      byte[] data = hexStringToByteArray(“00ffff000b000102030405060708090a0b0c0d0e0f1″);
      String str = new String(data);
      com.sendArrayChar(str.toCharArray())

      ¿Que se hizo con el codigo anterior?,
      primero se convierte la cadena de caracteres hexadecimales a un arreglo de bytes,
      luego ese arreglo de bytes se utilizo para inicializar un objeto de tipo String,
      y se utiliza el metodo toCharArray() del objeto de tipo string, que nos devuelve un arreglo de char para enviarlo al puerto
      de un solo golpe con la invocacion del metodo sendArrayChar.

      Espero que esto pueda ayudarte.

      Saludos y éxitos.

  7. Carlos
    junio 23, 2012 en 10:34 pm | #9

    nesecito cominicar modulos zigbee por puerto serial, esta libreria me sirve?, y no puedo descargar la libreria, el link no me funciona!!!!!!!!!!!!!!

    • junio 25, 2012 en 9:57 am | #10

      Buen dia Carlos, no estoy seguro si la libreria te funcione para tu requerimiento. De cualquier forma te mando la libreria a tu correo, para que la revises y nos cuentes si te funciona. Saludos.

  8. Erick Arroyo
    agosto 3, 2012 en 7:11 pm | #11

    Mi correo es erick_arroyo@outlook.com, podrias enviarme tu proyecto, estoy tratando de comunicar java con un picaxe.

    • agosto 4, 2012 en 8:03 am | #12

      Claro erick, te envio el proyecto de ejemplo a tu correo..

      Espero te sea de utilidad.

  9. agosto 27, 2012 en 8:51 am | #13

    Hola, esta muy interesante tu post, pero de java no se nada, solo javascript, y la verdad estoy vuelto loco, por que estoy tratando desesperadamente de lograr que un sistema de venta a traves de un navegador web, con php y javascript, me abra una caja registradora, leí un poco que con un activex se puede, pero no se como se hace, lo de la miniprinter ya lo solucioné ya que se instala como una impresora normal, y en el firefox viene la opcion de imprimir directamente sin abrir la ventana, pero lo que quiero es que se abra automaticamente la caja registradora al capturarse un cobron en la base de datos. Crees que puedas ayudarme con eso, según yo, solo con enviar una señal electrica se puede abrir la caja, pero no se, no tengo mucha idea sobre eso, mi correo es zharazan1@hotmail.com, muchas gracias de antemano, tu post me hizo pensar mas claramente, que si puede ser posible

  10. oscar
    septiembre 5, 2012 en 8:18 am | #14

    buenas tardes tengo q comunicar un zigbee casero conectado con un ordenador bien sea por el puerto rs2323 o el usb…funcionara tu ejemplo con el rs232?me peudes enviar la libreria?gracias

  11. Oscar Leonardo
    septiembre 14, 2012 en 8:24 am | #15

    Saludos, quisiera recibir su proyecto de ejemplo. Estoy tratando de hacer conexión entre el PIC 18F4550 y la PC por puerto serial. Mi correo es oskrleonardoq@hotmail.com. Muchas gracias.

  12. juanqui
    septiembre 27, 2012 en 1:27 pm | #16

    Hola me gustaria recibir el proyecto en mi correo, te lo agradecira muchísimo, la dir es juanqui6120@gmail.com. Gracias y éxitos a todos.

  13. Yesid Ospitia Medina
    octubre 9, 2012 en 2:48 pm | #17

    Hola. Se me esta generando una excepción: The Com:COM18 is already instantiated

    Tienes alguna idea ?

    • octubre 10, 2012 en 7:32 am | #18

      Honestamente no he tenido esa excepcion…

      Pero por el tipo, me imagino que otra aplicacion está usando el puerto COM18 o que de alguna manera se queda colgada una instancia de la clase PuertoObj que previamente está usando el puerto.

      Revisa si tienes otras aplicacion que utilicen ese puerto, y si es así, asegúrate que no esté en memoria.

      Saludos.

  14. octubre 11, 2012 en 9:51 am | #19

    Algun link para descargar la libreria ya que esta roto y el comprimido que encontre me pide contraseña :/

    • octubre 11, 2012 en 6:28 pm | #20

      El link que conozco es el que está en el blog, y tienes razón, está roto.
      Te mando la librería a tu correo.

  15. Juan
    octubre 13, 2012 en 12:07 pm | #21

    Muy bueno el aporte! Necesito hacer una aplicación de este estilo. Puedes mandarme el comprimido ya que el link esta roto?

    • octubre 13, 2012 en 12:12 pm | #22

      Buen día.. Te envíe el comprimido a tu correo.
      Espero te sea de utilidad.
      Saludos.

  16. Ismael
    octubre 14, 2012 en 3:25 am | #23

    Muchas gracias por el post, me resultó de mucha ayuda!!!

  17. Ange
    noviembre 18, 2012 en 4:54 pm | #24

    hola amigo! muy buen trabajo, me pregunto si podrías enviarme a mi correo tu aplicación funcional y la libreria? saludos.

  18. Vane
    noviembre 22, 2012 en 11:28 am | #25

    Buenas se ve muy bueno tu ejemplo, podrias enviarmelo a mi correo por favor.

  19. Israel
    diciembre 20, 2012 en 2:16 pm | #26

    Hola, no logro respuesta por parte del dispositivo serial, es un Termómetro digital FLUKE, el cual viene con su propia interfaz solo que es muy limitada por ello requiero comunicarme con él.

    Donde creo que puede estar mi error es en las siguientes lineas:
    en la línea 1 la letra N la envió ya que no maneja paridad según el manual.
    La línea 2 y 3 entiendo que únicamente es para extraer la cadena que necesitamos, mi duda es el porque de las letras?
    En la línea 5 envió la orden del mismo modo que con el programa de interfaz que viente con el instrumento.

    1 puerto.ConfiguraPuerto(“COM1″, “_9600″, “N”, “8″, “1″);
    2 puerto.setFormatoCadena(“SNNNNNNNSKGC”);
    3 puerto.setSubCadena(“SNNNNNNN”);
    4 puerto.AbrirPuerto();
    5 puerto.EscribirDatos(“READ?”);

    No se que tan probable sea que no obtengo respuesta debido a la forma de insertar la petición

    puerto.sendArrayChar(comando.toCharArray());

    Ya que realizando el Debug, al enviar la información no veo el campo que lleve el comando de petición, así como al devolver la información, el objeto Comm puerto, se encuentra vació.

    Espero me ayudes a orientarme un poco más.

    De antemano gracias.

    • diciembre 20, 2012 en 7:29 pm | #27

      Hola Israel..

      En la clase PuertoObj tenemos una instancia de la clase Com llamada puerto.
      Este objeto llamado ‘puerto’ tiene diferentes métodos para enviar los comandos hacia el dispositivo.
      Según lo que me dices, el comando lo mandas usando el método sendArrayChar. Revisa qué otros métodos tiene éste objeto e intenta.

      Otra cosa, seguido me ha pasado que el problema al no devolverme datos pueden ser los parámetros de conexión. Revisa en el manual del termómetro
      si los datos qeu envias son correctos. Es decir, bits de parada, bits por caracter, paridad, etc.

      Las líneas 2 y 3 efectivamente son para extraer los datos que necesites. Debes revisar el formato de la cadena de respuesta que te devuelve el dispositivo,
      hacer un patrón genérico, y setearlo con el método setformatoCadena. y definir el patrón de la cadena que necesitas manejar.

      Para hacer las cosas más fáciles utiliza un software para conexión al puerto serial. Si usas windows, puedes usar HyperTerminal. Establece la conexión y envía comandos, Una vez que a través del HyperTerminal tengas datos del dispositivo, entonces no hay razón para que no tengas datos a través de la aplicación.

      Otra cosa que me ha pasado, es que por error selecciono un puerto virtual del pc y realmente no hace nada. Pasa como si hiciera la conexión pero no hay respuesta.

      Una más, si usas un adaptador de puerto serial, es decir, de usb a serial, a menudo este tipo de cables dan problemas. No sé si es tu caso, pero por las dudas te dejo el comentario.

      Espero que esto te dé una idea y puedas solucionar el problema. Si no es así, envíame parte del código para ver en qué puedo ayudarte.

      Saludos.

  20. Israel
    diciembre 31, 2012 en 2:48 pm | #28

    Hola muchas gracias por los comentarios, me sirvieron de mucho. Probé el Hyper terminal y todo funciono bien, por lo que me enfoque en verificar mi programación en Java y por fin dí con el clavo, En la cadena de petición hacia falta enviarle un “\n”(Enter) para que el instrumento procesara la petición.
    Por otro lado creo que hay un pequeño detalle en el método LeerDatos() en la línea 5

    05 String dt = puerto.receiveToString(formatoCadena.length());

    En mi caso no estaba utilizando ningún formato y se lo enviaba como null, por lo que no me devolvía ninguna respuesta, ya que la cadena estaba vacía. Solo es cuestión de validación.

    Saludos y Gracias.

    • enero 2, 2013 en 9:00 am | #29

      Hola Israel..

      Me alegra que hayas podido resolver tu problema.

      Voy a revisar tu sugerencia, y aplicar los cambios.

      Saludos y éxitos.

  21. Rocio
    enero 3, 2013 en 6:31 pm | #30

    Hola, me encanto tu ejemplo, yo estoy buscando hacer algo similar pero con puerto usb… crees q se pueda adaptar a tu ejemplo? y podrás enviarme tu ejemplo a mi correo? gra.rochio@gmail.com

    Soy nueva en java y llevo tiempo lidiando con este problema :(
    Saludos!

    • enero 4, 2013 en 8:58 am | #31

      Hola Rocío…
      Me dá gusto que te haya gustado el ejemplo…

      La vdd aunque por definición el puerto USB es un puerto serial, no creo que este ejemplo puedas adaptarlo.

      Debe haber otras formas en Java.

      De cualquier forma te lo envio y nos cuentas.

      saludos.

  22. enero 21, 2013 en 12:53 pm | #32

    Muy bueno tu ejemplo..y muy bien explicado! Podrias enviarme el codigo fuente?

    Saludos cordiales,

    Atte. R.R

  23. Luis Fernando
    enero 24, 2013 en 10:57 am | #34

    men puedes explicarme un poco mas a fondo esta linea:
    puerto.ConfiguraPuerto(“COM1”,”_9600”,”E”,”8”,”1”);
    comprendo hasta el segundo parametro pero los ultimos 3 no comprendo
    te lo agradeceria mucho.
    o alguien que me pueda explicar

    • enero 24, 2013 en 7:19 pm | #35

      Buenas tardes..

      La conexión por puerto serial require una configuración dependiendo del dispositivo que quieras conectar.
      Para establecer una conexión a través del puerto serial, es necesario indicar el puerto, los baudios(velocidad de transferencia), paridad, bits de datos y bis de parada.

      Te dejo el siguiente link donde se explica a detalle cada uno de estos elementos.
      http://digital.ni.com/public.nsf/allkb/039001258CEF8FB686256E0F005888D1

      Espero esto te ayude.

      Saludos.

  24. mayi71
    enero 30, 2013 en 11:35 am | #36

    Hola, gracias por el apoyo. Como agradecimiento te adjunto mi proyecto:
    http://www.4shared.com/rar/7pXvyUJ0/RS232_-_Balanza.html

    Saludos!

  25. Aldo
    marzo 2, 2013 en 12:06 pm | #37

    hola estimado
    Me parece muy interesante tu aporte, estoy tratando de replicar el codigo peor obtengo el siguiente mensaje de error:
    Exception in thread “main” java.lang.UnsatisfiedLinkError: C:\Users\olchese\workspaceNB\procReadSerialPorta\libSerialPort.dll: Can’t load AMD 64-bit .dll on a IA 32-bit platform
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1751)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1676)
    at java.lang.Runtime.loadLibrary0(Runtime.java:823)
    at java.lang.System.loadLibrary(System.java:1030)
    at core.SerialPort.(SerialPort.java:18)
    at com.datbusiness.serialport.main.Principal2.main(Principal2.java:17)
    Java Result: 1
    Favor si me pudieras ayudar a que se debe esto te lo agradeceria de antemano

    • marzo 2, 2013 en 12:23 pm | #38

      Buen día Aldo.

      Tú problema aparece porque falta que copies el archivo libSerialPort.dll a la carpeta donde tienes instalada la máquina virtual de Java.
      En el blog, está comentada esta parte. y por si las dudas, puedes copiarla también a la carpeta System32.

      Con esto debería funcionar.

      Saludos.

  26. Jorge
    marzo 14, 2013 en 5:21 pm | #39

    Hola, está muy interesante tu programa, podrías porfavor enviarme el código fuente? mi correo es jhrm92@hotmail.com. Gracias

  27. Carlos Saldivia
    marzo 24, 2013 en 7:10 am | #40

    Buenas compañero, estoy revisando tu ejemplo pero tengo ciertas dudas, sera que puedes mandarme algun ejemplo completo para poder guiarme? Estoy usando eclipse. Mi correo es crsa1899@gmail.com gracias de ante mano. Saludos.

  28. Marco Quinde
    marzo 28, 2013 en 11:55 am | #42

    Saludos Rene, estoy iniciandome en la programacion de JAVA y estoy tratando de implementar un programa que visualice el peso de una bascula, he estudiado tu codificacion y me ha ayudado bastante. Lo que he notado es que trabajas la lectura por demanda es decir envias un caracter a la balanza para que esta a su vez envie la informacion en una sola linea. Yo estoy tratando de trabajar el equipo en modo continuo, es decir que la balanza esta enviando en forma constante informacion al PC sin necesidad de que este le envie comandos de impresion, ¿Que quiero lograr con esto? Quiero que mi aplicacion muestre el peso reflejado de la balanza como si fuera un display remoto. No he encontrado mucha informacion que me ayude, por eso te pido un poco de ayuda en esta aplicacion. Ademas si fueras tan amable me pudieras enviar el programa que comentas… ? Gracias de antemano por la atencion prestada.

    • marzo 30, 2013 en 6:50 pm | #43

      Saludos Marco.
      He trabajado con básculas que trabajan en modo continuo, en ese caso, lo único que tengo hacer es iniciar un temporizador y leer los datos del búffer cada cierto tiempo, sin necesidad de enviar un comando para lectura.

      Envío el código de ejemplo a tu correo, para que puedas adaptarlo.

      Saludos.

      • Marco Quinde
        abril 2, 2013 en 4:59 pm | #44

        Super, gracias por la ayuda, voy a revisar lo que me enviaste y despues te comento cualquier novedad de como me fue en el proyecto
        Gracias nuevamente…

  29. Bernabé
    marzo 28, 2013 en 3:21 pm | #45

    Hola, mi proyecto consiste en detectar humo con un sensor, enviar los datos por el puerto rs232 utilizando un cable adaptador usb-rs232, si se detecta presencia de humo se debe encender una alarma, la señal para encender la alarma también se envía por el puerto rs232. Crees que este proyecto se pueda adaptar de alguna manera para este propósito. Mi correo es alejo2k_pm@hotmail.com para que por favor me envíes tu proyecto. Gracias por las respuestas.

    • marzo 30, 2013 en 6:45 pm | #46

      Claro, este proyecto es justo para eso.
      Envío el código del proyecto a tu correo.

      Espero lo adaptes.

      Saludos

  30. Dany
    abril 4, 2013 en 12:10 am | #47

    Buenas q tal me parecio muy interesante tu ejemplo y quisiera q me nevies xfavor el codigo del proyecto mi correo es danijokira@hotmail.com gracias

  31. mayo 4, 2013 en 2:15 pm | #48

    Hola buenas tardes.. Me parece muy interesante tu proyecto, y estoy realizando una aplicacion similar! Si pudieras enviarme el codigo del proyecto y la libreria que necesito! carlosarenas14@gmail.com Muchisimas gracias de antemano

  32. mayo 6, 2013 en 7:25 am | #49

    Estimado, excelente tu sitio web, y excelente tu proyecto, te agradezco y felicito a la vez. Por favor si puedes ayudarme enviandome a mi correo el ejemplo de la aplicación, tengo el caso similar al del Sr. Marco Quinde, en el que requiero leer información del peso de una báscula que está enviando en forma constante informacion al PC sin necesidad de que este le envie comandos de impresión. Porfavor ayudame con el proyecto que incluya esta adaptación, y de ser posible también las librerías que trabajen en Windows 7 en 64 bits.

    Saludos y muchas gracias por su gentileza.

    Mi correo: antoniobrionesnav@gmail.com

  33. junio 14, 2013 en 4:51 pm | #50

    René:
    MUCHISIMAS GRACIAS!! por todo, especialmente por tu atención.
    Te mandé un mail sin saber en verdad si responderias.
    La facu, con los finales, trabajos y cuestionarios ocupan todo mi tiempo libre. Te aviso cuando pueda retomar Java, si?
    Saludos!!

    • junio 22, 2013 en 9:25 am | #51

      De nada, ya sabes, estamos para ayudar..

      Espero que todo salga bien en tus finales.

      Saludos.

  34. abel_cr
    junio 19, 2013 en 9:57 am | #52

    Buenas me pudes pasar el codigo al siguiente mail: net889@hotmail.com
    Muchas gracias por el aporte!

  35. cesarin
    junio 23, 2013 en 9:11 pm | #53

    Excelente documento te Felicito, estoy trabajando en un proyecto similar, si talvez pudieramos ayudarme con el ejemplo que tienes te agradeceria infinatemnte te deje mi correo cesarin976@gmail.com

  36. ts
    julio 3, 2013 en 4:36 am | #54

    saludos. Es bueno saber algo: no nada hay sencillo en las cosas; es decir hay cosas menos complicadas.Las personas que realmente saben cosas, nunca usan dicha palabra.
    saludo. A los demas estudien y no se conformen con copy paste”enviame el codigo……”.Es una mediocridad.
    ts

  37. julio 5, 2013 en 9:58 am | #55

    Muy buena tu explicación, me podrías enviar el código, estoy tratando de manejar una base de datos hecha en Postgresql con datos que provienen de un microntrolador a través de rs232.

  38. cliff
    julio 14, 2013 en 12:35 pm | #56

    Muy agradecido con tu aporte, como dicen por ahí el conocimiento se comparte. Y apropósito de compartir por favor hazme llegar tu ejemplo al correo teocage@gmail.com

  39. cliff
    julio 14, 2013 en 12:49 pm | #57

    fe de erratas mi correo es teocafe@gmail.com

  40. julio 14, 2013 en 12:52 pm | #58

    Como se haria para eniar un voltaje(1v) a un puerto USB de la pc?

  41. juan_ochoa
    agosto 6, 2013 en 5:58 am | #59

    que buen tema, pudieras enviarmelo por fa a mi correo ya que me gustaria implementarlo con un pic, te lo agradeceria mucho. saludos mi correo es juan_ochoa13@yahoo.com.mx

  42. Israel lopez
    agosto 22, 2013 en 8:22 pm | #60

    oye amigo podrías pasarme tu código completo es que ya lo he tratado de hacer
    o modificando lo publicado pero me marca un error en la linea.
    puerto.ConfiguraPuerto(“COM1”,”_9600”,”E”,”8”,”1”);
    en donde se da el nombre del puerto te agradecería tu ayudar con el codigo
    o diciendome que puedo hacer con ese error

  43. Gerardo Solis
    octubre 15, 2013 en 4:15 pm | #61

    Excelente documento Muchas Gracias, estoy trabajando en un proyecto similar, podrias ayudarme con el ejemplo que tienes ?

    Gerardo_solis_h@hotmail.com

  44. alexander
    octubre 31, 2013 en 9:26 am | #62

    pana me sale un error: java.lang.UnsatisfiedLinkError: C:\Users\AleX\Documents\NetBeansProjects\Puertos\libSerialPort.dll: Can’t load IA 32-bit .dll on a AMD 64-bit platform
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1957)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1882)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1872)
    at java.lang.Runtime.loadLibrary0(Runtime.java:849)
    at java.lang.System.loadLibrary(System.java:1087)
    at giovynet.nativelink.SerialPort.(SerialPort.java:23)
    at ejemploBascula.PuertoObj.AbrirPuerto(PuertoObj.java:54)
    at puertos.Puertos.main(Puertos.java:29)
    Exception in thread “main” java.lang.UnsatisfiedLinkError: giovynet.nativelink.SerialPort.openPortC(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
    at giovynet.nativelink.SerialPort.openPortC(Native Method)
    at giovynet.serial.Com.(Com.java:40)
    at ejemploBascula.PuertoObj.AbrirPuerto(PuertoObj.java:54)
    at puertos.Puertos.main(Puertos.java:29)
    Java Result: 1

  45. Nelson
    noviembre 7, 2013 en 1:52 pm | #63

    Hola, excelente post. Estoy necesitando hacer exactamente lo mismo que tu hiciste. Podrias enviarme el codigo funcional al correo nelson.murstein@gmail.com ? Muchisimas gracias y excelente aporte!

  46. baby
    noviembre 12, 2013 en 9:57 am | #64

    Hola René desde hace días estoy buscando información sobre trabajos en java utilizando la conexión con el puerto COM y voila encontre este articulo que considero uno de los mas completos que he encontrado hasta ahora. Yo estoy intentando hacer algo parecido a lo de Marco Quinde, es un software en java que me lea el peso de un indicador Toledo 9091, con pesaje continuo. Por favor te pido me envies algún ejemplo que tengas comentariado mi correo es barbarafv88@gmx.es. Saludos y sigue así.

  47. diciembre 19, 2013 en 9:57 pm | #65

    Amigo se te agradece la información que nos proporcionas, me podrías mandar tu código mi correo es marinhelan@hotmail.com

  48. enero 23, 2014 en 9:31 am | #66

    Gracias por tu aporte!!!! esta muy completo!!! me puedes pasar el codigo al correo abcapsys@gmail.com gracias

  49. febrero 3, 2014 en 10:56 pm | #67

    Te agradezco por compartir tu conocimiento es posible que me compartas tu proyecto muchas gracias. oliver_rubio@hotmail.com

  50. Alex
    febrero 8, 2014 en 3:52 pm | #68

    HOLA RENE QUINTERO ME PARECE MUY INTERESANTE EL APORTE QUE BRINDAS ME PODRIAS ENVIAR A MI CORREO EL CODIGO YO ESTOY TRATANDO DE AUTOMATIZAR CON JAVA NETBEANS LUCES Y PUERTAS DE MI CASA INTRODUCIENDOME EN EL MUNDO DE LA INFORMATICA Y ELECTRONICA POR MEDIO DE UN ADAPTADOR USB A RS232, TE AGRADECERIA SI ME ENVIAS TU CODIGO POR FAVOR MI CORREO ES alex_lv75@hotmail.com

  51. Aldo
    marzo 22, 2014 en 1:34 pm | #69

    Me parece muy bien tu trabajo, te lo agradezco, tenia unas dudas con el codigo, crees que me lo podrias enviar a mi correo? este es: aldo.g@hotmail.es muchas gracias de antemano

  52. Luis
    marzo 27, 2014 en 10:55 pm | #70

    hola amigo! muy buen trabajo, me pregunto si podrías enviarme a mi correo tu aplicación funcional ? muchas gracias este es mi correo mulloluis@gmail.com saludos.

  53. Marcos
    marzo 31, 2014 en 1:59 pm | #72

    Amigo René me parece interesante tu trabajo. El link de la descarga de las librerias esta defectuoso, podrias enviar las librerias y el código completo a este correo por favor mosarc@hotmail.com.
    Una pregunta más, ¿cúal es el requerimiento mínimo de la jdk para que funcione el código?

  1. marzo 28, 2011 en 8:50 pm | #1

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

%d personas les gusta esto: