• Viernes 8 de Noviembre de 2024, 13:44

Autor Tema:  Mscomm  (Leído 6109 veces)

hugo1983

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Mscomm
« en: Lunes 23 de Marzo de 2009, 03:15 »
0
Hola, talves alguien me puede ayudar estoy haciendo un simulador de telegrafo, mando impulsos electricos y los recibe una computadora por el puerto serial, lo que quiero es que si yo mando un impulso me muestre en un textbox el codigo binario 010010101 un impulso por bit, luego lo transformacia a texto en otro textbox (esta parte es facil y ya la tengo) pero con lo primero tengo el problema que solo me muestra garabatos y no puedo mostrar el codigo binario, si alguien me ayuda se los agradesco mucho. Saludos.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Mscomm
« Respuesta #1 en: Lunes 23 de Marzo de 2009, 10:03 »
0
Cita de: "hugo1983"
solo me muestra garabatos
Bueno, como no has puesto el código ni explicas técnicamente cómo lo haces, supondré que los datos se envían y se reciben bien, y se muestran en un textbox o algo similar. Si es así, entonces lo que ves es la representación en ASCII de los números binarios.

hugo1983

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Mscomm
« Respuesta #2 en: Martes 24 de Marzo de 2009, 03:30 »
0
si efectivamente los datos se reciben bien y se muestran en el textbox lo que quiero que en vez del codigo ASCII me aparesca codigo binario, por ejemplo yo mando un impulso de 5v y me aparesca un 1 y si no mando voltaje me detecta un 0 en un respectivo tiempo.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Mscomm
« Respuesta #3 en: Martes 24 de Marzo de 2009, 09:45 »
0
HexString() te lo convierte a hexadecimal, que es lo mismo. Si realmente lo quieres ver en binario (aunque ya te digo que en hexadecimal es prácticamente lo mismo), pues tendrás que cambiar la representación tú mismo con una función. Te aconsejo que esta función reciba la cadena ya convertida a hexadecimal porque la conversión de hexadecimal a binario es muy sencilla.

Salud

hugo1983

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Mscomm
« Respuesta #4 en: Jueves 26 de Marzo de 2009, 02:57 »
0
Gracias!! la conversion ya logra hacerla, el problema que aun tengo es que deberia detectarme un solo bit al hacer el impulso de 5voltios como 1 y al tener 0 voltios detectarme 0, para poder ingresar manualmente la cadena binaria desde un interuptor, no se si esto sea posible, o tenga que aplicar un PIC. Saludos.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Mscomm
« Respuesta #5 en: Jueves 26 de Marzo de 2009, 09:30 »
0
Ten en cuenta que no soy adivino, porque lo que yo sé -lo que has explicado- es que un equipo recibe datos mediante puerto serie, en el cual tienes una aplicación VB6 que usa un componente MSCOMM. Fin de la historia.

Cita de: "hugo1983"
deberia detectarme un solo bit
¿Quién?

Cita de: "hugo1983"
poder ingresar manualmente la cadena binaria desde un interuptor
¿Cuál interruptor? :huh:

Cita de: "hugo1983"
tenga que aplicar un PIC
¿Dónde?

hugo1983

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Mscomm
« Respuesta #6 en: Viernes 27 de Marzo de 2009, 03:32 »
0
Disculpa que no me he sabido explicar, veras mi proyecto trata sobre un simulador de un telegrafo, con un transformador de corriente de 5 voltios conecte la linea de tierra al pin 5 del puerto Serial y la linea de voltaje esta conectada a un interruptor y este esta conectado al pin 2 del puerto serial ( que es el pin para recibir datos), entonces el proyecto trata de que una persona este accionando este interruptor, y cada vez que lo accione deberia de mandar un 1 binario y cada vez que no lo accione deberia de ser un 0 binario (esto es en lapso de tiempo, podria ser un bit por segundo para que de tiempo de estar accionando el interruptor), entonces del lado de la computadora hay un programa eleborado en visual basic, y en el cual utilizando el componente mscomm, se reciben estos impulsos electricos y sos interpretados en un textbox, ahora mi problema es que cuando mando un impulso electrico recibo un simbolo como por ejemplo $@??, un simbolo por impulso, pero como lo explico al principio mi intencion este que en ves de estos garabatos expresar unicamente solo un 1 por accion del interruptor y un 0 por no accionar el interruptor esto en un lapso de accion por segundo. El fin es simular un telegrafo para enviar 0 y 1, y luego el codigo binario transformarlo a texto, se que se puede hacer la transformacion a texto de una vez, pero la funcion del proyecto es esta en especifico, espero si haber sido un poco mas claro esta vez y si me puedes ayudar te lo agradesco mucho.

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Mscomm
« Respuesta #7 en: Viernes 27 de Marzo de 2009, 04:31 »
0
El puerto seriees una entrada de datos digital y tal y tal...

