Autor Tema: [PREGUNTA] Como usar el Systems.IO.Ports en .NET Compact Framework 2? vb o c#...  (Leído 4041 veces)

0 Usuarios y 1 Visitante están viendo este tema.

coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
Hola, bueno me encuentro con un GPS chino que tiene windows CE 6.0, y posee varios puertos serie.
El COM1 es el GPS en si, se usa a 4800bps, sin paridad, 1 bit de stop.
El COM3 es un serie que esta en la placa, la cual tambien quiero usar.

Hice pruebas asi nomas, sin mucha profundidad, y el COM1 me tira IOException (sin ningun tipo de informacion) al momento de abrirlo.
Con el COM3, se abre, pero cuando recibe algun dato, me tira NotSupported (yo leo la data con .ReadByte).

La verdad que no entiendo un moco de porque no funciona, alguna ayuda seria ideal.
O algo que ya este probado, y que funcione.

PD: Uso VS2005.
Gracias
'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion

seba123neo

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Hola, coco, te cuento mi experiencia con los GPS, he programado para los smarphones de windows mobile que tienen GPS (por ejemplo los motorola symbol), para eso no uso mas que lo que vos estas usando, no hay mas ciencia en esto, uso la clase System.IO.Ports, declaro un puerto COM, lo abro con las propiedades, (Parity, StopBits, DataBits, BaudRate)  esas propiedades tienen que ser exactas sino te lee cualquier cosa o no hace nada, despues una ves aberto comienza a llegar info al puerto, mas presisamente lo que se llaman "tramas", con la informacion de la latitud y longitud y todo tipos de datos, cuando llega la trama que a mi me interesa, la parseo y listo obtengo la latitud-longitud y la guardo.

no se que codigo estas usando, pero sirve cualquier codigo que haya en internet de manejo de puertos, por ejemplo yo uso esta funcion para leer la trama:

Código: (vbnet) [Seleccionar]
    Public Function leerPuertoSerie() As String
        Try
            If puertoSerie.IsOpen Then
 
                Dim bData As Byte() = Nothing
                Dim numberOfBytes As Integer = 256

                bData = New Byte(numberOfBytes - 1) {}

                puertoSerie.Read(bData, 0, numberOfBytes)
                puertoSerie.DiscardInBuffer()

                Return System.Text.Encoding.UTF8.GetString(bData, 0, numberOfBytes)
            Else
                Return ""
            End If
        Catch Ex As Exception
            Return ""
        End Try
    End Function

eso me devuelve el string con la trama.

y asi lo abro:

Código: (vbnet) [Seleccionar]
                puertoSerie.PortName = "COM8"
                puertoSerie.Parity = Parity.None
                puertoSerie.StopBits = StopBits.One
                puertoSerie.DataBits = 8
                puertoSerie.BaudRate = 4800

                puertoSerie.Open()

saludos.

coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
seba, lo pruebo cuando pueda. basicamente yo usaba lo mismo, pero en vez de setear propiedad x propiedad, se las pasaba a todas con el set puertoSerie = new SerialPort("COM1"...... etc)
pero tengo una duda, yo puedo usar el evento para leer los bytes? o tengo que pollear con un timer?
'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion