Accueil > > > SYNCHRONISATION HORLOGE PC AVEC HORLOGE GPS VERSION 2
SYNCHRONISATION HORLOGE PC AVEC HORLOGE GPS VERSION 2
Information sur la source
Description
C'est une évolution de mon programme précédent qui utilisait les trames GPS NMEA à 4800 bds RMC. Celles ci ont le léger inconvénient d'un renouvellement toutes les 2 secondes mais elles sont universelles sur tous les GPS. Cette fois ci, j'utilise le protocole propriétaire GARMIN à 9600 bds avec des trames commandées par un timer réglé à 600ms. C'est une approche du protocole GARMIN que je cherche à décoder entièrement. Ce code permet l'acquisition de données en mode binaire avec le composant MSCOMM, en lieu et place du mode text le plus souvent utilisé et documenté. En tout cas je n'ai pas trouvé de code équivalent sur le site vbfrance permettant de recevoir des donnnées 8 bits par MSComm.
Source
- Option Explicit
- Private Declare Function GetTimeZoneInformation Lib "kernel32" (lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long
- Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
-
- Private Type SYSTEMTIME
- wYear As Integer
- wMonth As Integer
- wDayOfWeek As Integer
- wDay As Integer
- wHour As Integer
- wMinute As Integer
- wSecond As Integer
- WMilliseconds As Integer
- End Type
-
- Private Type TIME_ZONE_INFORMATION
- Bias As Long
- StandardName As String * 64
- StandardDate As SYSTEMTIME
- StandardBias As Long
- DayLightName As String * 64
- DayLightDate As SYSTEMTIME
- DayLightBias As Long
- End Type
-
-
- Private Sub cmdSync_Click() 'remise à l'heure du PC avec l'horloge GPS
- Time = lblTime(0)
- End Sub
-
- Private Sub Command1_Click() 'Commande pour cacher la Forme et ouvrir un systray
- Me.Hide
- DWFH_Systray1.CreateSysTray
- End Sub
-
- Private Sub Form_Load()
- Dim intCounter As Integer
-
- For intCounter = 1 To 8
- On Error Resume Next
- Form1.GPS.CommPort = intCounter
- Form1.GPS.PortOpen = True
- If Not Err.Number = 8002 Then
- Exit For
- End If
- Form1.GPS.PortOpen = False
- Next intCounter
- ' le premier port com libre est choisi par défaut
-
- With Form1.GPS 'paramètres propres à la réception GPS en mode GARMIN
- .Settings = "9600,N,8,1"
- .Handshaking = 0
- .InputLen = 0
- .RThreshold = 1
- .InBufferSize = 1024
- .NullDiscard = False 'le byte 0 n'est pas filtré (important)
- .InputMode = comInputModeBinary ' entrées en mode binaire (important)
- End With
-
- Debug.Print Form1.GPS.CommPort
- Form1.Timer1.Interval = 60000 ' toutes les minutes
- Form1.Timer1.Enabled = True
- Form1.GPS.PortOpen = True
- Timer2_Timer
- With Timer3
- .Interval = 700
- .Enabled = True
- End With
- Timer3_Timer
- End Sub
-
-
-
- Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
- Timer1.Enabled = False
- GPS.InBufferCount = 0
- GPS.PortOpen = False
- DWFH_Systray1.DestroySysTray
- End Sub
-
- Private Sub GPS_OnComm()
- Dim Buffer() As Byte
- Dim Arr() As Byte
- Dim ret As Long
- Dim nZoneCorrection As Long
- Dim TZI As TIME_ZONE_INFORMATION
-
- Select Case GPS.CommEvent
- Case comEvReceive
- Buffer = GPS.Input
- Arr = Buffer
- If UBound(Arr) >= 7 And Arr(0) = 16 Then ' vérifie si trame réponse valide
- If UBound(Arr) > 20 Then
- If Arr(9) = &HE Then ' trame Date_Time détectée
- Envoi (Chr(&H10) & Chr(6) & Chr(2) & Chr(&HE) & Chr(0) & Chr(&HEA) _
- & Chr(&H10) & Chr(3)) ' envoi trame de fin d'échange
- ret = GetTimeZoneInformation(TZI) ' recherche le fuseau horaire pour afficher l'heure locale
- nZoneCorrection = TZI.Bias
- If ret = 1 Then
- nZoneCorrection = nZoneCorrection + TZI.StandardBias
- ElseIf ret = 2 Then
- nZoneCorrection = nZoneCorrection + TZI.DayLightBias
- End If
- nZoneCorrection = -nZoneCorrection
- lblTime(0) = Format(CStr(Arr(15)), "00") & ":" & Format(CStr(Arr(17)), "00") & ":" & Format(CStr(Arr(18)), "00")
- lblTime(0) = DateAdd("n", nZoneCorrection, lblTime(0)) ' heure locale= heure GPS (UTC) + Correction fuseau
- GPS.InBufferCount = 0 'buffer vidé
- Else
- Exit Sub
- End If
- End If
- End If
- End Select
- End Sub
-
- Private Sub Timer1_Timer()
- Static Compteur As Integer
-
- Compteur = Compteur + 1
- Select Case Compteur
-
- Case 60 'toutes les heures remise à l'heure du PC par le GPS
- Time = lblTime(0)
- Compteur = 0
- Case Else
- End Select
- Debug.Print Compteur
- End Sub
- ' Ouverture du menu systray si click droit de la souris
- Private Sub DWFH_Systray1_Action(Button As Integer, Genre As Long)
- If Button = 2 Then PopupMenu systraymenu
- End Sub
-
-
- Private Sub Timer2_Timer() 'Affichage de l'heure PC toutes les secondes
- lblTime(1) = Format$(Now, "hh:mm:ss") 'toutes les secondes, affichage de l'heure systeme
- End Sub
- Private Sub mnuAfficher_Click()
- Me.Show
- End Sub
-
- Private Sub mnuQuitter_Click()
- End
- End Sub
- Private Sub Envoi(Mot$) 'envoi des trames vers le GPS
- Dim n
- On Error Resume Next
- Do
- DoEvents
- Loop While (GPS.OutBufferCount > 0)
- GPS.Output = Mot$
- Sleep (200)
- End Sub
-
- Private Sub Timer3_Timer() 'commande de demande d'heure au gps au format GARMIN
- Envoi (Chr(16) & Chr(10) & Chr(2) & Chr(5) & Chr(0) & Chr(&HEF) & Chr(16) & Chr(3))
- End Sub
Option Explicit
Private Declare Function GetTimeZoneInformation Lib "kernel32" (lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
WMilliseconds As Integer
End Type
Private Type TIME_ZONE_INFORMATION
Bias As Long
StandardName As String * 64
StandardDate As SYSTEMTIME
StandardBias As Long
DayLightName As String * 64
DayLightDate As SYSTEMTIME
DayLightBias As Long
End Type
Private Sub cmdSync_Click() 'remise à l'heure du PC avec l'horloge GPS
Time = lblTime(0)
End Sub
Private Sub Command1_Click() 'Commande pour cacher la Forme et ouvrir un systray
Me.Hide
DWFH_Systray1.CreateSysTray
End Sub
Private Sub Form_Load()
Dim intCounter As Integer
For intCounter = 1 To 8
On Error Resume Next
Form1.GPS.CommPort = intCounter
Form1.GPS.PortOpen = True
If Not Err.Number = 8002 Then
Exit For
End If
Form1.GPS.PortOpen = False
Next intCounter
' le premier port com libre est choisi par défaut
With Form1.GPS 'paramètres propres à la réception GPS en mode GARMIN
.Settings = "9600,N,8,1"
.Handshaking = 0
.InputLen = 0
.RThreshold = 1
.InBufferSize = 1024
.NullDiscard = False 'le byte 0 n'est pas filtré (important)
.InputMode = comInputModeBinary ' entrées en mode binaire (important)
End With
Debug.Print Form1.GPS.CommPort
Form1.Timer1.Interval = 60000 ' toutes les minutes
Form1.Timer1.Enabled = True
Form1.GPS.PortOpen = True
Timer2_Timer
With Timer3
.Interval = 700
.Enabled = True
End With
Timer3_Timer
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Timer1.Enabled = False
GPS.InBufferCount = 0
GPS.PortOpen = False
DWFH_Systray1.DestroySysTray
End Sub
Private Sub GPS_OnComm()
Dim Buffer() As Byte
Dim Arr() As Byte
Dim ret As Long
Dim nZoneCorrection As Long
Dim TZI As TIME_ZONE_INFORMATION
Select Case GPS.CommEvent
Case comEvReceive
Buffer = GPS.Input
Arr = Buffer
If UBound(Arr) >= 7 And Arr(0) = 16 Then ' vérifie si trame réponse valide
If UBound(Arr) > 20 Then
If Arr(9) = &HE Then ' trame Date_Time détectée
Envoi (Chr(&H10) & Chr(6) & Chr(2) & Chr(&HE) & Chr(0) & Chr(&HEA) _
& Chr(&H10) & Chr(3)) ' envoi trame de fin d'échange
ret = GetTimeZoneInformation(TZI) ' recherche le fuseau horaire pour afficher l'heure locale
nZoneCorrection = TZI.Bias
If ret = 1 Then
nZoneCorrection = nZoneCorrection + TZI.StandardBias
ElseIf ret = 2 Then
nZoneCorrection = nZoneCorrection + TZI.DayLightBias
End If
nZoneCorrection = -nZoneCorrection
lblTime(0) = Format(CStr(Arr(15)), "00") & ":" & Format(CStr(Arr(17)), "00") & ":" & Format(CStr(Arr(18)), "00")
lblTime(0) = DateAdd("n", nZoneCorrection, lblTime(0)) ' heure locale= heure GPS (UTC) + Correction fuseau
GPS.InBufferCount = 0 'buffer vidé
Else
Exit Sub
End If
End If
End If
End Select
End Sub
Private Sub Timer1_Timer()
Static Compteur As Integer
Compteur = Compteur + 1
Select Case Compteur
Case 60 'toutes les heures remise à l'heure du PC par le GPS
Time = lblTime(0)
Compteur = 0
Case Else
End Select
Debug.Print Compteur
End Sub
' Ouverture du menu systray si click droit de la souris
Private Sub DWFH_Systray1_Action(Button As Integer, Genre As Long)
If Button = 2 Then PopupMenu systraymenu
End Sub
Private Sub Timer2_Timer() 'Affichage de l'heure PC toutes les secondes
lblTime(1) = Format$(Now, "hh:mm:ss") 'toutes les secondes, affichage de l'heure systeme
End Sub
Private Sub mnuAfficher_Click()
Me.Show
End Sub
Private Sub mnuQuitter_Click()
End
End Sub
Private Sub Envoi(Mot$) 'envoi des trames vers le GPS
Dim n
On Error Resume Next
Do
DoEvents
Loop While (GPS.OutBufferCount > 0)
GPS.Output = Mot$
Sleep (200)
End Sub
Private Sub Timer3_Timer() 'commande de demande d'heure au gps au format GARMIN
Envoi (Chr(16) & Chr(10) & Chr(2) & Chr(5) & Chr(0) & Chr(&HEF) & Chr(16) & Chr(3))
End Sub
Historique
- 24 janvier 2006 01:09:28 :
- Ajout du Zip
- 25 janvier 2006 20:18:58 :
- Code epuré, corrigé et commenté
- 25 janvier 2006 20:50:24 :
- Correction erreur sur Labeltime(0)
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
MSCOMM et GPS [ par alaintrepide ]
atJe possède un GPS MLR et j'essai de décharger les points d'un parcours que j'ai effectué. Le GPS émet les coordonnées de ces points toutes les 200 m
Dialogue entre un Gps et un Pc [ par gul141 ]
Bonjour,JE suis en train de concevoir un petit prog aéronautique pour utiliser un GPS, mais je ne sais pas utiliser la Fonction Mscomm. Quelqu'un veu
Horloge [ par Aigleduweb ]
J?affiche l?heur dans menu principal de la base de données Access, mais elle reste figée à l?heur de lancement de la base. Comment faire pour l? incr
Comment lire ce qui rentre dans un com 1 ou 2 ? [ par gul141 ]
Je voudrais savoir comment je peux recuperer les infos envoyer par un GPS connecté sur le port com 1 ou 2.Je sais quelles infos je dois attendre de la
MSCOMM besoin d'infos SVP [ par ovRflow ]
qqn pourrait -il me dire si il est possible de telephoner avec vb6 a qqn??? J'ai trouvé comment faire sonner un teleph mé comment recevoir et envoyer
Mscomm [ par phpman ]
Bonjour,j'ai essayer plein de sources qui permettent de telephonner avec Mscomm mais aucune n'a fonctionnée.Je voulais savoir si ça na serait pas le f
Gros pb mscomm pour minitel [ par ren ]
bonjour,J'suis en train de faire un émulateur minitel.J'arrive bien à la page d'accueil du service minitel, et après impossible d'afficher une autre p
MSComm, pourquoi ça ne marche pas ? [ par ren ]
J'ai un pb de communication avec le contrôle MSComm:Connexion au serveur distant avec récupération de la page d'accueil OK, mais c'est après que ça se
Synchronisation Replicas access 97 [ par David2410 ]
Bonjour, J'ai un message d'erreur lorsque je veux faire une synchro depuis mon applic, mon code :Dim DbSrc As DatabaseSet DbSrc = dao.OpenDatabase("C:
Synchronisation enregistrement/lecture wave [ par remy ]
Comment lire un fichier wave et enregistrer en même temps avec unesynchronisation ou plutôt un laps de temps très court et stable entrele départ de la
|
Derniers Blogs
ASYNC/AWAIT: COMPRENDRE COMMENT CA MARCHEASYNC/AWAIT: COMPRENDRE COMMENT CA MARCHE par fathi
Tout le monde est unanime pour dire que la programmation multi-thread et asynchrone est en train de devenir un sujet incontournable. Beaucoup de choses sont arrivées avec le framework 4 pour le code parallèle (TPL, PLinq,.) et bientôt, on va avoir l...
Cliquez pour lire la suite de l'article par fathi PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS !PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS ! par Etienne Margraff
J'ai récemment eu un problème pour obtenir l'intelliTrace sur un site web dans IIS. Il n'y avait pas de message d'erreur, rien dans le journal d'évènement Windows, et après 3 appels à une voyante, 2 visites chez un marabou, j'ai failli me résign...
Cliquez pour lire la suite de l'article par Etienne Margraff OFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONSOFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONS par junarnoalg
De nombreuses entreprises font le choix de SharePoint Online, service fourni au travers de l'offre de Microsoft Office 365. S'il est vrai que ce choix apporte un grand nombre d'avantages; rapidité de mise en œuvre, disponibilité, large couvertu...
Cliquez pour lire la suite de l'article par junarnoalg PRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGEPRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGE par richardc
http://www.c2idotnet.com/articles/presentation-des-api-rest-de-windows-azure-lister-les-comptes-de-storage
Désolé pour "toto", mais c2i existait avant blogs.developpeur.org et c'est mon site "officiel" ;-) ...
Cliquez pour lire la suite de l'article par richardc
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|