im Rahmen meiner Masterarbeit benutze ich Matlab um ein "Echtzeit-Kontrollsystem" aufzubauen. Ich versuche im Folgenden mein Problem so gut wie möglich zu beschreiben.
Konkret geht es darum verschiedene Spektren (im Prinzip ist das immer nur ein Vektor) möglichst schnell zu analysieren. Meine Daten liegen einzeln im Format .sif in einem Ordner vor. D.h. jede .sif Datei enthält genau ein Spektrum.
Bisher gehe ich so vor, dass ich über mein Import Skript eine Datei aus diesem Ordner selbst wählen kann, diese wird in mein Matlab Analyse Programm geladen und dort analysiert. Soweit so gut.
Nun würde ich gerne folgendes realisieren:
Ich würde Matlab gerne kontinuierlich laufen lassen und sozusagen auf neue .sif Dateien warten lassen. Sobald ein neues .sif File in diesem Ordner erzeugt wird (durch das Spektrometer) soll dieses automatisch in Matlab importiert werden und analysiert werden. Das soll dann solange fortgesetzt werden bis keine weiteren .sif Dateien kommen oder ich das Matlab Programm manuell stoppe.
Ich habe sowas noch nicht einmal ansatzweise in Matlab durchgeführt und habe keine Idee wie ich da heran gehen soll. Ist so etwas überhaupt möglich? Wenn ja wie?
Ich hoffe ich habe mich verständlich ausgedrückt. Über Hilfe wäre ich sehr dankbar.
Falls es weiter hilft, hier ist der Code zum Importieren von einzelnen .sif Dateien (ist nicht von mir, sondern von der Matlab File Exchange Seite)
Code:
% ------------------------------------------------------------------------ % Read SIF-File % -----------------------------------------------------------------------
rc=atsif_setfileaccessmode(0); %sets up the sif library to set the access property to load the entire file
[FileName,PathName,FilterIndex]=uigetfile('*.sif;*.SIF', 'Select SIF'); % opens dialog to let the user select sif to open
absfilepath=strcat(PathName,FileName);; % sets up the file name
rc=atsif_readfromfile(absfilepath); % attempt to open the file
if(rc == 22002)% check that the file was successfully opened
signal=0;
[rc,present]=atsif_isdatasourcepresent(signal); % check there is a signal present if present
[rc,no_frames]=atsif_getnumberframes(signal); % query the number of frames contained in the file (e.g. in the instance of a kinetic series there may be more than 1 if(no_frames > 0) [rc,extent]=atsif_getframesize(signal);
[rc,left,bottom,right,top,hBin,vBin]=atsif_getsubimageinfo(signal,0); % get the dimensions of the frame to open
xaxis=0;
[rc,data]=atsif_getframe(signal,0,extent); % retrieve the frame data [rc,pattern]=atsif_getpropertyvalue(signal,'ReadPattern');
if(pattern == '0') %FVB
calibvals = zeros(1,extent);
for i=1:extent,[rc,calibvals(i)]=atsif_getpixelcalibration(signal,xaxis,(i)); %gets the x-calibration of each pixel (either pixel no. or wavelength
end plot(calibvals,data); % display the 1D data title('spectrum');
%set up the axis labelling appropriately
[rc,xtype]=atsif_getpropertyvalue(signal,'XAxisType');
[rc,xunit]=atsif_getpropertyvalue(signal,'XAxisUnit');
[rc,ytype]=atsif_getpropertyvalue(signal,'YAxisType');
[rc,yunit]=atsif_getpropertyvalue(signal,'YAxisUnit');
xlabel({xtype;xunit});
ylabel({ytype;yunit});
elseif(pattern == '4')% image
width = ((right - left)+1)/hBin;
height = ((top-bottom)+1)/vBin;
newdata=reshape(data,width,height); % reshape the 1D array to a 2D array for display imagesc(newdata);
else
%TODO - implement for single-track, multi-track & random track
disp('It is not possible to display this acquisition format at this time...') end end end else disp('Could not load file. ERROR - ');
disp(rc);
end
ich würde ein programm schreiben das in regelmäßigen abständen mit dem
dir
befehl guckt ob in dem ordner eine neue datei dazugekommen ist. durch den dir befehl hast du dann ja den filename und kannst das dann importieren ( am besten
fullfile
benutzen). der teil hir muss da geändert werden :
. da guckst du halt mit dir ob sich im vergleich zum vorherigen durchlauf was geändert hat und falls ja dann list du es mit dem restlichen code halt ein.
bei einer schleifenlösung immer auch dran denken das die schleife irgendwann beendet werden sollte. außerdem würde ich nur alle paar sekunden gucken ob was neues da ist. das sind ja immer lese zugriffe.
grüße
_________________
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.