C# de série de la communication avec le gps u-blox
J'ai un GPS de u-blox.com avec une connexion USB et le pilote. Le pilote s'installe un virual port COM qui apparaît lorsque vous branchez la clé USB dans. À l'aide d'un hyperterminal je peux alors regarder le flux de données du GPS.
Alors je veux les données dans mon programme, pas si facile...
J'ai mis en œuvre des méthodes à l'aide de la classe serialPort de lire à partir du GPS, mais je suis à l'échec. J'ai programmé plusieurs de série de l'appareil les lecteurs et les écrivains avant en C#, mais celui-ci m'arrête.
Par exemple, le simple code dans simpleSerial ne vous donnera pas grand-chose si vous débranchez et rebranchez le câble USB.
Ont essayé de le lire avec matlab, qui fonctionne très bien, mais comme le reste de mon programme qui a besoin des données GPS est en c#, qui ne correspond pas du tout à résoudre le problème.
Est-il un haut niveau de C# choses qui se passent dans la classe serialPort que je peux contourner? Ou est-il connu des problèmes de lecture USB-serialports, qui, je suppose fonctionne comme mon GPS?
OriginalL'auteur user36927 | 2008-11-12
Vous devez vous connecter pour publier un commentaire.
J'ai utilisé avec succès la classe SerialPort .Net 2 aussi avec le gps sur un virtuel comport. Il semble que votre virtuel comport pilote est légèrement décalé. Si vous ne parvenez pas à trouver un pilote plus récent je vous suggère d'appeler la WinAPI fonctions de lecture du port série.
Prendre un coup d'oeil à ce code par exemple:
http://www.codeproject.com/KB/system/SerialPortComm.aspx
Un peu de code ici aussi: codeproject.com/KB/system/serial.aspx
OriginalL'auteur sindre j
Si vous pouvez communiquer avec le GPS en utilisant HyperTerminal alors, en principe, il n'y a aucune raison pourquoi vous ne devriez pas être en mesure d'en C#. Êtes-vous sûr que vous avez configuré le port série correctement, en particulier le débit en bauds, bits de données, bits d'arrêt, parité, et les paramètres de contrôle de flux?
Vous pouvez utiliser SysInternals PortMon outil pour examiner le faible niveau des I/O et comparez les HyperTerminal et votre programme C# chaque configurer le port série. Peut-être que cela permettra de fournir de l'information utile.
OriginalL'auteur ChrisN
Obtenu ce à partir de u-blox soutien.
L'hexadécimal suivant commande de la force d'un watchdog reset du module GPS.
Cela fonctionne pour moi.
OriginalL'auteur
Ne sais pas si c'est le même problème que vous rencontrez.
J'ai remarqué que si le RX_FLAG est utilisé avec SetCommMask API, le GetOverlappedResult ne semble pas, est de retour après la première WaitCommEvent. Il semble que l'API est d'attendre que quelque chose se passe jusqu'à ce que la com masque est remise à zéro (c'est du moins ce que j'ai remarqué). Cependant, il ya encore certaines données reçues si vous allez lire le port après quoi, l'appareil ne répond plus. Dans ce scénario, vous avez besoin de débrancher et rebrancher l'appareil pour obtenir de répondre à nouveau.
Toutefois, si le RX_CHAR est utilisé au lieu de cela, le GetOverLappedResult revient avec le bon état et l'appareil fonctionne normalement.
Espère que cette information aide.
OriginalL'auteur
Le problème est qu'il y a un bug dans le port Série USB ou pilotes de Microsoft de la mise en œuvre de leurs SerialPort classes. J'ai eu exactement les mêmes problèmes avec l'USB à Série de cartes à l'aide de jetons faite par le Prolifique (et donc les pilotes par le Prolifique).
Je n'ai pas été en mesure de cerner le problème exactement, mais maintenant que l' .NET Framework code source est disponible, je vais essayer de faire un pas dans SerialPort et voir quel est le problème exactement.
Un travail est d'utiliser une Série de différente classe d'accès. Avant de .Net 2.0 j'avais écrit un SerialStream classe et pour une raison quelconque, il semble bien fonctionner avec ces mêmes USB à Série de Cartes que la classe SerialPort ne fonctionnera pas avec.
Vous pouvez vous saisir de ma classe à http://www.6bit.com/download/SerialStream.zip j'ai fourni ce même code pour certains collègues GPS programmeurs au fil des ans et ils ont aussi eu du succès avec elle.
OriginalL'auteur joshperry
J'ai utilisé le code suivant pour communiquer via USB à un Arduino, c'envoyer et de recevoir un octet de l'Arduino. C'est simple, et n'est pas parler à un GPS, mais j'espère qu'il va l'aider en quelque sorte!
OriginalL'auteur Dan McClain
Eu le même problème avec un GPS U-Blox, mais a réussi à le résoudre par l'activation de la DTR et RTS propriétés. Maintenant je peux lire les phrases NMEA à l'amende juste. Un problème que j'ai constaté, c'est que j'ai encore à retirer et rebrancher mon GPS sur le port USB de temps en temps.
Espérons que cela aide.
OriginalL'auteur
J'ai rencontré un problème similaire dans une application que j'écrivais et le problème s'est avéré être que j'essayais de nous
SerialPort.WriteLine
qui envoie un\r\n
à la fin de la ligne lorsque j'ai vraiment besoin de simplement envoyer\n
. Quand je suis passé àSerialPort.Write
avec un\n
ajouté à la fin, tout a fonctionné comme dans HyperTerminal.OriginalL'auteur Jon Norton
Essayez d'utiliser des poignées de main/contrôle de flux. Ils sont également utiles lors de l'utilisation d'un adaptateur usb-série.
OriginalL'auteur Juan Liska