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

Messzeit bestimmen

 

Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2015, 21:58     Titel:
  Antworten mit Zitat      
Deine Timer-Funktion ist doof definiert. Erstens muss sie zwei Eingangs-Argumente haben, zweitens ist es eine Funktion. Alle Variablen, die Du darin benutzt, sind am Ende der Funktion weg. Entweder Du deklarierst die Variablen als persistent oder Du machst es so, wie im Beispiel unten über die UserData -Eigenschaft des Timer-Objekts.

aufrufendesskript.m
Code:


t = timer;
t.StartDelay = 0;
t.Period = 1;
t.TasksToExecute = 5;
t.ExecutionMode = 'fixedRate';
t.TimerFcn = @test;

tic;
start(t)
 



test.m
Code:

function test(myTimer, ~)

    myTimer.UserData = [myTimer.UserData, toc];
    myTimer.UserData

end
 
Private Nachricht senden Benutzer-Profile anzeigen


JensMt

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2015, 22:46     Titel:
  Antworten mit Zitat      
das ist ja Wahnsinn. Echt spitze. Genial. Vielen Dank. So wie es aussieht habe ich den Timer grundsätzlich falsch genutzt bzw. man muss hier verstehen, dass man mit Objekten arbeitet.
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2015, 22:51     Titel:
  Antworten mit Zitat      
An dem Beispiel kann man auch schön sehen, dass nicht mal der timer-Aufruf wirklich pünktlich funktioniert...
Private Nachricht senden Benutzer-Profile anzeigen
 
JensMt

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2015, 23:28     Titel:
  Antworten mit Zitat      
Ich erhalte Verzögerungen von ca. 5ms...Was aber insgesamt nicht schlimm ist bei einer Auflösung von 1sec...

das ist der Ausschnitt meines Codes um das Messgerät abzufragen
Code:
while k <= m      
    tic;
    pause(1);                  
    strom(k,:) = query(obj1, 'Lesen');
    zeit(k,:) = toc;
    k = k+1;
end


der timer selber ist ein obj. und ich habe hier wieder ein objekt (obj1) welches dem Messgerät entspricht. über query frage ich die daten ab. Wenn ich jetzt hier den timer einbaue, wird es Schwierigkeiten da es zwei objekte sind!?
edit winkow: mal wieder code umgebung eingefügt
 
JensMt

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2015, 23:29     Titel:
  Antworten mit Zitat      
bei den smilies sollten eigentlich ein doppelpunkt hin. Sorry...
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2015, 23:32     Titel:
  Antworten mit Zitat      
Nein. Du musst nur zusehen, dass Du das Messgerät-Objekt in der Timerfunktion bekannt machst. Auch das geht z.B. über die UserData-Eigenschaft des Timer-Objekts.

Bitte benutze in Zukunft doch die Code-Umgebung. Einfach oberhalb des Text-Eingabe-Felds auf "Code" drücken.
Private Nachricht senden Benutzer-Profile anzeigen
 
JensMt

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2015, 23:44     Titel:
  Antworten mit Zitat      
Alles klar. Ich werde direkt am Messgerät ausprobieren. Kannst du mir noch einen Tipp geben, wie ich sowas ausser mit der Matlab Doku lernen kann? Meine Programmiervorlesung liegt jetzt 5 Jahre in der Vergangenheit. Ich sitze da schon länger dran. Als erfahrener Programmier wäre das schnell gelöst.
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2015, 23:49     Titel:
  Antworten mit Zitat      
Die meisten Funktionen sind eigentlich ganz wunderbar Dokumentiert. Da gibt es immer ein oder mehrere lauffähige Beispiele, die die häufigsten Anwendungsfälle zeigen. Auch bei doc timer ist das der Fall...
Private Nachricht senden Benutzer-Profile anzeigen
 
JensMt

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2015, 23:54     Titel:
  Antworten mit Zitat      
Super. Vielen Dank für die schnelle Antwort.
 
JensMt

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2015, 08:51     Titel:
  Antworten mit Zitat      
Code:
function mes(obj1, ~)
   
      fprintf(obj1,'Messen');


end
 


das ist die Funktion die vom Timer aufgerufen wird.
Ich erhalte immer wieder diese Fehlermeldung. Liegt das am fprintf? oder kennt er das Objekt1 nicht?

??? Error while evaluating TimerFcn for timer 'timer-21'

Invalid file identifier. Use fopen to generate a valid file identifier.


Vielen Dank...
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2015, 08:53     Titel:
  Antworten mit Zitat      
Wenn der Timer die callback-funktion aufruft, wird als erstes argument das timer-objekt übergeben.

Du versuchst also einen String in das Timer-Objekt zu schreiben, wo fprintf ein handle auf eine Datei erwartet (das bekommst Du mit fopen , willst Du aber nicht haben).
Private Nachricht senden Benutzer-Profile anzeigen
 
JensMt

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2015, 09:13     Titel:
  Antworten mit Zitat      
Ich verzweifel gerade an der Sache. Selbst mit der Doku von Matlab. Das Obj1 ist das Messgerät und den Timer habe ich in aufgerufen nachdem ich die Verbindung über fopen(obj1) zum Messgerät hergestellt habe. Der Timer ruft dann diese Callback funtion auf.
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2015, 09:31     Titel:
  Antworten mit Zitat      
Guck doch mal, was eine Funktion ist und wie sich das mit Funktionen und Variablen so verhält... Man kann in Funktionen nicht einfach die Variablen aus dem Base-Workspace benutzen, die haben immer ihren eigenen Workspace. Wenn Du Variablen in der Funktion haben willst, nennt man die Argument und müssen beim Aufruf übergeben werden. Wenn Du Variablen aus der Funktion raus haben willst, nennt man das Rückgabewert.
Private Nachricht senden Benutzer-Profile anzeigen
 
JensMt

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2015, 10:15     Titel:
  Antworten mit Zitat      
Aber das Problem liegt doch nicht an der Übergabe von Variablen an meine Funktion @mes. Die Ausführung von fprintf versucht auf das Objekt zuzugreifen und dies scheitert. Der Befehl 'Messen' ist dem Messgerät ja bekannt. Vllt. kannst du mir noch ein Beispielcode geben an dem ich es nachvollziehen kann? Das wäre sehr hilfreich.
 
JensMt

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2015, 10:22     Titel:
  Antworten mit Zitat      
Code:
string_1 = 'MES';
t.TimerFcn = {@mes, obj1, string_1};


so sieht mein Aufruf aus der timerfcn.
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3, 4  Weiter

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.