• Jueves 18 de Abril de 2024, 04:40

Autor Tema:  Enviar y recibir por el puerto serie  (Leído 13613 veces)

pepepaquiderm2

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Enviar y recibir por el puerto serie
« en: Jueves 17 de Julio de 2008, 18:51 »
0
Hola! me gustaría saber el código para poder enviar y recibir información por el puerto serie utilizando JavaScript. Gracias !!

posman

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Enviar y recibir por el puerto serie
« Respuesta #1 en: Viernes 18 de Julio de 2008, 21:03 »
0
Alguna vez logre enviar datos por el puerto serie. Necesitaba enviar datos a una impresora termica para imprimir etiquetas con codigos de barra personalizados. En un HTML puse un TEXTAREA y un boton. Cuando el usuario presionaba el boton, el texto que habia escrito, se imprimia.

El codigo lo tengo en mi trabajo, asi que te lo podria poner aqui hasta el lunes. Aunque tal vez no te funcione, creo que solamente funciona en IE y es unicamente para enviar, no para recibir datos. Recuerdo que en el trabajo tengo instalado el VB6 y utilice el mscomm. Intente crear de nuevo el codigo con el Visual Studio 2005 que tengo instalado en mi casa, pero no me permite agregar el componente (o control). Y en mi casa busque, y parece tampoco tengo el mscomm.  ;)

El codigo era algo asi:

Código: Text
  1.  
  2. <head>
  3. <script>
  4. function conectar() {
  5.     puertoSerie.open = true;
  6. }
  7. function enviar() {
  8.     puertoSerie.write("texto a enviar");
  9. }
  10. function desconectar() {
  11.     puertoSerie.open = false;
  12. }
  13. function recibir() {
  14. }
  15. </script>
  16.  
  17. <script language="javascript" for="puertoSerie" event="OnComm">
  18. recibir();
  19. </script>
  20. </head>
  21. <object name="puertoSerie" classid="XXXXX">
  22. aqui estaban las propiedades del objeto y configurabas la paridad, velocidad, el puerto, etc.
  23. </object>
  24.  
  25.  
No le hagas mucho caso al codigo, sobre todo a las funciones. No recuerdo bien si esa es la manera de abrir/cerrar el puerto. Lo importante es el class ID, que es lo que no recuerdo porque es una cadenota como de muchos caracteres.

El lunes, te pongo el codigo tal como lo tengo en el trabajo

posman

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Enviar y recibir por el puerto serie
« Respuesta #2 en: Viernes 18 de Julio de 2008, 21:11 »
0
Acabo de encontrarme una pagina que se me hace bastante "familiar" jejeje porque asi es mas o menos mi codigo

http://topic.csdn.net/t/20051112/15/4389019.html
Esta en chino o japones, no se, pero si se entiende el codigo

El resultado salio de buscar esto en google:
"classid" mscomm

pepepaquiderm2

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Enviar y recibir por el puerto serie
« Respuesta #3 en: Lunes 21 de Julio de 2008, 18:50 »
0
Gracias por la información. Pero aún desconozco lo que hace este código. Me podrías pasar el  tuyo a ver si me aclaro un poco más? El problema es que no sé cómo traspasar esta información a un fichero que entienda de JavaScript. Gracias por todo

posman

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Enviar y recibir por el puerto serie
« Respuesta #4 en: Lunes 21 de Julio de 2008, 21:25 »
0
El codigo que tengo es muy parecido

