chewie_62
Messages postés22Date d'inscriptionmardi 24 avril 2007StatutMembreDernière intervention13 décembre 2012
-
2 juil. 2007 à 08:53
chewie_62
Messages postés22Date d'inscriptionmardi 24 avril 2007StatutMembreDernière intervention13 décembre 2012
-
10 juil. 2007 à 08:10
Bonjour à tous, je débute en VB6 et on m'a confié un programme !
Je reçois des valeurs en continue provenant d'un microcontrolleur sur une meme Textbox. Je souhaiterais récupérer toutes les valeurs et les mettre dans un tableau pour pouvoir faire en continue la moyenne des 20 dernières valeurs et afficher le graphique de la moyenne sur VB6.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 2 juil. 2007 à 16:03
Salut MPI,
Oui, tu as raison, j'aime bien rigoler !
Alors voilà (ici avec une listbox)
Private Sub Command2_Click()
Static toto As Single
nb = 0
monnombre = 3 ' c'est ici que tu mets le nombres de "derniers" sur lesquels faire la moyenne
For i = 1 To 40
List1.AddItem CStr(i) ' juste pour dire que j'envoie des strings (pas de tricherie, donc)
'on va ici oublier le i (pour "jouer le jeu" sans tricher)
toto = toto + Val(List1.List(nb))
If nb > monnombre - 1 Then toto = toto - Val(List1.List(nb - monnombre))
nb = nb + 1 If nb < monnombre Then titi nb Else titi monnombre
MsgBox "total des " & monombre & " derniers = " & toto & vbCrLf & _
"ce qui donne une moyenne de " & toto / titi & " pour les " & monnombre & " derniers"
Next
End Sub
Cà, c'est parce que j'ai pas encore bu mon pastis ...
chewie_62
Messages postés22Date d'inscriptionmardi 24 avril 2007StatutMembreDernière intervention13 décembre 2012 2 juil. 2007 à 16:53
j'arrive bien a faire ma moyenne, merci à vous pour votre aide !!!
j'affiche cette moyenne dans une textbox, mais comment peut-on enlever les chiffres apres la virgule ???
Vous n’avez pas trouvé la réponse que vous recherchez ?
chewie_62
Messages postés22Date d'inscriptionmardi 24 avril 2007StatutMembreDernière intervention13 décembre 2012 9 juil. 2007 à 08:47
Bonjour à tous.
Suite à la création de mon tableau, je reçois bien ma valeur moyenne en continue.
La communication se fait bien avec le port série mais il y a un problème qui intervient...
En fait j'ai 2 boutons de commande : un "connecter/déconncter" quand je clique 1 fois le port série est ouvert et la 2eme fois il se ferme.
La ou est mon problème c'est quand je clique sur un autre bouton de commande, le port se ferme automatiquement alors qu'il ne doit pas le faire !!!
Pouvez vous me dire ou j'ai un problème ??? merci
'***********************************************
'apres click sur bouton connection/deconnection*
'***********************************************
Private Sub connecter_bouton_Click()
'si le bouton n'affiche pas deconnecter alors port com deconnecté
If connecter_bouton.Caption = "Déconnecter" Then
connecter_bouton.Caption = "Connecter"
MSComm1.PortOpen = False
'ChoixCOM.Enabled = True
ErreurCOM% = 1
'sinon connection du port com
Else
ErreurCOM% = OpenPortCOM("9600", Port$)
'gestion des erreurs possible dû au port com
If ErreurCOM% > 0 Then
Select Case ErreurCOM%
Case 8002
S$ = "n'existe pas"
Case 8005
S$ = "est déja ouvert"
Case Else
S$ = "a une erreur type" + Format$(ErreurCOM%)
End Select
'affichage message box si erreur dû au port com
S$ = "Le port série " + S$
i% = MsgBox(S$, 16 + 1 + 256, "Erreur d'ouverture du port " + portcom$)
Exit Sub
End If
connecter_bouton.Caption = "Déconnecter"
'ChoixCOM.Enabled = False
'envoie du caractere "a" permettant de recuperer l'identifiant
MSComm1.Output = "a"
End If
'-----------------------------------
'Numéro de coffret et Pression en mB
'-----------------------------------
Do 'boucle infinie
DoEvents 'redonne la main à Window
If ErreurCOM% = 0 Then 'le port est ouvert
Buffer$ = Buffer$ & MSComm1.Input 'lecture de COM
If Len(Buffer$) > 100 Then Buffer$ = "" 'par secu si trop de caractére
If Len(Buffer$) > 0 Then 'y a des caractéres
'recherche du Lf$ de début
i% = InStr(1, Buffer$, Lf$) If i% 0 Then Buffer$ "": GoTo Suite 'pas de Lf de début
'recherche du Cr$ de fin
J% = InStr(i%, Buffer$, Cr$)
If J% > i% Then 'y a un texte encadré de Lf et Cr
'string reçu placé dans une chaine S$, pointé par I%+2, (J%-I%-2) caractéres
S$ = Mid$(Buffer$, i% + 2, J% - i% - 2)
'Tag reçu placé dans un caractére de T$ pointé par I%+1
t$ = Mid$(Buffer$, i% + 1, 1)
'suppression du string
Buffer$ = Trim$(Mid$(Buffer$ + " ", J% + 1))
Select Case t$ 'gestion du TAG
Case "I" 'gestion d'un Coffret qui est dans S$
numerocoffret.Text = S$
Case "V"
can.Text = S$
'------------------------------
'Conversion 12 bits en millibar
Dim a As Integer
Dim k As Integer
a = 0
For k = 1 To 12 If Mid$(can.Text, k, 1) "1" Then a a + 2 ^ (12 - k)
Next k
Text1.Text = CInt(a * (5000 / 4096))
'------------------------------
'Définition d'un tableau de Double
Dim MonTableau() As Double
'Dimensionnment du tableau
ReDim MonTableau(0)
'lorsque qu'on recoit une valeur:
'On place la valeur dans l'indice supérieur
MonTableau(UBound(MonTableau)) = Text1.Text
'Ajout d'un espace dans le tableau
'Preserve permet de ne pas supprimer les valeurs contenues
'dans le tableau lors du redimensionnement
ReDim Preserve MonTableau(UBound(MonTableau) + 1)
Dim nb 'nombre de valeur dans la moyenne
Dim m 'moyenne
Dim nVal 'la valeur que tu ajoute
nb = 100
nVal = Text1.Text
m = ((m * nb) + nVal) / (nb + 1)
nb = nb + 1
pressionmoy.Text = CInt(m) 'Cint pour enlever les chiffres après la virgule
End Select
End If
End If
Suite:
End If
Loop
End Sub
chewie_62
Messages postés22Date d'inscriptionmardi 24 avril 2007StatutMembreDernière intervention13 décembre 2012 9 juil. 2007 à 14:04
voici l'autre bouton :
Private Sub Command1_Click()
'--------------
'initialisation
'--------------
dblEndTime = 0
tempo = 0
temps = "0,6" 'initialisation du temps ouverture
temps2 = "0,4" 'initialisation du temps fermeture
etatsysteme = "Vidange..." 'affiche l'état du microcheck
ev = "Attente..." 'initialisation de l'indicateur EV
'------------------------------
tempo = Timer + "0,5"
Do While tempo > Timer
'attente
DoEvents
Loop
'------------------------------
tempo = Timer + Form3.tempsvidange.Text
Do While tempo > Timer 'definition de la durée de vidange
If pressionmoy.Text < Form3.pressionhaute.Text Then 'si on est au dessus de la pression haute on arrete l'EV et on attend
dblEndTime = Timer + temps 'tempo avant ouverture
Do While dblEndTime > Timer
'Rien ne se produit mais les autres
'applications peuvent traiter leurs
'événements.
mesure.Text = valeur 'calcul de la pression avant ouverture
MSComm1.Output = "b" 'ouverture de l'electrovanne
ev.Text = "Ouverte" 'affichage état electrovanne
DoEvents
Loop
'------------------------------
dblEndTime = Timer + temps2 'tempo avant fermeture
Do While dblEndTime > Timer
'Rien ne se produit mais les autres
'applications peuvent traiter leurs
'événements.
MSComm1.Output = "c" 'fermeture de l'electrovanne
ev.Text = "Fermée" 'affichage état electrovanne
DoEvents
Loop
'------------------------------
If pressionmoy.Text > Form3.pressionbasse.Text Then 'test si on a atteint la zone d'approche
paliervidange.Text = (Form3.pressionhaute.Text) * 0.02 'calcul du palier de vidange lorsque la vidange basse est atteinte
Else
paliervidange.Text = (Form3.pressionhaute.Text) * 0.1 'calcul du palier de vidange lorsque on est en dessous de vidange basse
End If
If valeur < (mesure.Text + paliervidange.Text) Then 'verifie si la pression a augmenter d'un palier
temps = (temps * 2) 'on ouvre l'EV 2 fois plus longtemps si on augmente pas assez
tps.Text = temps
Else
temps = (temps * 0.8) 'on ouvre l'EV 2 fois moins longtemps si on augmente de trop
tps.Text = temps
End If
End If
DoEvents 'Met fin à la boucle End While
Loop
If pressionmoy.Text > Form3.pressionhaute.Text Then 'test si pression moyenne entre haute et basse atteinte
temps = "0,6" 'initialisation du temps ouverture pour pressurisation
temps2 = "0,4" 'initialisation du temps fermeture pour pressurisation
etatsysteme = "Pressurisation..." 'affiche l'état du microcheck
pressurisation 'passe en pressurisation
Else
'deconnection Microcheck
etatsysteme = "Arret du Microcheck"
MsgBox ("le temps de vidange est écoulé --- pression de vidange basse non atteinte --- le filtre doit être endommagé")
resultat.Text = "INCORRECT (Pression non atteinte pendant la temps de vidange)"
connecter_bouton = True 'deconnecté
End If
End Sub
En fait je ne suis plus tres sur que le prot série se déconnecte étant donnée qu'apres avoir fait plusieurs test, j'ai toujours un message qui me dit que le port série est déja ouvert...
Mais le problème est que normallement je reçoit la pression moyenne en continue et quand je clique sur le 2eme bouton, la pression moyenne s'arrete et garde la valeur au moment de la pression du bouton !!! je ne vois pas ou est mon problème, si quelqu'un a une idée...
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 9 juil. 2007 à 23:53
C'est fort possible que les nombreuses boucles empêchent l'affichage correct en continu.
Je vois que tu mets déjà des DoEvents dans chaque boucle, ce qui est bien, mais ce n'est peut-être pas suffisant.
Peut-être faudrait-il forcer le raffraîchissement du ou des contrôles (?)
Quelque chose comme MonControle.Refresh (?)
Mais je n'en suis pas convaincu...