Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2696 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Attendre la fin d'une acquisition

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Attendre la fin d'une acquisition

n°2166030
bruelhager​ri
Posté le 29-11-2012 à 13:48:31  profilanswer
 

bonjour à tous,  
 
je travaille en vba sur le logiciel pulselabshop (v6.0)  
ce soft sert à récupérer des signaux acoustiques  
ma macro permet de faire plusieurs acquisitions à la suite puis enregistrer les données dans un fichier texte; chaque acquisition dure 10s  
mon problème est le suivant:  
 
l'avancement du code de la macro n'attends pas la fin de l'acquisition (code: pulselabshop.start).  
j'ai trouvé un moyen de la faire fonctionner mais j'aimerai éviter de devoir cliquer lors des mesures successives:  
 

Code :
  1. PulseLabShop.start
  2. check = timer
  3. start = timer
  4. tempo=10
  5. while check<tempo+start
  6. msgbox "attends 10s"
  7. check=timer
  8. wend


 
sans l'apparition de la msgbox, l'acquisition ne se fait pas, la commande etant passé. j'ai déjà essayer les "sleep" et "do event", même constat. j'ai essayer également de créer un userframe avec date d'expiration de 10s, mais elle aussi prends le dessus sur ma mesure.  
 
j'ai pas trouvé de flag indiquant la fin des mesures non plus.  
 
pour finir, voici ou sont sauvegardé les données  

Code :
  1. Dim FunctionData As Object
  2.     Dim Data As Variant
  3. Set FunctionData = Project.FunctionOrganiser.FunctionGroups("LOG" ).Functions("Spectre dB (Input " & NumeroMicro & " )" ).FunctionData
  4.     Data = FunctionData.GetAllValues(True)


 
 
j'aurais voulu verifier si la derniere case etait vide et attendre tant qu'elle ne l'est pas  
 
genre

Code :
  1. while data(1600,0) is empty
  2. wend


mais avant d'être remplie, cette case est de type <type mismatch>, donc je sais pas comment faire ma condition, is empty ne marchant pas :furieux:  
(de toute façon je doute que ça marche ...)  
 
 
comment puis je faire ? thread avec l'userform? (si oui, je veux bien l'adresse d'un cours simple en VB, j'en ai pas trouvé)  
 
merci d'avance !

mood
Publicité
Posté le 29-11-2012 à 13:48:31  profilanswer
 

n°2166032
vave
Nice to meet me
Posté le 29-11-2012 à 14:21:03  profilanswer
 

Bonjour,
tu as essayé avec  

Code :
  1. while data(1600,0) = ""
  2. wend


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
n°2166039
bruelhager​ri
Posté le 29-11-2012 à 14:50:26  profilanswer
 

à l'instant, il aime pas plus ...

n°2166044
bruelhager​ri
Posté le 29-11-2012 à 16:04:48  profilanswer
 

Code :
  1. While (Data(1600, 0)) = QNAN
  2.     Data = FunctionData.GetAllValues(True)
  3. Wend


 
permet de bloquer la macro met ne permet plus a l'acquisition de reprendre comme pourrait le faire la msgbox...
 
donc, cette solution ne semble pas la bonne


Message édité par bruelhagerri le 29-11-2012 à 16:05:08
n°2166116
bruelhager​ri
Posté le 30-11-2012 à 09:06:02  profilanswer
 

j'ai choisi de créer un userform comme une messagebox mais avec une date limite de 20s. le problème étant que quand cette user s'affiche elle bloque le code. j'aimerai la faire devenir modal donc (comme la msgbox non ?)
pour l'instant le soft fonctionne pke j'ai fait un truc dégueulasse (et mauvais pour la santé des épileptiques!)
 

Code :
  1. Public Sub UserForm_Activate()
  2.     popup.Hide
  3. End Sub


 
userform popup s'ouvre et se ferme
 

Code :
  1. Sub fenetrepopup()
  2.     UserForm2.Hide
  3.     waiting
  4.     Dim Check, start, tempo As Long
  5. Check = Timer
  6. start = Timer
  7. While Check < start + 20
  8. Check = Timer
  9.     popup.Show
  10.     waiting
  11. Wend
  12.     UserForm2.Show
  13. End Sub


 
et la en fait j'appelle popup qui se ferme pendant 20 secondes.
si je met ma tempo dans userform popup, mon acquisition s’interrompt.
Userform2 est ma form principale, et pour info, waiting:
 

Code :
  1. Public Sub waiting()
  2. Dim i As Integer
  3. For i = 1 To 1000
  4.     DoEvents
  5. Next i


 
     
 
Des idées ?
merci

n°2166181
Marc L
Posté le 30-11-2012 à 16:09:29  profilanswer
 

            Bonjour !   Je ne vois pas très bien la problématique mais voici le code de ma fonction de pause (gérant le passage à minuit de la fonction Timer)
                             me donnant une totale satisfaction en VBA Office …

Code :
  1. Sub Pause(Optional P = 0.01)
  2.       D = Timer
  3.       F = D + P
  4.     While Timer < F
  5.        If Timer < D Then F = F - 86400:  D = 0
  6.        DoEvents
  7.     Wend
  8. End Sub


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Attendre la fin d'une acquisition

 

Sujets relatifs
DOS : Attendre sans consommer 100% de l'UC[JS] Attendre la fin d'une instruction avant de passer à la suivante
Problèmes - Logiciel d'acquisition de tempsacquisition image sous matlab
Requête asynchrone (comment attendre ?)[bash] wait pour n'attendre qu'un seul fils
SCADA:supervisory control and data acquisitionC - attendre n milliseconds entre 2 iterations d'une boucle
[D7]Clavier et Application.ProcessMessagesProgrammer Acquisition de données en C++/VB
Plus de sujets relatifs à : Attendre la fin d'une acquisition


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)