cs_choupinoob
Messages postés27Date d'inscriptiondimanche 25 janvier 2009StatutMembreDernière intervention27 juin 2011
-
14 juin 2011 à 16:39
cs_choupinoob
Messages postés27Date d'inscriptiondimanche 25 janvier 2009StatutMembreDernière intervention27 juin 2011
-
17 juin 2011 à 14:55
Bonjour à tous.
Voila j'ai adapté un code permettant de récupérer les valeurs d'un port série pour m'en servir sur Excel.
Malheureusement ce code, me permet (par l'appuie sur un bouton), de récupérer uniquement une seule fois les valeurs émise. Ensuite le programme freeze et je suit obligée de passer par ctrl+alt+Suprr pour le fermer.
Je vous joint ici le code et toute aide serait la bienvenue.
Public valeur As String
Public fin_trame As Boolean
'Ouverture du port à l'ouverture du Userform
Private Sub UserForm_Activate()
On Error GoTo Gestion_erreur
'Vider le buffer
MSComm1.InBufferCount = 0
'Vérification que les paramètres du port n'ont pas changés
If MSComm1.CommPort <> 2 Or MSComm1.Settings <> "1200,o,7,1" Or MSComm1.InputLen <> 1 Or MSComm1.Handshaking <> comXOnXoff Then
'choisir un port série
MSComm1.CommPort = 2 ' 2 est le n° de port sur lequel est connecté l'appareil
'Paramétrage du port; les valeurs sont fournies par le constructeur de l'appareil.
'L'appareil utilisé dans cet exemple requiert les valeurs suivantes: 1200 bauds, bit de parité, 7 bits de données, 1 bit d'arrêt
MSComm1.Settings = "1200,o,7,1"
' indique au contrôle qu'il doit lire 1 seul caractère
MSComm1.InputLen = 1
'Indique le type de contrôle de flux
MSComm1.Handshaking = comXOnXoff
End If
'ouvre le port
MSComm1.PortOpen = True
Ufrm_Comm.Hide
Exit Sub
Gestion_erreur:
Ufrm_Comm.Hide
Fermeture_port
MsgBox "Aucun matériel connecté sur le port Comm2"
End Sub
'Script qui se lance à la reception de données sur le port Com
Private Sub MSComm1_OnComm()
Dim tampon As String
Select Case MSComm1.CommEvent
Case comEvReceive ' Si on reçoit des données
tampon = MSComm1.Input
Call Traitement(tampon) ' Routine de traitement
'Case comEvSend ' Il y a des caractères à envoyer
'Case comEvEOF ' On a reçu le caractère EOF
End Select
End Sub
'Script permettant de mettre en forme les données reçu sur le port Com
Sub Traitement(tampon As String)
'Si le caractère récupéré n'est pas un "saut de ligne" ou un "retour chariot"
If tampon <> Chr$(10) And tampon <> Chr$(13) Then
If tampon = "." Then
tampon = "," 'Remplacement du "." par une ","
ElseIf tampon = " " Then
tampon = "" 'Non prise en compte des "espace"
End If
'Si la dernière trame avais fini d'être récupérée
If fin_trame = True Then
valeur = "" 'Initialisation de la variable
fin_trame = False 'Initialisation de la mémorisation de fin de trame
End If
'Insertion de données reçues dans la variable
valeur = valeur & tampon
'Si le caractère récupéré est un saut de ligne (Dernier caractère de la trame)
ElseIf tampon = Chr$(10) Then
Ufrm_interface.TxtB_poids.Value = valeur 'Ecriture du poids dans le champs TextBox de l'interface
fin_trame = True 'Mémorisation fin de trame atteinte
End If
End Sub
'Script permettant de lancer un tarage de la balance
Private Sub CommandButton2_Click()
'Si la communication sur le port Comm n'est pas mis en route
If Ufrm_Comm.MSComm1.PortOpen = False Then
'Ouverture du UserForm permettant de lancer la communication sur le port Comm
Ufrm_Comm.Show
End If
'Si la communication sur le port Comm est bien en route
If Ufrm_Comm.MSComm1.PortOpen = True Then
Ufrm_Comm.MSComm1.Output = Chr(27) & Chr(84) & Chr(13) & Chr(10) 'Envoie des caractères "ESC" + "T" + "CR" + "LF"
End If
End Sub
'Script qui se lance à la fermeture du UserForm
Private Sub UserForm_Terminate()
'Appel de la routine de fermeture du port de communication
Fermeture_port
End Sub
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 16 juin 2011 à 10:27
Salut,
Je pense que le probleme vient du fait que tu essais d'ouvrir un port déjà ouvert.
En fait si tout c'est bien passé la première fois, à aucun moment ton code ne ferme le port !
Ufrm_Comm.Hide ne termine pas la form ! elle est toujours en mémoire mais non visible.
Pour que l’événement "terminate" ce déclenche il faut utiliser :
Unload Ufrm_Comm
mais attention tu ne pourras pas juste remplacer Ufrm_Comm.Hide par Unload Ufrm_Comm sinon tout s'arrete.
Il faut bien positionner Unload Ufrm_Comm en fin de traitement.
Tu peux peut être essayer en plus de ce que je t'ai dit précédemment d'ajouter une ligne qui verifi si le port est déjà ouvert avant de tenter de l'ouvrir à nouveau.
Soit à l'initialisation de la form soit dans ta sub "UserForm_Activate"
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 14 juin 2011 à 20:01
Salut
Exécute-le en pas-à-pas pour savoir où ça déconne :
Débogage :
- F9 sur une ligne de code; elle change de couleur
Le programme s'y arrêtera au prochain passage
Survole avec la souris tes variables pour visualiser leur contenu, ou va dans la fenêtre de debogage (Ctrl-G) et tape
? maVariable
pour qu'elle s'inscrive dans la fenêtre.
- F8 (VB6) ou F10 (.Net) pour avancer d'une ligne de code
- F5 pour continuer normalement
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_choupinoob
Messages postés27Date d'inscriptiondimanche 25 janvier 2009StatutMembreDernière intervention27 juin 2011 15 juin 2011 à 08:48
Alors, j'ai tenté le pas à pas. Le programme freeze toujours lorsque je re clique pour récupérer une deuxième valeur sans que je puisse voir quel ligne de code en est la cause.
En débogage, ma variable est bien égale aux valeurs émises.
cs_choupinoob
Messages postés27Date d'inscriptiondimanche 25 janvier 2009StatutMembreDernière intervention27 juin 2011 17 juin 2011 à 14:55
Edit, j'ai réussi à trouvé le truc, ta solution marche bigfish_le_vrai! (Merci beaucoup en passant, je pensait de plus en plus à la pendaison )
J'ai une autre question d'ordre plus technique du coup, ce poids que je récupère sous la forme +/- x,xxxkg, puis-je l'utiliser comme une variable appliquable comme toutes autres?