Tú quieres conectar un dispositivo (por llamarlo de alguna manera) analógico....

Cómo esperas  :wub:  que el puerto serie discrimine esa entrada ?????.... :brickwall:  :brickwall:

Sólo estarás produciendo  ruido ...rdhfjrkmcr...

Para enviar una señal eléctrica,  ' a pelo' necesitas algo que haga las veces de un Modem, entre tu artefacto y el puerto serie... eso de conectar corriente a los pines...  :hitcomp:  directamente...  :hitcomp: ...podrías cargarte la circuitería.  :brickwall:  :brickwall:
«Ma non troppo»
----> ModoVacaciones = False<----

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Mscomm
« Respuesta #8 en: Viernes 27 de Marzo de 2009, 09:27 »
0
(BORRAR)

hugo1983

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Mscomm
« Respuesta #9 en: Domingo 29 de Marzo de 2009, 20:15 »
0
Hola, volviendo al teman anterior, se me ocurrio otra idea, para facilitar el fin del proyecto, pero no se si esto exista o sea posible, talvez alguien me puede ayudar, hay alguna forma de identificar si el puerto serial esta recibiendo voltaje si esto fuera posible solo seria de hacer una condicion que cuando exista voltaje sea igual a 1 y cuando no exista voltaje sea igual a 0, en baso a esto se podria escribir leguanje binario, para luego traducirlo directamente en el software, talvez existe algun activeX para poder saber cuando o cuanto es el voltaje que se esta recibiendo en la computadora por el puerto serial, gracias.

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Mscomm
« Respuesta #10 en: Domingo 29 de Marzo de 2009, 22:29 »
0
Cita de: "hugo1983"
... talvez alguien me puede ayudar, hay alguna forma de identificar si el puerto serial esta recibiendo voltaje ...
Queda patente que no tienes ni idea del significado del término 'digital', para ti quizás signifique algo como: 'aparato o técnica que se puede o permitie utilizar con los dedos', si no, no se explica. Es lamentable que alguien que 'está terminando su proyecto de fin de carrera' no sepa la base de la carera que está  ¿ finalizando ?... en fin, a lo que vamos...

... no te compliques, hay métodos más sencillos que experimentar 'a las aguas bravas'...
Por qué no tomas un viejo ratón de esos de bola (que funciones), le abres las tripas, lo modificas 'ligeramente' (esto es elimina todo excepto, uno de los pulsadores 'click')... y lo 'recubres dentro de una cajita adaptado a tus necesidades, de modo que lo que antes era un burdo interruptos ahora sea un pulsador...

Esto te elimina complejidades de harware ( que te son necesarias eliminar, cuando no tienes ni pajolera idea)...

...y por tanto ya sólo te centras en leer el puerto serial... no necesitas drivers de ratón, el driver es tu programa de lectura del puerto serie sobre dicho ratón...

Si buscas en el foró de VB,  'puerto serie' te aparecerán bastantes temas hablando del mismo: pulsa aquí

... es más, en uno recuerdo haber ayudado a un usuario lo suficiente como para controlar gran parte de ese trabajo ...

p.da.: Recuerda que la tecnología digital funciona por 'pulsos', ciclos de reloj, por tanto no esperes tener un 1 o un 0 así en seco y seguido, usa un timer cuyo intervalo sea por ejemplo 20 (50 veces por segundo) para establecer si es un 0 o si es un 1. hahora si fijo, debes usar una función de llamémosle 'votación popular', esto sería algo como:

Código: Visual Basic
  1.  
  2. ' a nivel de formulario
  3. dim Unos as byte
  4. dim Valor as boolean
  5.  MSComm1.PortOpen = True
  6.  'MSComm1.Settings= ' establecemos las características que deseemos y qeu sean acorde a nuestro hardware
  7.  ' otras acciones
  8.  
  9.  
  10. '  en evento del timer...
  11.  static tics as byte
  12.  
  13.  if comevento= .... then  designado desde un evento:  mscomm1.CommEvent  
  14.       unos=unos +1
  15.  end if
  16.   if tics=50 then
  17.      if cint(unos/2) >= 25 then
  18.            valor=true  ' o si usamos eventos: raiseevent ValorCambiado(True)
  19.      else
  20.           valor=false   ' o si usamos eventos: raiseevent ValorCambiado(false)
  21.     end if
  22.     tics=0
  23.     unos=0
  24.  else
  25.     tics= tics +1
  26.   end if
  27.  
  28.  

