Réception RS232

cs_tg57
Messages postés
7
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
3 avril 2006
- 31 mars 2006 à 09:37
cs_tg57
Messages postés
7
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
3 avril 2006
- 3 avril 2006 à 09:31
Bonjour à tous, j'ai un petit problème avec la réception sur VB j'envoi la valeur 1023 via un picbasic à 9600 Bauds et la valeur reçue reste fixe à 203.
Si quelqu'un à une solution je l'en remerci ci joint mon programme:

Const Serveur = "Excel|C:\Documents and Settings\sts2\Bureau\PROJET\Visual Basic2\Analyseur_PC\relever_polluants.xls"
Public ligne As Integer
Public colonne As Integer
Public Mess As String


Private Sub Com1_Click()
Com1.Checked = True
Com2.Checked = False
MSComm1.CommPort = 1
End Sub


Private Sub Com2_Click()
Com2.Checked = True
Com1.Checked = False
MSComm1.CommPort = 2
End Sub


Private Sub Command1_Click()
Select Case Command1.Caption
Case "Acquisition"
Command1.Caption = "Arrêt"
MSComm1.Settings = "9600,N,8,1"
MSComm1.RThreshold = 3
MSComm1.PortOpen = True
Case "Arrêt"
Command1.Caption = "Acquisition"
MSComm1.PortOpen = False
End Select
End Sub


Private Sub Command2_Click()
End
End Sub


Private Sub Excel_Click()
'Ouverture de l'application
Set appExcel = CreateObject("Excel.Application")
'Ouverture d'un fichier Excel
Set wbExcel = appExcel.Workbooks.Open("C:\Documents and Settings\sts2\Bureau\PROJET\Visual Basic2\Analyseur_PC\relever_polluants.xls")
'appExcel.visible=True permet de rendre la fenetre visible, car sans sa, elle est ouverte mais pas visible
appExcel.Visible = True
End Sub


Private Sub Exit_Click()
End
End Sub


Private Sub Form_Load()
MSComm1.InputLen = 3
ligne = 2
Label3.LinkTopic = Serveur
Label3.LinkMode = 2
Label1.LinkTopic = Serveur
Label1.LinkMode = 2


End Sub


Private Sub Notice_Click()
'permet d'ouvrir la notice d'utilisation
Shell "C:\Program Files\Adobe\Acrobat 7.0\Reader\AcroRd32.exe C:\Analyseur_PC\Notice.pdf"
End Sub


Private Sub Print_Click()
Dim appExcel As Excel.Application 'Application Excel
Dim wbExcel As Excel.Workbook 'Classeur Excel
Dim wsExcel As Excel.Worksheet 'Feuille Excel
'Ouverture de l'application
Set appExcel = CreateObject("Excel.Application")
'Ouverture d'un fichier Excel
Set wbExcel = appExcel.Workbooks.Open("C:\Documents and Settings\sts2\Bureau\PROJET\Visual Basic2\Analyseur_PC\relever_polluants.xls")
'wsExcel correspond à la première feuille du fichier
Set wsExcel = wbExcel.Worksheets(1)
ActiveWindow.SelectedSheets.PrintOut Copies:=1
wbExcel.Close
Set wbExcel = Nothing
appExcel.Quit
End Sub


Private Static Sub MSComm1_OnComm()
Dim résultat() As Byte
Dim Quantité As Byte
Select Case MSComm1.CommEvent
Case comEvReceive
résultat = MSComm1.Input
Quantité = résultat
Label3.Caption = Quantité
Label1.Caption = Time
Label3.LinkItem = "L" & ligne & "C2"
Label1.LinkItem = "L" & ligne & "C1"
Label3.LinkPoke
Label1.LinkPoke
ligne = ligne + 1
End Select
End Sub


Private Sub Version_Click()
'affiche le message version ...
Mess = "Version 1.0 Copyright by Chris"
'la message box qui souvre sappele Analyseur PC
MsgBox Mess, vbOKOnly + vbInformation, "Acquisiton ppb"
End Sub

7 réponses

cs_Jack
Messages postés
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
31 mars 2006 à 15:36
Salut
A mon avis, le problème est dans la gestion de la réception :
Tu lis LES données dans un tableau de Bytes "résultat()" et tu transfères ce tableau dans un seul Byte "Quantité"
Qu'es-tu sensé recevoir ?
Un texte composé de chiffre ou des codes Ascii (limité entre 0 et 255) correspondant aux valeurs ?
C'est à dire, reçois-tu la chaîne "1023" ou une suite de Bytes 255 puis 255 ?
"1023" : Lis le .Input en String, directement
"255 + 255" : Résultat décimal = Val("&h" & Hex(255) & Hex(255)) qui donne -1 en entier signé --> Complément à 2 de 1024

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
0
cs_tg57
Messages postés
7
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
3 avril 2006