Código: Text
  1. <HTML>
  2. <head>
  3. <title>Super CIMonWeb</title>
  4. <script>
  5. function abrir(puerto) {
  6.     cmms.CommPort = puerto;
  7.     cmms.PortOpen = true;
  8. }
  9. function cerrar() { cmms.PortOpen = false; }
  10. function mandar(cadena) {
  11.     cmms.Output = cadena;
  12. }
  13. function recibir() {
  14.     var cadena = cmms.Input;
  15.  
  16.     forma.respuesta.value += cadena + "n";
  17.  
  18.     var r = forma.respuesta.createTextRange();
  19.     r.scrollIntoView(false);
  20.  
  21.     return false;       
  22. }
  23. </script>
  24. <script LANGUAGE=javascript FOR=cmms EVENT=OnComm>recibir()</script>
  25.  
  26. </head>
  27.  
  28. <BODY onload="abrir(1);" onunload="cerrar();" topmargin=0>
  29.  
  30. <br>
  31. <OBJECT id=cmms style="LEFT: 0px; TOP: 0px" classid="clsid:648A5600-2C6E-101B-82B6-000000000014" VIEWASTEXT>
  32.     <PARAM NAME="_ExtentX" VALUE="1005">
  33.     <PARAM NAME="_ExtentY" VALUE="1005">
  34.     <PARAM NAME="_Version" VALUE="393216">
  35.     <PARAM NAME="CommPort" VALUE="1">
  36.     <PARAM NAME="DTREnable" VALUE="-1">
  37.     <PARAM NAME="Handshaking" VALUE="0">
  38.     <PARAM NAME="InBufferSize" VALUE="1024">
  39.     <PARAM NAME="InputLen" VALUE="0">
  40.     <PARAM NAME="NullDiscard" VALUE="0">
  41.     <PARAM NAME="OutBufferSize" VALUE="512">
  42.     <PARAM NAME="ParityReplace" VALUE="63">
  43.     <PARAM NAME="RThreshold" VALUE="1">
  44.     <PARAM NAME="RTSEnable" VALUE="0">
  45.     <PARAM NAME="BaudRate" VALUE="9600">
  46.     <PARAM NAME="ParitySetting" VALUE="2">
  47.     <PARAM NAME="DataBits" VALUE="7">
  48.     <PARAM NAME="StopBits" VALUE="0">
  49.     <PARAM NAME="SThreshold" VALUE="0">
  50.     <PARAM NAME="EOFEnable" VALUE="0">
  51.     <PARAM NAME="InputMode" VALUE="1">
  52. </OBJECT>
  53.  
  54. <form name="forma" onsubmit="return false;">
  55. <table border=1>
  56.     <tr>
  57.         <td>Texto</td>
  58.         <td><input type="parte" name="parte" value="VA6L2H FNLALT"></td>
  59.         <td><input type="button" name="btnImprimir1" value="Imprimir1" onclick="mandar(parte.value + sufijo.value + cantidad.value)"></td>
  60.     </tr>
  61.     <tr>
  62.         <td>Sufijo</td>
  63.         <td><input type="text" name="sufijo" value="AA"></td>
  64.     </tr>
  65.     <tr>
  66.         <td>Cantidad</td>
  67.         <td><input type="text" name="cantidad" value="000026"></td>
  68.     </tr>
  69.     <tr>
  70.         <td colspan=4><textarea cols=50 rows=8 name="respuesta" value=""></textarea></td>
  71.     </tr>
  72. </table>
  73.  
  74. </BODY>
  75. </HTML>
  76.  
  77.  

Al cargarse la pagina, se abre el puerto y al cerrar la pagina, se cierra el puerto. Cuando se presiona el boton "Imprimir", se manda llamar la funcion "mandar" que es la que envie los datos al puerto serie. Tambien se declara una funcion que se llama al recibir datos por el puerto serie. Eso lo puse porque cuando enviaba datos equivocados a la impresora, esta me devolvia una cadena de error. Esa cadena la ponia en el textarea "respuesta"

pepepaquiderm2

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Enviar y recibir por el puerto serie
« Respuesta #5 en: Martes 22 de Julio de 2008, 17:45 »
0
Muchas gracias por el código. Ahora el problema que tengo es que no recibo bien lo que se recibe del puerto serie. Verás tengo una aplicación que envía datos al puerto serie y supuestamente lo tengo que recibir con este código. Estoy utilizando el Firebug para depurar el código y me dice que hay error en estas líneas

    cmms.CommPort = puerto;
    cmms.PortOpen = true;

no reconoce el cmms. Aunque estoy enviando y parece que lo realiza bien. Ya en la función de recibir me da varios errores. Aparte de darme error en esta línea también:

  var cadena = cmms.Input;

no recibe bien, me da el valor de cadena como undefined. A qué se puede deber esto?? Gracias otra vez

posman

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Enviar y recibir por el puerto serie
« Respuesta #6 en: Martes 22 de Julio de 2008, 18:55 »
0
En el tag <OBJECT> me falto poner comillas dobles en el atributo ID. Tambien podrias probar agregando el atributo name al objecto.

<OBJECT id="cmms" name="cmms" style="LEFT: 0px; TOP: 0px" classid="clsid:648A5600-2C6E-101B-82B6-000000000014" VIEWASTEXT>

pepepaquiderm2

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Enviar y recibir por el puerto serie
« Respuesta #7 en: Martes 22 de Julio de 2008, 19:07 »
0
Me sigue dando el error. es del tipo:

 Elemento referenciado por ID/NAME en el ámbito global. Use el estándar del W3C document.getElementById() en su lugar.

posman

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Enviar y recibir por el puerto serie
« Respuesta #8 en: Martes 22 de Julio de 2008, 20:26 »
0
Ahh pues tu mismo escribiste la solucion.

Supongo que el error te aparece cada vez que utilizas el objecto cmms. Bueno, en donde aparezca cmms, reemplazalo por document.getElementById("cmms")

Ej. cmms.PortOpen = true debe ser algo como document.getElementById("cmms") .PortOpen = true