aunque mejor usar el evento oncomm del control... necesitas haber establecido previamente de acuerdo a tus requisitos los settings: mscomm1.settings= .....

Código: Visual Basic
  1.  
  2. Private Sub MSComm1_OnComm()
  3.    ' te pongo las referencias de las constantes para que no tengas que conocerlas de memoria, las aquí usadas deberían ser por ejemplo las de error y las de 'onCom'...  para aprovechando el evento con select case...
  4.     Dim errorCom As ErrorConstants
  5.     Dim eventoCom As CommEventConstants
  6.     Dim tipoCom As InputModeConstants  ' modo binario ó modo texto
  7.     Dim controlCom As HandshakeConstants
  8.     Dim onCom As OnCommConstants  '
  9.  
  10.     Select Case MSComm1.CommEvent
  11.       ' detectar errores
  12.           Case comEventTxFull   ' el buffer está lleno
  13.           Case comReadError   ' error al leer el puerto
  14.             ' ...
  15.             ' ...
  16.           Case comGetNotSupported
  17.              MsgBox "La propiedad es de sólo lectura..."
  18.           Case comPortNotOpen
  19.              MsgBox "El puerto no se ha podido abrir..."
  20.             ' ...
  21.       ' detectar evento esperado
  22.           Case comEvRing   ' el indicador de llamadas ha cambiado
  23.          
  24.           Case comPortOpen   ' el puerto está abierto
  25.               MsgBox "Se ha abierto el puerto exitosamente."
  26.              
  27.     End Select
  28.  
  29.  
  30.  

...y para terminar ... también puedes optar por algo más en sintonía y simple con lo que quieres...:

Pones a la escucha el puerto, una vez abierto
Código: Visual Basic
  1.  
  2. ' a nivel de formulario
  3. dim Salir as boolean
  4. dim buffer as string
  5. dim Valor as boolean
  6.  
  7. ' en evento load
  8. '    busca un puerto serie libre,
  9. '    establece los settings
  10. '    abre el puerto, después de cargado pulsa en el botón de escuchar el puierto serie, añade un botón de parar...
  11.  
  12. ' en enveto de un botón: 'escucharPuertoSerie'
  13. Do
  14.       DoEvents
  15.        Buffer =  MSComm1.Input
  16.       ' no colocar aquí doevents....
  17.       if buffer <> "" then
  18.          Valor=true  
  19.          ' tus acciones
  20.          
  21.          buffer=""
  22.          Valor=false   ' esto podría no ser necesario, dependerá del modo en que se diseñe y utilice...
  23.       else
  24.            Valor=false  
  25.           ' otras acciones
  26.        end if
  27. Loop Until salir=true
  28.  
  29.  
salir se activa y desactiva con un botón o un checkbox...
La comparación de buffer determina que se está leyendo obviamente cuando hagas click se entenderá diferente que cuando no, por tanto una vez finalizado la lectura de buffer, hay que poner 'a cero'  por código no por evento pués no pulsación no genera evento...

ya tienes todo lo suficiente para avanzar y terminarlo... para la próxima di cosas más coherentes...
«Ma non troppo»
----> ModoVacaciones = False<----

deaven

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Mscomm
« Respuesta #11 en: Lunes 13 de Abril de 2009, 02:01 »
0
Hola

Hugo, si todavía sigues utilizando el interruptor en lugar del ratón sugerido x Nebire, quizá tu problema se solucionaría poniéndole un capacitor (condensador), k vaya desde tierra a la salida del interruptor.

Para encontrar el valor del capacitor tendrías k encontrarlo un poco con la práctica. Desde unos cuantos picofaradios hasta unos cuantos microfaradios.

Alguna vez hice un decodificador de televisión análogico (cuando nadie lo hacía todavía) y necesitaba k para activarse, el usuario pusiera una determinada secuencia de teclas desde los botones de la TV. Y fue ahí donde se me presentaba este problema. Al analizar con el osciloscopio la salida del interruptor cuando se accionaba, esta salida tenía precisamente mucho ruido. Mi solución fue la k te comento.

Saludos