31 mars 2006 à 19:55
Salut dejà merci d'avoir répondu aussi vite
En fait j'envoi plus une valeur de 0 à 1023 mais de 0 à 255 et je veux que ces valeurs s'affichent dans le label
Peux tu me dire clairement qu'elle ligne je dois changer de mon côter je vais tenter ta solution merci
0
cs_Jack
Messages postés
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
1 avril 2006 à 01:49
Re
Ta phrase n'est pas claire : Les valeurs vont de 0 à 255, c'est ça ?
Mais cela ne nous dit pas si tu es sensé les recevoir sous forme de 3 chiffres qui se suivent 2-5-5, ou bien si chaque Byte représente une valeur.
Je penche pour cette dernière théorie.
Donc ton programme devrait fonctionner.
Seule chose : Lors d'une récupération de données, tu peux très bien récupérer plusieurs données qui sont stockées dans le buffer.
Alors que comptes-tu en faire ?
Si tu ne dois afficher que le dernier lu, il te suffit de transformer le dernier Byte de ton tableau d'acquisition en chaine
Private Static Sub MSComm1_OnComm()
Dim résultat() As Byte
<STRIKE>Dim Quantité As Byte</STRIKE>
Select Case MSComm1.CommEvent
Case comEvReceive
résultat = MSComm1.Input
<STRIKE>Quantité = résultat</STRIKE>
Label3.Caption = <STRIKE>Quantité</STRIKE> CStr(résultat(UBound(résultat)))
Label1.Caption = Time
Label3.LinkItem = "L" & ligne & "C2"
Label1.LinkItem = "L" & ligne & "C1"
Label3.LinkPoke
Label1.LinkPoke
ligne = ligne + 1
End Select
End Sub

Le CStr est juste là pour la forme, pas obligatoire.
UBound(Tableau) renvoie l'index le plus élevé dans le tableau.
résultat(UBound(résultat)) est donc la valeur du dernier élément du tableau.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
0
cs_Jack
Messages postés
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
1 avril 2006 à 01:57
En y reflechissant, je vois que tu veux remplir une feuille excel avec ces données. Bonne astuce que d'utiliser les liens DDE.
Donc, si on veut être puriste, il ne faut pas perdre de données. Si plusieurs sont lues dans le même temps, il faut quand même les données.
Elles auront juste toutes la même heure (Label1)
Private Static Sub MSComm1_OnComm()
Dim résultat() As Byte, r As Long
Select Case MSComm1.CommEvent
Case comEvReceive
résultat = MSComm1.Input
For r = 0 To UBound(résultat) ' Les tableaux commencent à 0 par défaut
Label3.Caption = CStr(résultat(r))
Label1.Caption = Time
Label3.LinkItem = "L" & ligne & "C2"
Label1.LinkItem = "L" & ligne & "C1"
Label3.LinkPoke
Label1.LinkPoke
ligne = ligne + 1
Next r
End Select
End Sub

Juste une précaution : Il me semble que Excel ne sait pas gérer les tableaux de plus de 32768 lignes ...
Et rappelle toi que la scrutation DDE n'est pas toujours instantanée (charge machine ...). Il se peut donc que certaines cellules restent vides.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_tg57
Messages postés
7
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
3 avril 2006

1 avril 2006 à 09:58
Re
Oui tu as bien compris je veux envoyer une valeur qui va de 0 à 255 exemple 50 et que cette valeur apparaisse dans le label ce qui se rapporte à ta premiere proposition je vais essayer merci pour ton aide
En fait c'est pour mon projet BTS alors j'essais ça lundi merci encore
0
cs_tg57
Messages postés
7
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
3 avril 2006

3 avril 2006 à 09:31
Re j'ai essayé tes deux solutions aucune ne fonctionne
je te rappelle ce que je fais j'envois une valeur qui varie de 0 à 255 et celle ci va s'insérer dans une feuille excel si t'as une autre solution merci de me le dire
0
cs_tg57
Messages postés
7
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
3 avril 2006

3 avril 2006 à 09:31
Re j'ai essayé tes deux solutions aucune ne fonctionne
je te rappelle ce que je fais j'envois une valeur qui varie de 0 à 255 et celle ci va s'insérer dans une feuille excel si t'as une autre solution merci de me le dire
0