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.
Partager