Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Leer Parte De La Respuesta Del Puerto Serie
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Leer Parte De La Respuesta Del Puerto Serie 
 
Hola.
Estoy intentando leer una parte de la cadena que recibo del puerto serie.
Para ello, hago una petición al puerto serie y con MID$, quiero mostrar parte de la respuesta.
El código es:
PUBLIC SUB Button5_Click()
 DIM s AS String
  PRINT #Sport, Chr$(2) & "TW?" & Chr$(13)
  READ #Sport, s, Lof(Sport)
  TextBox2.Text = Mid$(s, 6,4)
  TextArea1.Text = TextArea1.Text & s
END

El puerto serie me contesta, correctamente, ya que el TextArea1, se muestra la respuesta.
Pero la parte de final de la cadena, no me la muestra en el TextBox2.
En la respuesta, el primer carácter es el código Chr$(2) -> A,?,214A,W

¿en que me equivoco?
Saludos.
 



 
Manuel - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Leer Parte De La Respuesta Del Puerto Serie 
 
vamos a ver ...

Primero que veo que haces esto
TextArea1.Text = TextArea1.Text & s

Cuando también puedes hacer esto
TextArea1.text &= s


Ahora lo segundo.

Tu primero envías a #Sport un determinado string y esperas una respuesta ¿es eso? La respuesta es lo que lees inmediatemente detŕas con el read ¿no es así? Porque si es así está mal pero no me meto mas en ello porque no estoy seguro que sea eso.

Lo tercero es que si lees una secuencia de bits digamos 1 0 0 1 tu no puedes meter eso así como así en un textbox. Lo que estarías intentando meter es el ascii 1 mas el ascii 0 mas el ascii 0 mas el ascii 1 y luego quizá te sorprendas que lo que lees en el textbox no parece ser correcto. Tampoco estoy nada seguro si te estoy interpretando bien pero lo que es seguro es que no se pueden meter valores binarios así como así en un textbox. Ese 1 tendrías que pasarlo a su valor ascii y la forma mas simple de hacerlo es a cada elemento sumarle el ASCII de 0 y completar el text con ese valor. Por último ten cuidado con las transformaciones porque el string binario 1001 tiene el valor decimal 9, pero si haces un cint o un clong o algo así (por ejemplo para usar la función hex) lo que vas a obtener no es un 9 sino un 1001.

Espero tu respuesta para poder explicarme con mas claridad.
 



 
última edición por soplo el Miercoles, 27 Julio 2011, 03:23; editado 1 vez 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Leer Parte De La Respuesta Del Puerto Serie 
 
Lo que pasa es que el caracter 0x02 no es imprimible. Lo que te recomiendo es que pongas su representación numérica en decimal o hexadecimal (usa las funciones Asc() y Hex$() ).
Y sigue también las recomendaciones de soplo.

Saludos!
 



 
razaAztk - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuarioVer la galería personal del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Leer Parte De La Respuesta Del Puerto Serie 
 
Hola Soplo.
Gracias por tu respuesta.
Ya he cambiado la linea que me indicas.
Estoy intentando gobernar un carro de una maquina. Este maquina, responde a las preguntas que se le hace, y cuando se mueve el carro que tiene, indica en cada momento, la posición que va tomando.
Con la orden, le interrogo en que posición esta
  PRINT #Sport, Chr$(2) & "TW?" & Chr$(13)
  



Con la orden
TextArea1.Text &= s

Ella me responde con la siguiente linea.
A,?,214A,W
el formato de la respuesta es el código Chr$(2) seguido de "A,?,214,W"
Los tres dígitos, es este ejemplo 214, es la posición en la que esta, y "W" que es una lectura fija

Mi problema es que quiero leer los dos últimos valores (en este caso 214,W)
Puse un TextBox, para mostrar que funcionaba, lo que me interesa es el valor, para sino mandar una orden y posicionarlo en el punto exacto.

