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-System - Messdaten live Visualisieren und Speichern

 

raumj
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 01.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2016, 08:51     Titel: DAQ-System - Messdaten live Visualisieren und Speichern
  Antworten mit Zitat      
Hallo goMatlab-Community,

erstmals möchte ich ein großes Lob an euch richten, Ihr habt ein super Forum aufgebaut, dass eine tolle Hilfestellung bietet um sich Matlab selbst anzueignen.

Trotz dessen bin ich als Matlab-Anfänger nun auf ein denkbar simples-Problem gestoßen welches ich noch nicht bewerkstelligen konnte.

Schilderung meiner Aufgabe:
Ich habe verschiedene Sensoren um Kräfte, Drehmomente und Wege bei der Metallverabeitung (Zerspanungsprozesse) zu messen. Alle Sensoren und Aufnehmer sind an ein DAQ-System angeschlossen. Nun soll beim Ausführen des Skriptes ein Plot (Figur) aufgehen in dem "live" die aktuellen Kräfte angezeigt werden. Nach Ablauf der vorgegebenen Messzeit oder durch manuelles Stoppen der Aufzeichnung sollen die Daten im Workspace abgelegt werden um diese hinterher weiterverarbeiten zu können.

Problem:
Mit meinem aktuellen Skript werden alle Funktion bereits erfüllt, nur die Ablage der Daten im Workspace, will mir nicht gelingen. Ich habe bereits mit diversen Befehlen wie " t = event.TimeStamps; data = event.Data; " versucht die Daten zu entnehmen, jedoch ohne Erfolg.

Code:
Code:
function runSessionDAQ
%% Einlesen DAQ-Hardware
daq.getDevices;

s = daq.createSession('ni');

%% Einlesen DAQ-Channel
addAnalogInputChannel(s,'cDAQ1Mod1',0,'Voltage'); % Kraft Fx
addAnalogInputChannel(s,'cDAQ1Mod1',1,'Voltage'); % Kraft Fy
addAnalogInputChannel(s,'cDAQ1Mod1',2,'Voltage'); % Kraft Fz

%% Abtastrate / Messzeit
s.Rate = 1000;
s.DurationInSeconds = 25;

%% live-Plot

lh = addlistener(s,'DataAvailable', @(src,event) plot(event.TimeStamps, event.Data));

%% Speichern der Daten  >>> ohne Funktion >>> Fehlermeldung: "Undefined variable "event" or class "event.TimeStamps". Error in Forum_Frage (line 21)"
     t = event.TimeStamps; data = event.Data;
     save('C:\Users\raumj\Documents\MATLAB\Drehmaschine\data.mat','t','data');            

     
%% Messung im Hintergrund starten
s.startBackground();

s.wait()

delete(lh)
end


Wo liegt mein Fehler. Könnt Ihr mir weiterhelfen.

Vielen Dank im Vorraus.

Gruß Julian
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 02.06.2016, 10:19     Titel: Re: DAQ-System - Messdaten live Visualisieren und Speichern
  Antworten mit Zitat      
Hallo raumj,

Vielen Dank für das Lob an das Forum!

Die Schilderung der Aufgabe hat mit dem eigentlichen problem nichts zu tun, oder? Die Daten könnten also genauso gut per rand erzeugt worden sein. In dem Fall könnte man diesen Absatz einfach weglassen.

Zitat:
Ich habe bereits mit diversen Befehlen wie " t = event.TimeStamps; data = event.Data; " versucht die Daten zu entnehmen, jedoch ohne Erfolg.

Bitte poste den Code, mit dem Du es versucht hast und erkläre, wo du ihn ausgeführt hast: innerhalb der Funktion oder im Base-Worksapce? In einer anderen Funktion oder in einem Script?
Was genau bedeutet "ohne Erfolg"? Gibt es eine Fehlermeldung oder weicht das Ergebnis von Deinen Erwartungen ab?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
raumj
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 01.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2016, 10:57     Titel:
  Antworten mit Zitat      
Hallo Jan,

ok zukünfitig werde ich solche Informationen weglassen. Ich war der Meinung das durch die Schilderung der Aufgabenstellung vieleicht mein Problem bzw. meine Aufgabe klarer wird.

Die Daten werden kontunierlich und fortlaufenden erzeugt und kommen über die DAQ-Schnittstelle. Ob dies mit "rand" vergleichbar ist, kann ich leider mit meinen momentanen Kenntnissen nicht beurteilen. Den von mir verwendeteten Code habe ich bereits oben gepostet. Diesen habe ich im Format "MATLAB-Code files (*.m) " gespeichert und über den Editor ausgeführt. Die Fehlermeldung die ich beim Ausführen des Codes erhalte lautet:

[color=green]"Undefined variable "event" or class "event.TimeStamps". Error in Forum_Frage (line 21)"[/color]

Ich hoffe ich konnte die offenen Fragen klären und Ihr könnt mir damit weiterhelfen.

Viele Grüße
Julian
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 03.06.2016, 11:22     Titel:
  Antworten mit Zitat      
