Plotting analog input continuously on a given axis

4 次查看(过去 30 天)
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

采纳的回答

Geoff Hayes
Geoff Hayes 2020-6-10
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.
  1 个评论
Niraj Desai
Niraj Desai 2020-6-10
Geoff,
Thank you for this thoughtful answer. What you wrote makes a lot of sense. Thanks also for the suggestion about App Designer. Good idea.
Niraj

请先登录,再进行评论。

更多回答(0 个)

产品


版本

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by