julienexam
Messages postés21Date d'inscriptionmardi 3 avril 2012StatutMembreDernière intervention12 avril 2012
-
11 avril 2012 à 10:45
julienexam
Messages postés21Date d'inscriptionmardi 3 avril 2012StatutMembreDernière intervention12 avril 2012
-
12 avril 2012 à 08:18
Bonjour,
J'ai fait un programme sur excel 2003/VBA pour communiquer entre mon ordinateur et une balance via un port série.
Lorsque je lance mon programme aucune erreur ne s'affiche, mais je n'arrive pas à récupérer les infos envoyées par la balance. En effet, je voudrais rentrer dans un textbox la valeur de la balance en appuyant sur un bouton de mon userform.
Voici le programme :
Private Sub CommandButton1_Click()
' Tampon devant contenir la chaîne d'entrée
Dim Buffer As String
Dim t As Long
' Utilise COM1
MSComm1.CommPort = 5 ' port usb à gauche de l'ordinateur.
' 9600 bauds, pas de parité, 8 bits de données et 1 bit d'arrêt.
MSComm1.Settings = "9600,N,8,1"
' Indique au contrôle qu'il doit lire la totalité
' du tampon si la propriété Input est utilisée.
MSComm1.InputLen = 0
' Ouvre le port.
MSComm1.PortOpen = True
' Envoie la commande "lecture" de la balance.
MSComm1.Output = "S" & vbCrLf
MSComm1.InputLen = 10
t = Timer + 4: Do Until Timer > t: DoEvents: Loop
TextBox1.Value = MSComm1.Input
Dim data As String
data = MSComm1.Input
TextBox1.Text = data
If MSComm1.PortOpen True Then MSComm1.PortOpen False
End Sub
Est ce que quelqu'un aurait une idée? Je pense avoir bien programmée la balance et avoir envoyée la bonne commande.
Genildf
Messages postés270Date d'inscriptionlundi 12 janvier 2009StatutMembreDernière intervention30 décembre 20151 11 avril 2012 à 15:08
Private Sub MSComm_OnComm ()
Select Case MSComm1.CommEvent
' Handle each event or error by placing
' code below each case statement
' Errors
Case comEventBreak ' A Break was received.
Case comEventFrame ' Framing Error
Case comEventOverrun ' Data Lost.
Case comEventRxOver ' Receive buffer overflow.
Case comEventRxParity ' Parity Error.
Case comEventTxFull ' Transmit buffer full.
Case comEventDCB ' Unexpected error retrieving DCB]
' Events
Case comEvCD ' Change in the CD line.
Case comEvCTS ' Change in the CTS line.
Case comEvDSR ' Change in the DSR line.
Case comEvRing ' Change in the Ring Indicator.
Case comEvReceive ' Received RThreshold # of
' chars.
Case comEvSend ' There are SThreshold number of
' characters in the transmit
' buffer.
Case comEvEof ' An EOF charater was found in
' the input stream
End Select
End Sub
s sera deja mieu que ta tempo
tu pourra mieu gerer la trame envoyé par ta balance
julienexam
Messages postés21Date d'inscriptionmardi 3 avril 2012StatutMembreDernière intervention12 avril 2012 11 avril 2012 à 16:03
J'ai trouvé mon erreur, cela venait de mon microepsilon (port série) que j'avais mal configuré.
Merci Genildf de ta réponse. Mais quand je mets ça à la place de la tempo, cela ne marche plus...
Néanmoins, les valeurs qui rentrent dans mon textbox, qui sont sensé être ceux de la balance, sont sous une forme incompréhensible ( par ex : ë»6öKŠú+ë ). Je n'arrive pas à convertir tout cela en nombres décimal. J'ai essayé avec les fonctions de conversion de types de données ( CSng ), mais je ne m'en sors pas.
julienexam
Messages postés21Date d'inscriptionmardi 3 avril 2012StatutMembreDernière intervention12 avril 2012 11 avril 2012 à 16:43
Oui la parité est la même. Et je viens de changer la parité ainsi que les autres réglages ( sur la balance et dans le programme ) en faisant toutes les possibilités du manuel de la balance. A chaque fois les caractères dans mon textbox changent, mais ils sont toujours incompréhensibles.
Genildf
Messages postés270Date d'inscriptionlundi 12 janvier 2009StatutMembreDernière intervention30 décembre 20151 11 avril 2012 à 17:07
pour le code que j'ai mit plus haut c pas pour remplace :D
c'est l'evenment lié a ton mscomm1 tu doit l'avoir dans tes declaration
genre:
Private Sub CommandButton1_Click()
' Tampon devant contenir la chaîne d'entrée
Dim Buffer As String
Dim t As Long
' Utilise COM1
MSComm1.CommPort = 5 ' port usb à gauche de l'ordinateur.
' 9600 bauds, pas de parité, 8 bits de données et 1 bit d'arrêt.
MSComm1.Settings = "9600,N,8,1"
' Indique au contrôle qu'il doit lire la totalité
' du tampon si la propriété Input est utilisée.
MSComm1.InputLen = 0
' Ouvre le port.
MSComm1.PortOpen = True
' Envoie la commande "lecture" de la balance.
MSComm1.Output = "S" & vbCrLf
end sub
Et pout ton retour de port:
Private Sub MSComm1_OnComm ()'Ca tu doit l'avoir en declaration
Select Case MSComm1.CommEvent
' Handle each event or error by placing
' code below each case statement
' Errors
Case comEventBreak ' A Break was received.
Case comEventFrame ' Framing Error
Case comEventOverrun ' Data Lost.
Case comEventRxOver ' Receive buffer overflow.
Case comEventRxParity ' Parity Error.
Case comEventTxFull ' Transmit buffer full.
Case comEventDCB ' Unexpected error retrieving DCB]
' Events
Case comEvCD ' Change in the CD line.
Case comEvCTS ' Change in the CTS line.
Case comEvDSR ' Change in the DSR line.
Case comEvRing ' Change in the Ring Indicator.
Case comEvReceive
'Ici tu met ton code pour gerer ta trame avec ton textbox
TextBox1.Value = MSComm1.Input
Dim data As String
data = MSComm1.Input
TextBox1.Text = data
If MSComm1.PortOpen True Then MSComm1.PortOpen False
'ton code de reception
Case comEvSend
Case comEvEof '
End Select
End Sub
julienexam
Messages postés21Date d'inscriptionmardi 3 avril 2012StatutMembreDernière intervention12 avril 2012 12 avril 2012 à 08:18
Le problème venait tout simplement d'un port série défaillant. Je l'ai changé et cela fonctionne. Je te remercie Genildf de ton aide et de tes conseils.