ublox rtk neo m8t m8p datasheet blox c# serial-port gps usbserial
http://www.6bit.com/download/SerialStream.zip

rtk - Comunicación en serie C#con u-blox gps



ublox m8t (9)

He utilizado con éxito la clase SerialPort en .Net 2 también con gps en un puerto virtual. Parece que tu controlador de comportamiento virtual está un poco apagado. Si no puede encontrar un controlador más nuevo, le sugiero que llame a las funciones de WinAPI para leer el puerto serie.

Eche un vistazo a este código, por ejemplo: http://www.codeproject.com/KB/system/SerialPortComm.aspx

Tengo un GPS de u-blox.com con una conexión USB y un controlador. El controlador instala un puerto COM virual que aparece cuando conectas el USB. Utilizando un hyperterminal, puedo ver el flujo de datos del GPS.

Entonces quiero los datos en mi programa, no tan fácil ...

He implementado algunos métodos usando la clase serialPort para leer desde el GPS, pero no he tenido éxito. He programado varios lectores y escritores de dispositivos en serie antes en C #, pero este me detiene.

Como ejemplo, el código simple en simpleSerial no le dará nada a menos que desenchufe y vuelva a conectar el USB.

He intentado leerlo con matlab, que funciona muy bien, pero como el resto de mi programa que necesita los datos del GPS está en c #, eso no soluciona el problema.

¿Hay algunas cosas de alto nivel C en la clase serialPort que puedo eludir? ¿O hay algún problema conocido al leer los puertos serie USB, que supongo que funciona como mi GPS?


Me encontré con un problema similar en una aplicación que estaba escribiendo y el problema resultó ser que me estaba tratando SerialPort.WriteLine que envía un /r/n para terminar la línea cuando realmente necesitaba enviar /n . Cuando SerialPort.Write a SerialPort.Write con /n agregado al final, todo funcionaba como en HyperTerminal.


Si puede comunicarse con el GPS usando HyperTerminal, en principio no hay ninguna razón por la cual no pueda hacerlo en C #. ¿Está seguro de haber configurado correctamente el puerto serie, en particular la velocidad en baudios, los bits de datos, los bits de parada, la paridad y las configuraciones de control de flujo?

Puede usar la herramienta SysInternals PortMon para ver las E / S de bajo nivel y comparar cómo HyperTerminal y su programa C # configuran el puerto serie. Tal vez esto proporcionará información útil.


No estoy seguro de si este es el mismo problema que está experimentando.

Me di cuenta de que si el RX_FLAG se usa con la API SetCommMask, GetOverlappedResult no parece volver después del primer WaitCommEvent. Parece que la API está esperando que algo suceda hasta que se restablezca la máscara com (al menos eso es lo que observé). Sin embargo, todavía hay algunos datos recibidos si va y lee el puerto después del cual, el dispositivo no responde más. En este escenario, necesitaría desconectar y volver a conectar el dispositivo para que responda nuevamente.

Sin embargo, si se usa RX_CHAR, GetOverLappedResult regresa con el estado correcto y el dispositivo funciona de la forma habitual.

Espero que esta información ayude.


El problema es que hay un error en los controladores del puerto serie USB o en la implementación de Microsofts de sus clases SerialPort. He tenido exactamente los mismos problemas con los adaptadores USB a serie que usan chips fabricados por Prolific (y, por lo tanto, los controladores de Prolific).

No he podido limitar el problema exactamente, pero ahora que el código fuente de .NET Framework está disponible, trataré de entrar en SerialPort y ver cuál es exactamente el problema.

Una solución alternativa es usar una clase de acceso en serie diferente. Antes de .Net 2.0, había escrito una clase de SerialStream y, por alguna razón, parece funcionar bien con estos mismos adaptadores USB a serie que la clase SerialPort no funcionará.

Puede obtener mi clase en http://www.6bit.com/download/SerialStream.zip He proporcionado este mismo código a otros programadores de GPS a través de los años y también han tenido éxito con él.


He usado el siguiente código para comunicarme a través de USB a un Arduino, envía y recibe un byte del Arduino. Es simple, y no está hablando con un GPS, ¡pero con suerte lo ayudará de alguna manera!

public static byte ReadByte() { byte byteRead = new byte(); SerialPort port = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One); port.Open(); int byteValue = port.ReadByte(); port.Close(); byteRead = Convert.ToByte(byteValue); return byteRead; } public static void SendByte(byte packet) { SerialPort port = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One); port.Open(); byte[] writeByte = new byte[1]; writeByte[0] = packet; port.Write(writeByte, 0, 1); port.Close(); }


Obtuve el mismo problema con un GPS U-Blox, pero logré resolverlo habilitando las propiedades DTR y RTS. Ahora puedo leer las oraciones NMEA bien. Un problema que encontré es que todavía tengo que quitar y volver a conectar mi GPS al puerto USB de vez en cuando. Espero eso ayude.


Intente usar handshakes / control de flujo. También son útiles cuando se utiliza un adaptador de serie usb.


Obtuve esto del soporte de u-blox.

El siguiente comando hexadecimal obligará a un restablecimiento de vigilancia en el módulo GPS.

B5 62 06 04 04 00 00 00 00 00 0E 64

este es un comando de bajo nivel para el ARM7 uP en el GPS. Funciona con todos los receptores GPS u-blox.

byte[] data = new byte[]{0xB5, 0x62, 0x06, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x64}; sp.Write(data, 0, data.Length);

Esto funciona para mi.