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

Servlet para acceder al puerto serial de Servidor y controlarlo.

Estas en el tema de Servlet para acceder al puerto serial de Servidor y controlarlo. en el foro de Java en Foros del Web. Estoy desarrollando una aplicación para controlar un puerto serial en linea con un automatismo simple de bajo costo. El objetivo es, acceder a internet desde ...
  #1 (permalink)  
Antiguo 12/06/2012, 11:15
 
Fecha de Ingreso: junio-2012
Mensajes: 4
Antigüedad: 12 años, 5 meses
Puntos: 0
Servlet para acceder al puerto serial de Servidor y controlarlo.

Estoy desarrollando una aplicación para controlar un puerto serial en linea con un automatismo simple de bajo costo.

El objetivo es, acceder a internet desde cualquier parte del mundo y activar el automatismo conectado all puerto serial.

Para ello necesito un servidor al cual pueda tener privilegios de acceso via web al puerto serial del servidor.

Bueno, comenzé programando en Visual Basic, con la libreria MSCOMM32
y conectando mi automatismo directo al equipo y puerto serial y con el programa solo puedo tener el control del puerto serial del equipo host.

Luego surgió la necesidad de tener el control del puerto serial de un servidor, para poder acceder al control por internet.

Y aquí estoy sin encontrar una solución definitiva.

Pensé que un applet me ayudaría, logré programar el código, al parecer todo funciona bien, pero no he logrado probarlo ya que mi equipo no tiene puerto serial y el applet no me corre si no es con el visor del programa con el que estoy programando: NETBEANS. Además me he ido enterando de que con el applet tampoco tengo privilegios de acceso al servidor via web. Asi que no he tenido ningún resultado.

Lo último que averigué, dentro de la poca información que hay en internet es que con una aplicación SERVLET podría tener acceso a controlar el puerto serial del servidor.

Estoy usando una librería llamada JSSC (Java Simple Serial Connector), que es
algo más fácil de utilizar que esas librerias RXTX y Giovynet.

Tengo el siguiente código para un applet, que abre el puerto serial, activa la señal RTS y transcurrido 5 segundos cierra el puerto, eso es todo lo que necesito.

-------------------------------------------------------------------------------------------------------
package aplicacionporton;
import java.util.logging.Level;
import java.util.logging.Logger;
import jssc.SerialPort;
import jssc.SerialPortException;

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
SerialPort serialPort = new SerialPort("COM1");
try {
System.out.println("Port opened: " + serialPort.openPort());
System.out.println("Params setted: " + serialPort.setParams(9600, 8, 1, 0));
System.out.println("RTS enable: " + serialPort.setRTS(true));
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
Logger.getLogger(ventana.class.getName()).log(Leve l.SEVERE, null, ex);
}
System.out.println("RTS disable: " + serialPort.setRTS(false));
System.out.println("Port closed: " + serialPort.closePort());
}
catch (SerialPortException ex){
System.out.println(ex);
}

}


// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JPanel jPanel1;
// End of variables declaration

}
--------------------------------------------------------------------------------------------------------

Entonces, no sé como lo podría hacer con un servlet... hay unos tutoriales de servlet básicos, donde escribes tu nombre, apretas el botón y se abre una página que dice "HOLA TU_NOMBRE" , me funciona bien, pero no sé como meter el código para hacer funcionar el puerto serial, tengo un emulador en ejecución.

Si me pueden ayudar, muchas gracias.
  #2 (permalink)  
Antiguo 13/06/2012, 03:09
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: Servlet para acceder al puerto serial de Servidor y controlarlo.

Si has echado un vistazo a ejemplos de servlet, te sonarán los doGet() y doPost().

Pues estos dos son como un main/evento, desde el web se llama al servlet que ejecuta uno de estos dos métodos. Dentro de ellos pones lo que quieres que se ejecute.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 13/06/2012, 15:42
 
Fecha de Ingreso: junio-2012
Mensajes: 4
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Servlet para acceder al puerto serial de Servidor y controlarlo.

Gracias por tu respuesta.

No me resulta lo que estoy haciendo.

Entiendo lo del Do y el GET , pero coloco las instrucciones que quiero hacer correr y no sucede nada.

Mira estoy usando una libreria llamada jSSC del que necesito solo 1 instrucción para que me funcione bien.

Está importada la libreria, tal cual lo hice con un applet que me funciona bien, pero con el servlet he tenido muchos problemas.

La instruccion que quiero es esta

SerialPort serialPort = new SerialPort("COM1");
serialPort.openPort()); para abrir el puerto

Y nada más, esas instrucciones me funcionan sin problema en una aplicación java, y en un applet.

La coloco debajo del doPost y nada.
  #4 (permalink)  
Antiguo 13/06/2012, 16:42
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: Servlet para acceder al puerto serial de Servidor y controlarlo.

Déjanos ver como tienes el Servlet y el web.xml. Tambien como estas tratando de invocar al Servlet.

Básicamente lo único que deberías hacer es declarar tu Servlet en el web.xml y luego invocar la URL donde se encuentra. Para que se ejecute al poner la URL, sin un formulario, usas el método doGet del Servlet.
  #5 (permalink)  
Antiguo 14/06/2012, 07:44
 
Fecha de Ingreso: junio-2012
Mensajes: 4
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Servlet para acceder al puerto serial de Servidor y controlarlo.

Estoy utilizando un servlet de ejemplo, el típico que me muestra lo que se ingresa en un formulario.

El servlet esta así

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Servlet extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.println("<html>");
out.println("<head>");
out.println("<title>conch#$%&!!!</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Tu nombre es: " + request.getParameter("nombre") + "</h1>");
out.println("</body>");
out.println("</html>");

} finally {
out.close();
}
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}


@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}


@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>


Bueno, para hacer funcionar mi código, tengo que añadir al encabezado
2 import

import jssc.serialPort;
import jssc.serialPortException;

Y según yo. debajo del doPOST debería colocar el código

Este código, me activa el puerto COM1, me activa el RTS, espera 5 segundos
y me desactiva el RTS y además cierra el puerto (originalmente en el applet que tengo, uso un botón, y cada vez que presiono el botón, se repite el código)

SerialPort serialPort = new SerialPort("COM1");
try {
serialPort.openPort();
serialPort.setParams(9600, 8, 1, 0);
serialPort.setRTS(true));
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
Logger.getLogger(ventana.class.getName()).log(Leve l.SEVERE, null, ex);
}
System.out.println("RTS disable: " + serialPort.setRTS(false));
System.out.println("Port closed: " + serialPort.closePort());
}
catch (SerialPortException ex){
System.out.println(ex);
}

}



Por lo que entiendo que me dices, puedo invocar el servlet sin necesidad de llenar un formulario?, eso es lo que busco, una página con un botón que al hacer clic ejecute el código, cada vez que le haga clic.
  #6 (permalink)  
Antiguo 14/06/2012, 13:12
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: Servlet para acceder al puerto serial de Servidor y controlarlo.

Realmente puedes meterlo en processRequest(), poruqe sea GET o POST pasa por ahí, pero lo habitual es diferenciar según el tipo de llamada.

http://jtagua.wordpress.com/2010/10/...jemplo-basico/

Vamos, pero eso lo puedes ver en el código que has puesto.

Cita:
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
Lo que sí, es que por comodidad para las pruebas, el contenido de tus System.out.println los sacaría en la web devuelta

Y antes de que te rompas mucho la cabeza, comprueba que llegas al servlet, tendría que salirte la página conch#$%&!!!
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #7 (permalink)  
Antiguo 15/06/2012, 10:14
 
Fecha de Ingreso: junio-2012
Mensajes: 4
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Servlet para acceder al puerto serial de Servidor y controlarlo.

Tal como dices, me estoy partiendo la cabeza.

Trato de ordenar el puzzle pero no consigo nada.

Recapitulando:
1. Pogramé una aplicacion.exe en VB que funciona bien en un pc cliente con puerto serial, está probada.

2. Trate de llevar ese mismo programa.exe a ASP.NET pero nunca entendí como hacerlo.

3. Luego programé un control activeX, que al ejecutarlo en el visual basic, me abre un HTML que funciona bien, pero solo en el pc cliente, creo. Además no he podido hacerlo funcionar fuera de visual basic, ejecuto el HTML y me sale la página en blanco, algo debe faltar para poder correr el control activeX fuera de visual basic.

4. Programé un applet de java con netbeans, que tambien me corre bien corriendolo desde el mismo netbeans y que tampoco se ni entiendo como hacer funcionar el applet llamando desde html. Además que me han dicho que un applet no tiene control sobre servidor, algo relacionado con la seguridad.

5. Como el applet no corre como pense, leí que la única forma era hacerlo con un SERVLET que trabaja en la capa del servidor, pero no he podido implementar el código para hacerlo funcionar.

6. Ahora leí que con un complemento de activeX se podría trabajar en el servidor, pero tampoco se como programar el ACTIVE X DLL para que haga lo mismo que el active x control.

Que dificil es todo esto, de veras que hay que ser muy cabrón de la informática para poder hacerlo.

Etiquetas: netbeans, programa, puerto, serial, servidor, servlet, aplicaciones
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 15:12.