Balance RS232 [RESOLU]

pitufo2804

XLDnaute Junior
Bonjour,
Apres quelques recherches sur google je ne trouve pas de solutions concrètes...
J'essaie de développer une "appli" permettant de récupérer des valeurs issue d'une balance connectée en RS232 au PC.
Ma balance est configurée de la sorte :
- 1200bauds
- 7 bits de données
- 1 bit de parité (paire)
- 1 bit de stop
J'ai ces quelques lignes de code afin de récupérer la valeur :
Code:
Private Sub CommandButton1_Click()

With MSComm1
    .InBufferCount = 0
    .CommPort = 1
    .Handshaking = comNone
    .Settings = "1200,o,7,1"
    .InputLen = 3
    .PortOpen = True
End With

Do While MSComm1.Input <> "   +"
Loop

MSComm1.InputLen = 5
    Label1.Caption = MSComm1.Input
    ActiveCell.Value = CSng(Label1.Caption)
    ActiveCell.Offset(1, 0).Select
    
MSComm1.PortOpen = False

End Sub

Mais j'ai une erreur à la ligne " Do While MSComm1.Input <> " +" "
qui me dit :
" Erreur d'éxécution '8020':
Error reading comm device."
J'ai quand même effectué des test avec l'hyper terminal et la com fonctionne sans soucis.
Enfin, sur la doc de la balance, la trame est comme ça :
123456789101112131415.........
BBBSD7D6D5D4D3D2D1DPD0BU...CRLF

BBlancCaractère blanc (espace)
SSignSigne (+,-,espace)
DPDecimal PointPoint décimal
D0...D7DigitsChiffres
UUnitUnité
CRCarriage ReturnRetour Chariot
LFLine FeedSaut de tr

[entete]Sigle[/entete]
[entete]Signification[/entete]
[entete]Descriptif[/entete]
 
Dernière édition:

fhoest

XLDnaute Accro
Re : Balance RS232

Bonjour,
je ne sais pas si je peux vraiment t'aider mais je remarque qu'il y a une instruction inputlen=3,devant la boucle et le test s’effectue sur une longueur de chaine plus grande si je comprend bien,et si je ne comprend pas alors désolé je suis à coté de la plaque.
A+
 

fhoest

XLDnaute Accro
Re : Balance RS232

Re,
je pense également que le test s'éffectue en boucle sans sortir de celle ci pour capter un évènement.
N'est il pas préférables d'utiliser un "doevent" quelque part.
Code:
Private Sub CommandButton1_Click()

With MSComm1
    .InBufferCount = 0
    .CommPort = 1
    .Handshaking = comNone
    .Settings = "1200,o,7,1"
    .InputLen = 3
    .PortOpen = True
End With

Do 
Doevents'quelquechose comme ça ??
Loop until MSComm1.Input <> "   +" 

MSComm1.InputLen = 5
    Label1.Caption = MSComm1.Input
    ActiveCell.Value = CSng(Label1.Caption)
    ActiveCell.Offset(1, 0).Select
    
MSComm1.PortOpen = False

End Sub
A suivre.
 

pitufo2804

XLDnaute Junior
Re : Balance RS232

Re,
je pense également que le test s'éffectue en boucle sans sortir de celle ci pour capter un évènement.
N'est il pas préférables d'utiliser un "doevent" quelque part.
Code:
Private Sub CommandButton1_Click()

With MSComm1
    .InBufferCount = 0
    .CommPort = 1
    .Handshaking = comNone
    .Settings = "1200,o,7,1"
    .InputLen = 3
    .PortOpen = True
End With

Do 
Doevents'quelquechose comme ça ??
Loop until MSComm1.Input <> "   +" 

MSComm1.InputLen = 5
    Label1.Caption = MSComm1.Input
    ActiveCell.Value = CSng(Label1.Caption)
    ActiveCell.Offset(1, 0).Select
    
MSComm1.PortOpen = False

End Sub
A suivre.

J'obtiens la meme erreur...
 

fhoest

XLDnaute Accro
Re : Balance RS232

re,
Code:
Private Sub CommandButton1_Click()

With MSComm1
    .InBufferCount = 0
    .CommPort = 1
    .Handshaking = comNone
    .Settings = "1200,o,7,1"
    .InputLen = 3
    .PortOpen = True
End With
msgbox mscomm1.input
Do 
Doevents'quelquechose comme ça ??
Loop until MSComm1.Input <> "   +" 

MSComm1.InputLen = 5
    Label1.Caption = MSComm1.Input
    ActiveCell.Value = CSng(Label1.Caption)
    ActiveCell.Offset(1, 0).Select
    
MSComm1.PortOpen = False

End Sub
Quel est la réponse du message?
 

Roland_M

XLDnaute Barbatruc
Re : Balance RS232

bonjour ou bonsoir à tous,

c'est grand dommage que je sois aujourd'hui retraité car,
travaillant dans un laboratoire de contrôle en verreries flaconneries
j'avais créé un logiciel de saisie sur rs232 avec balance sartorius
et saisie avec divers outils comme le pied à coulisse ...

c'était sous quickBasic 4,5 donc complilé exe
j'étais en fin de carrière quand est arrivé excel chez nous
et je n'ai pas converti ce logiciel statisque sous excel !
donc je ne puis t'aider n'ayant pas d'appareils pour effectuer des essais.
j'aurai bien aimé !

mais, j'ai trouvé ceci sur le forum, qui, selon l'auteur fonctionne !
bien entendu il ne s'agit pas de faire copier/coller, mais d'étudier le code.
(je l'ai un peu nettoyé ! voir l'origine sur ce lien)

https://www.excel-downloads.com/threads/traitement-donnees-rs232.110672/

Code:
Sub BalanceEtRS232()
Dim Valeur As String, Poids As String
MSComm1.InBufferCount = 0 'Vider le buffer
MSComm1.CommPort = 1 'choisir un port série
'Balance 1200 bauds, parité, 7 bits de données, 1 bit d'arrêt
MSComm1.Settings = "1200,o,8,1"
'indique au contrôle qu'il doit lire 1 seul caractère
'ce caractère sert à repérer la stabilisation de la balance
MSComm1.InputLen = 1
MSComm1.PortOpen = True 'ouvre le port
'Boucle tant que le 1er caractère n'est pas un signe plus (+)
Do While MSComm1.Input <> "+": Loop
'lecture sur le port des 5 1ers caractères et stockage
'dans la boite de dialogue et dans la feuille active
MSComm1.InputLen = 11
T! = Timer: While Abs(Timer - T!) < 2: DoEvents: Wend
'load val et ferme le port
Valeur = MSComm1.Input
MSComm1.PortOpen = False
'
Poids = ""
For K% = 1 To Len(Valeur)
 If IsNumeric(Mid(Valeur, K%, 1)) Then Poids = Poids & Mid(Valeur, K%, 1)
Next
Cells(1, 1) = Valeur
Cells(1, 2) = Poids
End Sub
 
Dernière édition:

Statistiques des forums

Discussions
311 726
Messages
2 081 955
Membres
101 852
dernier inscrit
dthi16088