I think I solved it myself to a satisfactory degree. Here the codes if another one who is new to DAQ Toolbox has a similar problem:
daq.getDevices;
s = daq.createSession('ni');
s.Rate = 100;
s.IsContinuous = true;
s.addAnalogInputChannel('Dev1','ai3','Voltage');
s
fileID1 = fopen('timeofexceedfile.mat','w');
fileID2 = fopen('timeanddatafile.mat','w');
voltagelistener = addlistener(s,'DataAvailable',@(src,event,voltagelimit,fileID) voltageexceed(src,event,0.03,fileID1));
plotlistener = addlistener(s,'DataAvailable',@(src,event) plot(event.TimeStamps,event.Data));
dataloglistener = addlistener(s,'DataAvailable',@(src,event,fileID) logData(src,event,fileID2));
s.startBackground;
command = input('','s'); %just to stop the daq
if strcmp(command,'evaluate daq')
s.stop;
fclose(fileID1);
fclose(fileID2);
fileID1 = fopen('timeofexceedfile.mat','r');
fileID2 = fopen('timeanddatafile.mat','r');
timeofexceed = fread(fileID1,[1 inf],'double');
timeanddata = fread(fileID2,[2 inf],'double');
fclose(fileID1);
fclose(fileID2);
end
The data log function
function logData(src, event, fileID)
timeanddata = [event.TimeStamps event.Data]';
fwrite(fileID,timeanddata,'double');
end
And the voltage exceed event callback
function voltageexceed( src, event,voltagelimit,fileID)
if any(event.Data > voltagelimit)
fprintf('Event listener: Detected voltage exceeds %1.2f V \n time of exceed: %1.1f s \n',voltagelimit,event.TimeStamps(1));
fwrite(fileID,event.TimeStamps(1),'double');
end