Continuous Acquire, Store and Process data using DAQ Toolbox for NI-DAQ

5 visualizaciones (últimos 30 días)
I made a very basic GUI that allows me to setup DAQ for acquisition. I use session based mode and run the AI process in background. When I invoke the listener to plot data, it always plots the data in a new figure instead of using the MAIN GUI figure axes handles.
However, when I run the gui in debugging mode, it always plots in the correct location.
Second, I want to analyze the signals while it is storing the file and plotting. Storing to file and plot the data works fine within the listerner callback function.
How do I get data in the main GUI and process it?
Any idea..
Here is my start AI code. Ignore handles as they are the items on the GUI.
s = daq.createSession ('ni');
if get(handles.cbChannel1, 'Value')
ch = s.addAnalogInputChannel(handles.BoardID, 0, 'Voltage');
ch.Coupling = 'DC';
ch.Name = 'Signal 1';
ch.Range = handles.VoltageRange;
end
if get(handles.cbChannel2, 'Value')
ch = s.addAnalogInputChannel(handles.BoardID, 1, 'Voltage');
ch.Coupling = 'DC';
ch.Name = 'Signal 2';
ch.Range = handles.VoltageRange;
end
if get(handles.cbChannel3, 'Value')
ch = s.addAnalogInputChannel(handles.BoardID, 2, 'Voltage');
ch.Coupling = 'DC';
ch.Name = 'SWEEP';
ch.Range = handles.VoltageRange;
end
if get(handles.cbChannel4, 'Value')
ch = s.addAnalogInputChannel(handles.BoardID, 3, 'Voltage');
ch.Coupling = 'DC';
ch.Name = 'FCHNG';
ch.Range = handles.VoltageRange;
end
s.Rate = handles.SampleRate;
s.NotifyWhenDataAvailableExceeds = str2double(get(handles.tNumSample, 'string'));
lh = s.addlistener('DataAvailable', @(src,event) plot(event.TimeStamps, event.Data));
s.IsContinuous = true;
s.startBackground();

Respuesta aceptada

Rajeev Yadav
Rajeev Yadav el 31 de Mzo. de 2014
Editada: Rajeev Yadav el 31 de Mzo. de 2014
I tried your solution but I see an empty figure always being created on the function call. Here is how I inherited a fix to my problem.
set(gcf,'Visible','off') ; ax = handles.SpectrumPlot;
plot(ax, event.TimeStamps, event.Data);
ylim([handles.VoltageRange(1), handles.VoltageRange(2)]);
xlim([event.TimeStamps(1), event.TimeStamps(end)]);
ax points to the original figure handle.
However, I am unable to return data back to the main function via the listner function.
Any idea???
Thanks RY
  1 comentario
Walter Roberson
Walter Roberson el 31 de Mzo. de 2014
Also if you defined the listener function as a subfunction of the main function then the subfunction could write to the variables in the main function.

Iniciar sesión para comentar.

Más respuestas (1)

Rajeev Yadav
Rajeev Yadav el 1 de Abr. de 2014
I tried using the globals and handles. It didnt work. Seems like once you define a listner, it executes when the trigger is invoked but it doesn't update the GUIObject. Hence, it works like in parallel.

Categorías

Más información sobre Simultaneous and Synchronized Operations en Help Center y File Exchange.

Etiquetas

Productos

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by