Si pongo
LINE INPUT #Sport

Me da un mensaje de erro diciendo que el fichero ha llegado al final.
He intentado solucionarlo con:
PUBLIC SUB Button8_Click()
DIM UnaLinea AS String
PRINT #Sport, Chr$(2) & "A?" & Chr$(13)
  WHILE NOT Eof(Sport)
  LINE INPUT #Sport, UnaLinea
  PRINT UnaLinea
  WEND
TextBox3.Text = UnaLinea
END
 

No da error, pero no me aparece en el TextBox.
He utilizado cint o un clong, pero me da erro de que espera un tipo pero recibo otro.
¿Como debería de hacerlo?

Un cordial saludo.
Manuel
 



 
Manuel - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Leer Parte De La Respuesta Del Puerto Serie 
 
Hola,
He conseguido algo.
Con el siguiente código:
PUBLIC SUB Button9_Click() 'Opcion INPUT Line
DIM Datos_Serie AS String
DIM LineaDatos AS String[]
  IF Sport.Status = Net.Active THEN
    PRINT #Sport, Chr$(2) & "TW?" & Chr$(13)
    WHILE NOT Eof(Sport)
      LINE INPUT #Sport, Datos_Serie        
      LineaDatos = Split(Datos_Serie, ",")  ' como los datos están separados por comas
    WEND
  ENDIF
  IF Len(Datos_Serie) > 0 THEN   ' puesto para que no salga el error "Null Object"
    label4.Text = LineaDatos[2]
    label3.Text = LineaDatos[3]
  ENDIF
  Datos_Serie = ""
END

Funciona, ahora
LineDatos[3], muestra la letra de que la medida es estable
LineDatos[2], muestra el valor de la posición.

Pero:
Cuando le doy un click no me da ningún valor, tengo que darle dos veces al botón para que me muestre el valor.
Por eso le he puesto el
  IF Len(Datos_Serie) > 0 THEN   ' puesto para que no salga el error "Null Object"

para evitar el error
¿alguna idea?
Saludos y gracias.
Manuel.
 



 
Manuel - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Leer Parte De La Respuesta Del Puerto Serie 
 
Citar:
Pero:
Cuando le doy un click no me da ningún valor, tengo que darle dos veces al botón para que me muestre el valor.


Yo creo que es porque la primera vez que preguntas "IF Sport.Status = Net.Active" es falso. No estoy seguro.

Yo usaría el evento _Read() del puerto serie para leer el buffer de datos del puerto serie, en lugar de hacerlo mediante un botón, y dejaría para dicho botón el envío manual de las órdenes hacia el dispositivo, es decir, la escritura. El evento Read se dispara siempre que haya datos pendientes de leer en el puerto, sólo tienes que trasladar la parte de tu código que se encarga de leerlo.

Si el puerto serie lo has creado desde el IDE de gambas, ya estarán declarados su manejadores de eventos, pero si lo has creado por código deberás hacerlo manualmente de esta forma:

Public Sport as new SerialPort as "Sport"


Y luego declarar el manejador:

Public  Sub Sport_Read()

' código aquí

End


Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Puerto Serie Pablo-GNU General 2 Jueves, 16 Septiembre 2010, 14:11 Ver último mensaje
Pablo-GNU
No hay nuevos mensajes Red Hat - Puerto Serie - Mysql nae0254 General 2 Domingo, 12 Junio 2011, 15:30 Ver último mensaje
nae0254
No hay nuevos mensajes Ayuda Con El Puerto Serie duchy69 Aplicaciones/Fragmentos de Código 2 Sabado, 08 Octobre 2011, 03:41 Ver último mensaje
razaAztk
No hay nuevos mensajes No Puedo Abrir El Puerto Serie(solucionado) xmuno Controles/Librerías/Componentes 3 Jueves, 24 Marzo 2016, 10:24 Ver último mensaje
shordi
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron