GUI Matlab real time data storage using DataAcquisition Interface
5 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hope you all well, i have GUI app which is getting data from national instrument and give back live plot after trun switch on and when switch is off the recorded data wil stop and real time data will stop, however i am trying to intesert another button to clear the previous or delete them from store array however it won't happened i tried clear func and clf to remove plot and delete the array nothing working i will place the code blow and screen shot of the app design if you could help me to solve this i would be supre greatfull to you what i want is that the previouse data from block 1 and 2 get deleted after clear data button is clicked
classdef app2 < matlab.apps.AppBase
% Properties that correspond to app components
properties (Access = public)
UIFigure matlab.ui.Figure
TabGroup matlab.ui.container.TabGroup
Tab matlab.ui.container.Tab
CleardataButton matlab.ui.control.Button
DistancemmEditField matlab.ui.control.NumericEditField
DistancemmEditFieldLabel matlab.ui.control.Label
VoltageLEditField matlab.ui.control.NumericEditField
VoltageLEditFieldLabel matlab.ui.control.Label
LoadNEditField matlab.ui.control.NumericEditField
LoadNEditFieldLabel matlab.ui.control.Label
VoltageEditField matlab.ui.control.NumericEditField
VoltageEditFieldLabel matlab.ui.control.Label
SAVEDATAButton matlab.ui.control.Button
Lamp matlab.ui.control.Lamp
LampLabel matlab.ui.control.Label
Switch matlab.ui.control.Switch
SwitchLabel matlab.ui.control.Label
UIAxes matlab.ui.control.UIAxes
end
properties (Access = private)
dq = daq("ni"); % Create a DataAcquisition object.
R = 5000;% Description
% % Arrays to store data for plotting
% timeData = [];
% loadData = [];
% distanceData = [];
end
properties (Access = public)
voltage
distance
load
f1
f2
timeData = [];
loadData = [];
distanceData = [];
end
methods (Access = public)
%
function getdat(app,src,~)
[d, ~] = read(src,src.ScansAvailableFcnCount,"OutputFormat","Matrix");
voltage = mean(d(:,1));
app.VoltageEditField.Value = voltage;
app.LoadNEditField.Value = voltage * 4.19; %* 10497;
load =app.LoadNEditField.Value ;
app.VoltageLEditField.Value = mean(d(:,2));
distance = (app.VoltageLEditField.Value - 0.7966) * 4.51;
app.DistancemmEditField.Value = distance;
% Append data to arrays
app.timeData = [app.timeData; datetime('now')];
app.loadData = [app.loadData; load];
app.distanceData = [app.distanceData; distance];
% Plot all data
yyaxis(app.UIAxes, 'left');
app.f1= plot(app.UIAxes, app.timeData, app.loadData);
ylabel(app.UIAxes, 'Load (N)');
yyaxis(app.UIAxes, 'right');
app.f2= plot(app.UIAxes, app.timeData, app.distanceData, 'r');
ylabel(app.UIAxes, 'Displacement (mm)');
xlabel(app.UIAxes, 'Time');
app.UIAxes.XGrid = 'on';
app.UIAxes.YGrid = 'on';
%{
plot(app.UIAxes, app.timeData, app.loadData, 'b', app.timeData, app.distanceData, 'r');
xlabel(app.UIAxes, 'Time');
ylabel(app.UIAxes, 'Load (N) / Distance (mm)');
legend(app.UIAxes, 'Load', 'Distance');
%}
end
end
% Callbacks that handle component events
methods (Access = private)
% Value changed function: Switch
function SwitchValueChanged(app, event)
value = app.Switch.Value;
if strcmp(value,"On")
app.Lamp.Color = 'g';
app.dq = daq("ni");
app.dq.ScansAvailableFcn = @(src,event) getdat(app, src, event);
ch1 = addinput(app.dq, 'Dev1', 'ai0','Voltage');
ch2 = addinput(app.dq, 'Dev1', 'ai1','Voltage');
app.dq.Rate = app.R;
app.dq.UserData = [0 0];
start(app.dq,"Continuous");
else
% app.dq.ScansAvailableFcn = @(src,event) getdat(app, src, event);
stop(app.dq);
app.Lamp.Color = 'r';
% delete(app.f1);
%
% delete(app.f2);
removechannel(app.dq,1:length(app.dq))
% start(app.dq,"Continuous");
% removechannel(app.dq,2)
% daqreset
end
end
% Button pushed function: SAVEDATAButton
function SAVEDATAButtonPushed(app, event)
% Prompt the user to choose a filename and location for saving the data
[filename, filepath] = uiputfile('*.csv', 'Save Data As');
if isequal(filename,0) || isequal(filepath,0)
% User canceled the operation
return;
end
% Combine the filename and path
fullpath = fullfile(filepath, filename);
% Open or create the CSV file
fid = fopen(fullpath, 'w');
% Write headers to the CSV file
fprintf(fid, 'Time,Load (N),Displacement (mm)\n');
% Write data to the CSV file
for i = 1:numel(app.timeData)
fprintf(fid, '%s,%f,%f\n', ...
datestr(app.timeData(i)), ...
app.loadData(i), ...
app.distanceData(i));
end
% Close the file
fclose(fid);
end
% Callback function
function SystemLogSizeChanged(app, event)
% position = app.SystemLog.Position;
% if strcmp(app.Lamp.Color,'g')
%
end
% Button pushed function: CleardataButton
function CleardataButtonPushed(app, event)
% app.dq.ScansAvailableFcn = @(src,event) getdat(app, src, event);
stop(app.dq);
% Clear the session and channels.
% app.timeData = [app.timeData; datetime('now')];
% app.loadData = [app.loadData; app.load];
% app.distanceData = [app.distanceData; app.distance];
delete(app.f1);
delete ('app.timeData')
delete ('app.distanceData')
delete ('app.loadData')
delete(app.f2);
% daqreset
% start(app.dq);
% app.dq
% stop(app.dq);
% cla(app.load,"reset");
% delete (app.load);
% cla(app.distance,"reset");
% delete(app.distance);
% cla(app.UIAxes);
% cla()
% delete(app.dq);
% delete(app.distance);
% delete(app.UIAxes)
% cla(app.UIAxes,"reset");
% app.dq.release('ni');
end
end
% Component initialization
methods (Access = private)
% Create UIFigure and components
function createComponents(app)
% Create UIFigure and hide until all components are created
app.UIFigure = uifigure('Visible', 'off');
app.UIFigure.Position = [100 100 1051 699];
app.UIFigure.Name = 'MATLAB App';
% Create TabGroup
app.TabGroup = uitabgroup(app.UIFigure);
app.TabGroup.Position = [1 0 1051 699];
% Create Tab
app.Tab = uitab(app.TabGroup);
app.Tab.Title = 'Tab';
% Create UIAxes
app.UIAxes = uiaxes(app.Tab);
xlabel(app.UIAxes, 'Displacement (mm)')
ylabel(app.UIAxes, 'Force (N)')
zlabel(app.UIAxes, 'Z')
app.UIAxes.YGrid = 'on';
app.UIAxes.Position = [15 26 828 505];
% Create SwitchLabel
app.SwitchLabel = uilabel(app.Tab);
app.SwitchLabel.HorizontalAlignment = 'center';
app.SwitchLabel.Position = [40 599 40 22];
app.SwitchLabel.Text = 'Switch';
% Create Switch
app.Switch = uiswitch(app.Tab, 'slider');
app.Switch.ValueChangedFcn = createCallbackFcn(app, @SwitchValueChanged, true);
app.Switch.Position = [37 636 45 20];
% Create LampLabel
app.LampLabel = uilabel(app.Tab);
app.LampLabel.HorizontalAlignment = 'right';
app.LampLabel.Position = [25 562 35 22];
app.LampLabel.Text = 'Lamp';
% Create Lamp
app.Lamp = uilamp(app.Tab);
app.Lamp.Position = [75 562 20 20];
app.Lamp.Color = [1 0 0];
% Create SAVEDATAButton
app.SAVEDATAButton = uibutton(app.Tab, 'push');
app.SAVEDATAButton.ButtonPushedFcn = createCallbackFcn(app, @SAVEDATAButtonPushed, true);
app.SAVEDATAButton.Position = [940 25 100 23];
app.SAVEDATAButton.Text = 'SAVE DATA';
% Create VoltageEditFieldLabel
app.VoltageEditFieldLabel = uilabel(app.Tab);
app.VoltageEditFieldLabel.HorizontalAlignment = 'right';
app.VoltageEditFieldLabel.Position = [878 226 46 22];
app.VoltageEditFieldLabel.Text = 'Voltage';
% Create VoltageEditField
app.VoltageEditField = uieditfield(app.Tab, 'numeric');
app.VoltageEditField.Position = [939 226 100 22];
% Create LoadNEditFieldLabel
app.LoadNEditFieldLabel = uilabel(app.Tab);
app.LoadNEditFieldLabel.HorizontalAlignment = 'right';
app.LoadNEditFieldLabel.Position = [872 133 52 22];
app.LoadNEditFieldLabel.Text = 'Load (N)';
% Create LoadNEditField
app.LoadNEditField = uieditfield(app.Tab, 'numeric');
app.LoadNEditField.Position = [939 133 100 22];
% Create VoltageLEditFieldLabel
app.VoltageLEditFieldLabel = uilabel(app.Tab);
app.VoltageLEditFieldLabel.HorizontalAlignment = 'right';
app.VoltageLEditFieldLabel.Position = [861 188 63 22];
app.VoltageLEditFieldLabel.Text = 'Voltage (L)';
% Create VoltageLEditField
app.VoltageLEditField = uieditfield(app.Tab, 'numeric');
app.VoltageLEditField.Position = [939 188 100 22];
% Create DistancemmEditFieldLabel
app.DistancemmEditFieldLabel = uilabel(app.Tab);
app.DistancemmEditFieldLabel.HorizontalAlignment = 'right';
app.DistancemmEditFieldLabel.Position = [841 82 83 22];
app.DistancemmEditFieldLabel.Text = 'Distance (mm)';
% Create DistancemmEditField
app.DistancemmEditField = uieditfield(app.Tab, 'numeric');
app.DistancemmEditField.Position = [939 82 100 22];
% Create CleardataButton
app.CleardataButton = uibutton(app.Tab, 'push');
app.CleardataButton.ButtonPushedFcn = createCallbackFcn(app, @CleardataButtonPushed, true);
app.CleardataButton.Position = [938 280 100 23];
app.CleardataButton.Text = 'Clear data';
% Show the figure after all components are created
app.UIFigure.Visible = 'on';
end
end
% App creation and deletion
methods (Access = public)
% Construct app
function app = app2
% Create UIFigure and components
createComponents(app)
% Register the app with App Designer
registerApp(app, app.UIFigure)
if nargout == 0
clear app
end
end
% Code that executes before app deletion
function delete(app)
% Delete UIFigure when app is deleted
delete(app.UIFigure)
end
end
end
2 commentaires
Mario Malic
le 14 Juin 2024
Hi,
these are variables/properties
delete ('app.timeData')
delete ('app.distanceData')
delete ('app.loadData')
replace this code with
app.timeData = [];
% ...
aswell, to clear the axes, uncomment this line
cla(app.UIAxes);
Try and see if it works. If it doesn't upload the app file.
Réponses (1)
Mario Malic
le 10 Juin 2024
Hi Sherry,
Check my app, maybe it will be useful for you. https://uk.mathworks.com/matlabcentral/fileexchange/128118-daqx?s_tid=prof_contriblnk
7 commentaires
Voir également
Catégories
En savoir plus sur Develop uifigure-Based Apps dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!