https://foro.gambas-es.org/viewtopic.php?f=4&t=101&p=350#p350
-----------------------------------
ariel
Lunes, 05 Octobre 2009, 22:54

Re: SerialPort: Problema Con ¿longitud Del Buffer?
-----------------------------------
Hola Soplo!
Gracias por la respuesta.

Vamos por parte, por que me parece que en el apuro por resolver esto no he sido nada (pero nada!) claro :)

Tengo un osciloscopio con salida para PC, por puerto serie. Uno le manda comandos, y el responde con una cadena de bytes. La mayoria de los comandos devuelven cadenas cortas (una tension, frecuencia, cosas asi). Peeeeeero .....hay uno que devuelve la imagen de la pantalla, y me interesa de sobre manera poder leerla por que de esa forma podria graficar e imprimir (entre otras cosas) lo que estoy midiendo.

Aclaro de nuevo que no tengo mucha idea de Gambas (aunque creo que eso ya quedó reclaro! :) )

Use "Sleep" por que lo vi en otro ejemplo....y sin ella no podia leer nada. Con ese pequeño retardo los comandos "cortos"andan.

La cadena larga que quiero leer tiene el siguiente formato:

[img]http://foro.gambas-es.org/files/images/115/pantallazo.png[/img]

No se ve muy bien, pero la idea es que hay 6 bytes al principio -4 de los cuales contienen la longitud total de la cadena ( el "1008")- y atras vienen los datos en si. Los datos están en hexadecimal....

Mi codigo parece que los trata como caracteres, y ahi me aparece el problema.

Si hago esto:
[code linenumbers=false syntax=gambas]PUBLIC SUB bLeerDatos1_Click()
  DIM saux AS String
  IF conPuertoSerie.Status = Net.Inactive THEN
    Message("Hay que conectarse antes!")
  ELSE
      PRINT #conPuertoSerie, ":ACQ1:POIN"; Chr$(13); Chr$(10);

      SLEEP 0.025
      TRY READ #conPuertoSerie, saux, 7
          TextArea1.Text = saux 
      END IF      
END
[/CODE]
Lee los primeros 7 bytes bien. Si intento leer 8, me sale el error del post anterior.

Asi es como abri la conexion:

[code linenumbers=false syntax=gambas]
PUBLIC SUB Form_Open()
  conPuertoSerie = NEW SerialPort AS "conPuertoSerie"
END

PUBLIC SUB bConectar_Click()
IF conPuertoSerie.Status = Net.Active THEN
  CLOSE conPuertoSerie
  TextArea1.Text = "Desconectado."
  bConectar.Text = "Conectar"
 ELSE
  ' Line parameters
  conPuertoSerie.PortName = "/dev/ttyS0"
  conPuertoSerie.Speed = 19200
  conPuertoSerie.Parity = 0
  conPuertoSerie.DataBits = 8
  conPuertoSerie.StopBits = 1
  conPuertoSerie.FlowControl = 0
  conPuertoSerie.Open()
  conPuertoSerie.DTR = 1
  conPuertoSerie.RTS = 1
  'Check_Status()
  IF conPuertoSerie.Status = Net.Active THEN
    TextArea1.Text = "Conectado a " & conPuertoSerie.PortName & "(" &
    conPuertoSerie.Speed & "baudios, " & conPuertoSerie.Parity & "," & conPuertoSerie.DataBits & "," &
    conPuertoSerie.StopBits & ")" & Chr(13) & Chr(10)
     bConectar.Text = "Desconectar"
  END IF
END IF
END[/code]

Espero ahora, mas tranquilo, haber sido mas claro :)

El 0x83 que me manda el aparato debe darme un error por estar encima del caracter (decimal) 127....o al menos eso es lo que me imagino. Seguramente estoy equivocado ...... :sad:


