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:

pitufo2804

XLDnaute Junior
Re : Balance RS232

Toujours pas de valeur mais y a t il encore une erreur ?
il faut remettre la boucle comme au départ:
Code:
Do while mscomm1.input<>"+"
doevents
loop
Edit :bonjour Roland M.
Toujours pas de valeur, mais le port ne se ferme plus ...

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
Bonjour,
merci pour la réponse mais apres avoir adapté le code, celà ne fonctionne pas non plus...
apes le clic sur le bouton, excel attend une valeur et quand je l'envoie ça plante...
 

Roland_M

XLDnaute Barbatruc
Re : Balance RS232

re

j'ai trouvé sur le net l'origine de ton erreur Erreur d'éxécution '8020'
ça vient de ta version mscomm32.ocx qui n'est pas bonne !
message de la personne qui à fini par solutionner: (c'est la tout dernier de toute la page)
--------------------------------------------------------------------------------
Bonjour,

Le nouveau MsComm32.ocx (6.1.98.16) fourni avec la mise à jour que vous citez résoud effectivement mon problème (j'en était resté à la version 6.0.81.69).

Je vous remercie pour cette réponse rapide et pertinente.

Cordialement.
-------------------------------------------------------------------------------

VOIR explication ICI !

MSCOMM32.ocx

HTML:
Bonjour, 

 

Sur le même ordinateur sur lequel j’ai fait le test antérieur, avec les registres non-modifiés, j’ai mis la mise à jour: http://www.microsoft.com/downloads/details.aspx?FamilyID=cb824e35-0403-45c4-9e41-459f0eb89e36&displaylang=en

Mscomm32.ocx vient avec Visual Basic 6. Alors cette mise à jour s’impose. 

Voire : « Par exemple, vous développer une application qui utilise le contrôle de port série (MsComm32.ocx) qui est fourni avec Microsoft Visual Basic 6.0 pour rediriger un port série COM » du http://support.microsoft.com/kb/957264

 

Je vous prie bien d’essayer vous-même et de nous faire savoir de vos résultats. 

Cordialement, 


--------------------------------------------------------------------------------
Roxana Panait, MSFT
Marqué comme réponse Roxana PANAITMicrosoft Employee jeudi 2 juillet 2009 10:38




il y a la suite sur microsoft !
Error message when you try to run an application that you developed by using the "return quickly" feature of the Windows COM port driver: "Error reading comm device"
 
Dernière édition:

pitufo2804

XLDnaute Junior
Re : Balance RS232

Re

Tu peux tester ce fichier.
J'arrive pas à le DL...


re

j'ai trouvé sur le net l'origine de ton erreur Erreur d'éxécution '8020'
ça vient de ta version mscomm32.ocx qui n'est pas bonne !
message de la personne qui à fini par solutionner: (c'est la tout dernier de toute la page)
--------------------------------------------------------------------------------
Bonjour,

Le nouveau MsComm32.ocx (6.1.98.16) fourni avec la mise à jour que vous citez résoud effectivement mon problème (j'en était resté à la version 6.0.81.69).

Je vous remercie pour cette réponse rapide et pertinente.

Cordialement.
-------------------------------------------------------------------------------

VOIR explication ICI !

MSCOMM32.ocx

HTML:
Bonjour, 

 

Sur le même ordinateur sur lequel j’ai fait le test antérieur, avec les registres non-modifiés, j’ai mis la mise à jour: http://www.microsoft.com/downloads/details.aspx?FamilyID=cb824e35-0403-45c4-9e41-459f0eb89e36&displaylang=en

Mscomm32.ocx vient avec Visual Basic 6. Alors cette mise à jour s’impose. 

Voire : « Par exemple, vous développer une application qui utilise le contrôle de port série (MsComm32.ocx) qui est fourni avec Microsoft Visual Basic 6.0 pour rediriger un port série COM » du http://support.microsoft.com/kb/957264

 

Je vous prie bien d’essayer vous-même et de nous faire savoir de vos résultats. 

Cordialement, 


--------------------------------------------------------------------------------
Roxana Panait, MSFT
Marqué comme réponse Roxana PANAITMicrosoft Employee jeudi 2 juillet 2009 10:38




il y a la suite sur microsoft !
Error message when you try to run an application that you developed by using the "return quickly" feature of the Windows COM port driver: "Error reading comm device"

Je suis peut être sur une piste avant de faire la MAJ... voilà le code :
Code:
Private Sub CommandButton1_Click()

'Vider le buffer
MSComm1.InBufferCount = 0
'choisir un port série
MSComm1.CommPort = 1 ' 1 est le n° de port que vous pouvez modifier
'Paramétrage du port; les valeurs sont fournies par le constructeur de l'appareil.
'Ces valeurs peuvent être entrées ici (pas très "propre"!)
'ou dans une procédure d'initialisation (c'est mieux)
'ou dans la propriété "Setting" du contrôle
'L'idéal étant d'offrir à l'utilisateur la possibilité de changer ces valeurs à partir d'un menu "Réglage"
'La balance utilisée dans cet exemple requiert les valeurs suivantes: 1200 bauds, bit de parité, 7 bits de données,  bit d'arrêt
MSComm1.Settings = "1200,e,7,1"
' indique au contrôle qu'il doit lire 1 seul caractère
'ce caractère servira à repérer la stabilisation de la balance
MSComm1.InputLen = 1
'ouvre le port
MSComm1.PortOpen = True
'Boucle dans le vide tant que le caractère lu n'est pas un signe plus (+)
Do
DoEvents
Loop While MSComm1.Input <> " "
'lecture sur le port des 5 1ers caractères et stockage dans la boite de dialogue et dans la feuille active
MSComm1.InputLen = 7

    Label1.Caption = MSComm1.Input
    Cells(1, 1).Value = Label1.Caption
    ActiveCell.Offset(1, 0).Select
'ferme le port
MSComm1.PortOpen = False

End Sub
Ici je récupère bien des valeurs mais pas la trame entière donc pas le poids...
Celà m'affiche 3 espaces suivi d'un + et d'autres espaces
 

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 086
Messages
2 085 197
Membres
102 814
dernier inscrit
JLGalley