Aide compréhension programme

Signaler
Messages postés
9
Date d'inscription
samedi 24 novembre 2007
Statut
Membre
Dernière intervention
2 avril 2008
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
Bonjour à tous,
Voila une partie d'un programme que j'ai (j'ai enlevé beaucoup de chose pour pas encombrer le forum et garder juste ce qui est utile)
Ce programme trace sur un graph des courbes dont les valeurs sont récupées par une carte d'acquisition de signaux à 2 entrées (ADC.ChannelList(0) et ADC.ChannelList(1))
Comme je débute en vb et que je n'est aucune notion des buffers je vous demande de l'aide car jaimerais bien avoir les valeurs des points que le programme trace dans le graph pour chaque entrée.
Dans le programme je pense que tout est stocké dans hbuf (plot1.Buffer =
hbuf) mais je n'arrive pas a avoir accès aux données.
Si quelqu'un pourrait me guider sa serais le bienvenue.
merciConst BuffSize = 200      ' size of
each buffer in samples
Const SampFreq = 400      ' sample
frequency in Hz
Const NumBuffs = 4        ' the
number of buffers

Private Sub Adc_BufferDone()
   
            Dim hbuf As Long
                'graph data and then recycle buffer
   
            hbuf = ADC.Queue   'retrieve buffer from Done Queue
   
            If hbuf = 0 Then Exit Sub
   
            plot1.Buffer =
hbuf              'graph data
   
            ADC.Queue
= plot1.Buffer         'recycle buffer
End Sub

 'This example
demonstrates the use of an A/D subsystem to continuously
acquire data at a predefined frequency
'and buffer size.  The data is then graphically displayed using the data
plotting custom control.

 

Private Sub Form_Load()
   
Dim i As Integer
   
Dim SampleByteWidth As Integer
   
Dim hbuf As Long
   
Dim NL As String, Prompt As String, Title As String
   
Dim BoardName As String
   
Dim ech As Long

   
    ADC.ListSize = 2        'two
channels
        ADC.ChannelList(0) = 0
        ADC.ChannelList(1) = 1
        plot1.Palette(0) = QBColor(9) 'plot in Light blue
        plot1.Palette(1) = QBColor(13) 'plot in Light magenta
   
'Get Sample Byte Width
  
              If ADC.Resolution <= 16 Then
                 SampleByteWidth = 2 ' 16 bits or less set to 2
bytes wide
  
              Else
                SampleByteWidth
= 4 ' e.g. 24 bit ADC set to 4 bytes wide; Round up to 32 for math reasons...
 
               End If
   
'allocate buffers and put on ADC's Ready
Queue
  
              For i = 1 To NumBuffs
                 hbuf = CallocBuffer(0, 0, BuffSize *
ADC.ListSize, SampleByteWidth)
                ADC.Queue
= hbuf
   
            Next i

 Function
CallocBuffer(ByVal WinFlags As Integer, ByVal ExFlags As Integer, ByVal samples
As Long, ByVal Samplesize As Integer) As Long

            Dim hbuf As Long
            Dim ecode As Long
             ecode = olDmCallocBuffer(WinFlags, ExFlags,
samples, Samplesize, hbuf)
  
                             If ecode <> OLNOERROR Then
                                               OLMEMTrap
"CallocBuffer", ecode
 
                              Else
                                               CallocBuffer
= hbuf
  
                             End If
End Function

4 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut
"Plot1", c'est quoi ? un composant de traçage ? lequel ?

Je pense que ta fonction CallocBuffer renvoie l'adresse mémoire où commence le tableau des données et ton "plot1" doit aller récupérer ces données en mémoire, cela permet de ne pas balader des tonnes de données dans la mémoire.
Donc, tu dois pouvoir récupérer ce tableau grace à l'API "RtlMoveMemory" communément rebaptisée "CopyMemory"
A mettre dans la partie Déclarations de ta forme :
   Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Pour ce faire, tu dois connaitre la taille du tableau, c'est à dire le nombre d'échantillons "xxx" à récupérer :
Tu récupères l'adresse fournie :  lAdresse = hbuf
   Dim monTableau(0 To xxx) As Long
puis demander la recopie :
   CopyMemory monTableau(0), ByVal lAdresse, 4
(le 4 est le nombre d'octets que contient un Long)

A toi de voir comment est organisé le tableau ensuite : Voie 0, Voie 1, Voie 0, Voie 1 ... ou d'abord toutes les données de Voie 0 puis toutes celles de Voie 1 ...

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

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
PS : Attention : la manipulation de tableau et d'adresse mémoire est risqué.
Prend soin de bien sauvegarder ton travail avant de lancer des essais !!
Messages postés
9
Date d'inscription
samedi 24 novembre 2007
Statut
Membre
Dernière intervention
2 avril 2008

Merci pour ton aide

le plot1 est en faite une pictureBox.Dans le programme il y a des lignes de code qui affiche un cadrillage avec en Ymin -2047 et ymax2048
Y a t'il un moyen de voir les valeurs en temps réel en passant par une textbox pour voir la valeur des variables contenu dans
se fameux hbuf au lieu de les extraire?
Si je fais Text1.text=hbuf il me sort des chiffres du genre 198687340
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Commence par lire ce que je t'ai écris.
Pour "voir" les valeurs, il faut qu'elles soient stockées et accessibles quelque part, dans un tableau par exemple, comme précisé dans ma réponse.

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

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)