Hallo raumj,

Die Fehlermeldung besagt, dass es keine Variable namens "event" gibt. Wieso meinst Du, dass sie existiert?
Code:
lh = addlistener(s,'DataAvailable', @(src,event) plot(event.TimeStamps, event.Data));
t = event.TimeStamps;
data = event.Data;

Innerhalb des Callbacks des erzeugten Listeners ist "event" definiert, aber nicht im aufrufenden Code. Vielleicht meinst Du:
Code:
lh = addlistener(s,'DataAvailable', @myCallback);
...
function myCallback(src, event)
plot(event.TimeStamps, event.Data);
t = event.TimeStamps;
data = event.Data;
...

Jetzt besteht der Callback aus einer eigenen Funktion und "event" ist darin definiert.
Es sieht allerdings seltsam aus, dass bei jedem "DataAvailable"-Event die Daten per save gespeichert wird. Files dauernd zu überschreiben ist enorm zeitfressend und nicht sinnvoll.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
raumj
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 01.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2016, 13:12     Titel:
  Antworten mit Zitat      
Hallo Jan,

vielen Dank für deine Hilfe. Die Fehlermeldung bezüglich der Definition konnte ich damit beheben. Aber die Variablen "t = event.TimeStamps; data = event.Data; " werden mir immernoch nicht im Workspace angezeigt. Ist das für dich nachvollziehbar?

Hier nochmals der gesamte Code:
Code:
function runSessionDAQ
%% Einlesen DAQ-Hardware
daq.getDevices;

s = daq.createSession('ni');

%% Einlesen DAQ-Channel
addAnalogInputChannel(s,'cDAQ1Mod1',0,'Voltage'); % Kraft Fx
addAnalogInputChannel(s,'cDAQ1Mod1',1,'Voltage'); % Kraft Fy
addAnalogInputChannel(s,'cDAQ1Mod1',2,'Voltage'); % Kraft Fz

%% Abtastrate / Messzeit
s.Rate = 1000;
s.DurationInSeconds = 5;

%% live-Plot

lh = addlistener(s,'DataAvailable', @myCallback);

function myCallback(src, event)
plot(event.TimeStamps, event.Data);
t = event.TimeStamps;
data = event.Data;
end

s.startBackground();

s.wait()
delete(lh)

end



Besten Dank,

Gruß Julian
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 04.06.2016, 19:50     Titel:
  Antworten mit Zitat      
Hallo raumj,

Die Variablen t und data werden ja nur innerhalb des Callbacks erzeugt. Also existieren sie auch nur im Workspace der Callback-Funktion. In welchem Workspace möchtest Du sie denn haben? Im Base-Workspace? Dann hilft nur ein assignin .

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
raumj
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 01.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.06.2016, 11:21     Titel:
  Antworten mit Zitat      
Hallo Jan,

ja ich würde die Variablen gerne im Basis-Workspace ablegen.

Ich hab versucht innerhalb meiner Funktion den Befehl "assignin" zu verwenden:
Code:
function myCallback(src, event)
plot(event.TimeStamps, event.Data);
t = event.TimeStamps;
data = event.Data;

assignin(ws, 'data', data);
end


Leider wieder ohne Erfolg. Hier wird mir solange die Abarbeitung des Skriptes läuft (zb.5sek.-Messzeit) eine Endlosschleife von Warnungen ausgegeben:
Warning: Error occurred while executing the listener callback for event DataAvailable defined for class
daq.ni.Session:
Undefined function or variable 'ws'.
Error in Kraftaufzeichnung_KMP/myCallback ( line 25)
assignin(ws, 'data', data);....................................................


Wenn ich asignin außerhalb meiner Funktion setzte. Erhalte ich die Fehlermeldung:
Undefined function or variable 'ws'.
Error in Kraftaufzeichnung_KMP (line 1Cool
assignin(ws, 'data', data);


Ich war der Meinung das die Variable "ws" für Workspace steht. So habe ich dies zumindest aus der Matlab-Hilfe unter assignin interpretiert.

Alles nicht so einfach als vorerst gedacht. Ich hoffe Ihr könnt mir eine weitere Hilfestellung geben.

Gruß Julian
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 06.06.2016, 13:04     Titel:
  Antworten mit Zitat      
Ja, "ws", steht für den Workspace, aber eben für den Namen dessen. Für den base workspace wie z.B. in der Hilfe:

Code:

assignin('base', 'imfile', answer{1});
 


Hier im Code muss also der Variable ws der Name des relevanten Workspace zugewiesen werden.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
raumj
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 01.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.06.2016, 13:41     Titel:
  Antworten mit Zitat      
Hervorrangen, danke Andreas!

Die Messdaten (data) und dazugehörige Messzeit (t) werden nun im Basis-Workspace übertragen. Seltsamerweise wird jedoch nur das letzte Zehntel (0,1sek.) der Messdaten übertragen. Habt Ihr auch dafür eine Erklärung?

Vielen Dank!

Gruß Julian
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.