WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

DAQ Toolbox

 

fredel007
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 18.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.05.2010, 14:11     Titel: DAQ Toolbox
  Antworten mit Zitat      
Hallo zusammen,
habe eine Frage bei der ich nicht weiter komme:

Mit einem Button starte ich einen Analogeingang.
Die Erfassung der Daten über den Analogeingang läuft kontinuierlich, da "TriggerRepeat" auf unendlich steht.

Sind jeweils 2000 Samples erfasst wird mit Hilfe der "SamplesAcquiredFuncton" die Auswertefunktion "bufferauswertung" aufgerufen!
Diese ist weiter unten beschrieben!

Code:

function btnaistart_Callback(hObject, eventdata, handles)
% hObject    handle to btnaistart (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

clear count

% Variablendeklaration
samplespertrigger=2000;
plotbreite=16000;

% Analoginput_Objekt erstellen
global ai;
ai = analoginput('dtol',0);

%Kanäle hinzufügen
kanal0=addchannel(ai,0);
kanal1=addchannel(ai,1);
kanal2=addchannel(ai,2);


% Messkarteneinstellungen
set(ai,'BufferingMode','auto');
set(ai,'SampleRate', 16000);
set(ai,'SamplesPerTrigger',samplespertrigger);
set(ai,'TriggerType', 'Immediate');
set(ai,'TriggerRepeat', Inf);
set(ai,'InputType', 'SingleEnded');


% Plot-Eigenschaften
axes(handles.aai);
handlesplot = plot(zeros(plotbreite,3));  % Leeren Plot initialisieren

T = title('Messwerte');
xlabel('X (Abtastpunkte)')
ylabel('Y (Volt)')
legend('Kanal 0','Kanal 1','Kanal 2',2);
set(handlesplot,'LineWidth',2);

grid on;
axis([0 plotbreite -10 10]);

% Übergabe des btnaistart zur übergabe an
btnaistarthandle=handles.btnaistart;

% Wenn Buffer voll ist, wird die Funktion "bufferauswertung" aus der gleichnamigen Datei
% aufgerufen

set(ai,'SamplesAcquiredFcn',{@bufferauswertung,handlesplot,samplespertrigger,plotbreite,btnaistarthandle});

start(ai);


--> bufferauswertung

Code:


function bufferauswertung(obj,event,handlesplot,samplespertrigger,plotbreite,btnaistarthandle)

persistent plotdaten;
persistent count;


if isempty(count)
     count =0
end
count = count + 1


% Aktuelle Daten werden aus dem Buffer ausgelesen
[neuedaten, time]=getdata(obj);

obj.SamplesAcquired


% Daten für den Plot werden zusammengebaut aus den aktuellen Daten und
% einigen zurückliegenden Daten
if isempty(plotdaten)
    plotdaten = [zeros(3,plotbreite-samplespertrigger) neuedaten'];
else
    plotdaten(:, [1:samplespertrigger]) = [];  % Löschen vom ersten bis zum "sampelspertrigger'ten" Eintrag aus dem Array
    plotdaten = [plotdaten neuedaten'];
end



% Plot wird mit neuen Daten geupdated
set(handlesplot(1), 'ydata',plotdaten(1,:));
set(handlesplot(2), 'ydata',plotdaten(2,:));
set(handlesplot(3), 'ydata',plotdaten(3,:));

drawnow;

% Abbruchbedingung zum Stoppen der Anzeige der Daten bei Druck auf btnaistop
c=get(btnaistarthandle,'Enable');

if strcmp(c,'on')==1
    disp('Analog Input stopped!')
    stop(obj);
    clear obj;
    count=0;
end

 


Nun zu meinem Problem:
Zur Kontrolle, wie oft die Funktion "bufferauswertung" aufgerufen wird zählt "count" die Anzahl der Aufrufe.

Nun ist es so, dass sich das Programm jedes mal bei count=55 aufhängt ohne eine Fehlermeldung auszugeben!
Benutze ich nur 2 Kanäle hängt es sich immer bei count=65 auf!
Bei Verwendung eines Kanals läuft das Programm praktisch "unenedlich" (bis count=1000 getestet).

Füge ich allerdings folgede Zeilen in die Funktion "bufferauswertung" ein, so läuft das Programm bei 2 & 3 Kanälen auch ohne Probleme unendlich durch!

Code:

if count == 50
    stop(obj);
    start(obj)
    count=0;
end
 


Alledings bekomme ich dann einen kurzen Moment in dem keine Werte aufgezeichnet werden Sad

Hat jemand eine Idee woran es liegen kann das sich das Programm aufhängt?

Ich verwende die Messkarte DT 322 von NI

Vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen


Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.