Plotting analog input continuously on a given axis
5 views (last 30 days)
Show older comments
I'm trying to understand the behavior of the Data Acquisition Toolbox when I try to acquire data from a National Instruments board and plot it continuously. My code is printed below. It works -- but only if I declare daqObj as a global variable. If I don't, then I don't get an error, but nothing happens. I'm using Matlab 2020a and Data Acquisition Toolbox 4.1 on a Windows 10 Pro desktop.
function [] = myTest(ax)
% ax is an axes in a GUI made with App Designer
global daqObj % <--- why do I need this?
daqObj = daq("ni");
addinput(daqObj,"Dev1","ai0","Voltage");
daqObj.Rate = 1000;
daqObj.ScansAvailableFcn = @plotMyData;
daqObj.ScansAvailableFcnCount = 5000;
start(daqObj,"Continuous")
function [] = plotMyData(obj,~)
[data,timestamps] = read(obj,obj.ScansAvailableFcnCount,"OutputFormat","Matrix");
plot(ax,timestamps,data)
end
end
0 Comments
Accepted Answer
Geoff Hayes
on 10 Jun 2020
Niraj - if you don't declare daqObj as a global variable, then it will be a local variable. When your function "completes" (after calling start(...), then all local variables will be deleted/destoyed. If daqObj is local, then it will be destroyed and will stop trying to acquire data so this is probably why "nothing happens". But if you declare it as a global variable then it will "exist" outside of the function (so that other functions could access/share this variable) and so the data acquisition will work.
You mention that you are using App Designer, so why not make the daqObj a property/member of the GUI so that you don't have to declare this as global? That way, you can control from within the GUI when to start and stop the acquisition.
More Answers (0)
See Also
Categories
Find more on Analog Data Acquisition in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!