salut,
j'ai un programme a faire avec le vb6 qui reçoit des données a travers le port série et qui les affiche dans des labels en temps réel .
ces données sont des valeurs de débits et de températures,j'utilise 2 débitmètres qui donnent 2 valeurs de débit et 3 thermocouples qui donnent 3 valeurs de températures , j'utilise aussi des cartes électroniques qui relient le tous.
principe de fonctionnement:au début il faut envoyer l'adresse au dispositif et des qu'il reçoit l'adresse il m'envoie une réponse que je dois l'afficher sur un label .
les adresses sont : !11,f pour le debitmetre1, !12,f pour le debitmetre2,
!13,f pour le thermocouple1, !14,f pour le thermocouple2, !15,f pour le thermocouple3,
la réponse reçue comporte l'adresse et la valeur ,par exemple si j'envoie !11,f
au débitmètre1 il m'envoie !11,f21.23 ,21.23 est la valeur du debit;je dois filtrer la reponse reçue en affichant juste la valeur.
le principe est le même pour l'autre débitmètre et les 3 thermocouples .
j'ai fais le programme mais il ne fonctionne pas correctement , le problème c'est que il m'affiche pas correctement les valeurs par exemple il me donne la valeur de débit avec la valeur de temperature au dessous accompagné de l'adresse malgré que j'ai filtré tous les adresses ,des fois il n'affiche pas la valeur de température 2 .........
voila mon programme :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Private Sub Form_Load()
 
 
 
 
MSComm1.RThreshold = 10
 
 
 
 
MSComm1.InputLen = 30
' 9600 Baud, No Parity, 8 Data Bits, 1 Stop Bit
MSComm1.Settings = "9600,N,8,1"
 
' Disable DTR
MSComm1.DTREnable = False
 
' Open COM1
MSComm1.CommPort = 1
MSComm1.PortOpen = True
 
Private Sub Timer1_Timer()
MSComm1.Output = "!11,f" & vbCr
Sleep (200)
MSComm1.Output = "!12,f" & vbCr
Sleep (200)
MSComm1.Output = "!13,f" & vbCr
Sleep (200)
MSComm1.Output = "!14,f" & vbCr
Sleep (200)
MSComm1.Output = "!15,f" & vbCr
End Sub
 
Private Sub MSComm1_OnComm()
Dim sData As String    ' Holds our incoming data
Dim lHighByte As Long   ' Holds HighByte value
Dim lLowByte As Long    ' Holds LowByte value
Dim lWord As Long       ' Holds the Word result
 
' If comEvReceive Event then get data and display
If MSComm1.CommEvent = comEvReceive Then
 
    sData = MSComm1.Input ' Get data 
  If Mid(sData, 1, 4) = "!11," Then
 
    Label2.Caption = Mid(sData, 5)
    End If
 If Mid(sData, 1, 4) = "!12," Then
 
    Label4.Caption = Mid(sData, 5)
 
    End If
    If Mid(sData, 1, 4) = "!13," Then
 
    Label6.Caption = Mid(sData, 5)
 
    End If
    If Mid(sData, 1, 4) = "!14," Then
 
    Label8.Caption = Mid(sData, 5)
 
    End If
    If Mid(sData, 1, 4) = "!15," Then
 
    Label10.Caption = Mid(sData, 5)
 
    End If
 
 
 
 
End If
End Sub
 
End Sub

le timer est utilisé pour envoyer les adresse chaque 1seconde
la fonction sleep sert a faire une pose de 200ms pour ne pas envoyer toutes les adresses en même temps.
MSComm1 est le port série.
la fonction mid fait le filtrage de la donnée reçue .
vbcr est le carriage return (retour a la ligne ).

Merci d'avance.