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
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)
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
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)