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

Werte aus *.txt auslesen

 

Heisenberg

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.11.2011, 15:57     Titel:
  Antworten mit Zitat      
ok das hier ist das ergbeniss:

Timer Object: timer-1

Timer Settings
ExecutionMode: fixedDelay
Period: 2
BusyMode: drop
Running: on

Callbacks
TimerFcn: {@checkFile [1x63 char] [1x20 char]}
ErrorFcn: ''
StartFcn: ''
StopFcn: ''

was sagt mir das jetzt?! Shocked

wie kann ich denn jetzt matlab sagen dass er das programm abfährt sobald die datei aktualisiert wurde?


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.452
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.11.2011, 17:38     Titel:
  Antworten mit Zitat      
Hallo,

diese Ausgabe ist an sich unwichtig; du kannst sie mit einem ; unterdrücken.

Hast du denn mal geschaut, was passiert, wenn du die Datei änderst? Es sollte dann "File was updated" im Command Window angezeigt werden.

Das ist übrigens auch die einzige Stelle, die du wirklich in dem Code ändern musst: Statt
Code:
   disp('File was updated')
    % Process for processing new file goes here

musst du natürlich deinen eigenen Code, der bei Aktualisierung der Datei ausgeführt werden soll, einbauen.

Ich würde es jedoch erst mal so testen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Heisenberg

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2011, 11:27     Titel:
  Antworten mit Zitat      
ok das funktioniert soweit, wie ist denn jetzt das zeitintervall, in der er checkt ob die datei aktualisiert wurde? bzw wo kann ich das einstellen?

so sieht es momentan aus:

Code:
function t = updateCheck(filename)
d = dir(filename);
lastdate = d.date;
dt = 2;

t = timer('TimerFcn',{@checkFile, filename, lastdate}, 'Period', dt, ...
    'ExecutionMode', 'FixedDelay');
start(t)

function checkFile(t, foo2, filename, lastdate)
d = dir(filename);
if ~strcmp(d.date, lastdate)
   

fid = fopen('C:\windows\Desktop\xy.txt');
daten = cell2mat(textscan(fid, '%f%f', 'headerlines', 1));
fclose(fid);

x = daten(end,1:1);
y = daten(end,2:2);

l1 = 335;
l2 = 365;
l3 = sqrt(171769);
l4 = 405;
l5 = 104;
a = 75;
b = 231;
c = 88;

s1 = sqrt(x^2 + y^2) - a;
s2 = sqrt(b^2 + s1^2);

theta(1) = ( atan2 (y,x) )/ pi * 180;
theta(2) = acosd ((b^2 + s2^2 - s1^2)/(2*b*s2)) + acosd ((l2^2+s2^2-l3^2)/(2*l2*s2))-180;
theta(3) = 180 - acosd ((l2^2+l3^2-s2^2)/(2*l2*l3)) - acosd ((c^2+l3^2-l4^2)/(2*c*l3));
theta(4) = 90 - acosd ((s1^2+s2^2-b^2)/(2*s1*s2)) - acosd ((s2^2+l3^2-l2^2)/(2*s2*l3)) - acosd ((l3^2+l4^2-c^2)/(2*l3*l4));

disp(sprintf('theta %i = %.4f\n', [1:length(theta); theta]));  

xlswrite('C:\windows\Desktop\winkel.xls',theta,'A2:D2');

end
set(t, 'TimerFcn',{@checkFile, filename, d.date}) % set new modification date


achso und noch 2 sachen:

wo muss ich das ; setzen um diese ausgabe zu unterdrücken:

Timer Object: timer-1

Timer Settings
ExecutionMode: fixedDelay
Period: 2
BusyMode: drop
Running: on

Callbacks
TimerFcn: {@checkFile [1x63 char] [1x20 char]}
ErrorFcn: ''
StartFcn: ''
StopFcn: ''

und: wo könnt ich im programm was ändern, damit ich komplett ohne command window arbeiten kann? sprich ich nur das programm starten muss und den run button drücken muss?

danke schonmal
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.452
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.12.2011, 11:49     Titel:
  Antworten mit Zitat      
Hallo,

dieses Zeitintervall ist dt, und am Anfang des Programms auf 2 gesetzt.

Die Zeile
Code:
set(t, 'TimerFcn',{@checkFile, filename, d.date}) % set new modification date

sollte noch in den if-Teil rein, also vor das "end".

Falls das das Problem der 4-maligen Ausgabe nicht behebt, kann ich mir das nur so erklären, dass du den Timer 4 Mal gestartet hast. Das ist aber an sich nicht nötig, da der Timer läuft, bis du ihn mit stop beendest.

Natürlich kannst du die Zeile, mit der du das startest, in ein Skript schreiben, und dieses laufen lassen. Alternativ kannst du bei dem "Run"-Button die Run Configurations ändern (kleiner Pfeil daneben) und dort deinen Aufruf reinschreiben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Heisenberg

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2011, 11:52     Titel:
  Antworten mit Zitat      
komischerweise gubt er mir nicht immer das ergebniss 4 mal raus, sondern manchmal auch 3 mal oder 2 mal, dann wieder nur 1 mal...
ich hab extra drauf geachtet, dass ich nur einmal starte.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.452
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.12.2011, 11:55     Titel:
  Antworten mit Zitat      
Hallo,

hast du die oben genannte Änderung umgesetzt?

Zitat:
Die Zeile
set(t, 'TimerFcn',{@checkFile, filename, d.date}) % set new modification date

sollte noch in den if-Teil rein, also vor das "end".


Probier auch mal, die Zeile unmittelbar nach dem "if ~strcmp(d.date, lastdate)" einzufügen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Heisenberg

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2011, 11:57     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

dieses Zeitintervall ist dt, und am Anfang des Programms auf 2 gesetzt.

Die Zeile
Code:
set(t, 'TimerFcn',{@checkFile, filename, d.date}) % set new modification date

sollte noch in den if-Teil rein, also vor das "end".

Falls das das Problem der 4-maligen Ausgabe nicht behebt, kann ich mir das nur so erklären, dass du den Timer 4 Mal gestartet hast. Das ist aber an sich nicht nötig, da der Timer läuft, bis du ihn mit stop beendest.

Natürlich kannst du die Zeile, mit der du das startest, in ein Skript schreiben, und dieses laufen lassen. Alternativ kannst du bei dem "Run"-Button die Run Configurations ändern (kleiner Pfeil daneben) und dort deinen Aufruf reinschreiben.

Grüße,
Harald


dt=2 heißt 2 sekunden richtig? das wäre ok.
die Run configurations habe ich auch geändert, das läuft soweit.

einzigen probleme die ich noch habe das die ausgabe im command window mehrfach auftritt...
und wo ich das ; hinsetzen muss damit die ausgabe von oben unterdrückt wird.

gruß
 
Heisenberg

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2011, 12:00     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

hast du die oben genannte Änderung umgesetzt?

Zitat:
Die Zeile
set(t, 'TimerFcn',{@checkFile, filename, d.date}) % set new modification date

sollte noch in den if-Teil rein, also vor das "end".


Probier auch mal, die Zeile unmittelbar nach dem "if ~strcmp(d.date, lastdate)" einzufügen.

Grüße,
Harald


ja habe ich gerade versucht aber ändert nichts....
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.452
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.12.2011, 12:07     Titel:
  Antworten mit Zitat      
Hallo,

meine Vorschläge habe ich dir geschrieben. Entscheidend könnte sein, die besagte Code-Zeile direkt unter die if-Abfrage einzufügen.

Da ich nicht neben dir sitze, kann ich auch schlecht das Debugging für dich übernehmen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Heisenberg

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2011, 12:09     Titel:
  Antworten mit Zitat      
ja das habe ich gerade gemacht aber wie gesagt er spuckt mir das ergebniss immernoch 4 mal meistens aus, manchmal nur 3 mal oder 2 mal ... Sad

edit:
wobei jetzt macht er immer genau 4 mal...
 
Heisenberg

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2011, 12:20     Titel:
  Antworten mit Zitat      
aahhhh ok rückzug!! mein fehler, ich dummkopf hab den timr 4 oder x mal gestartet! sau dumm! sry.

was mir gerade aufgefallen ist wenn ich das programm zum ersten mal starte kommt folgende fehlermeldung:


Warning: Could not find an exact (case-sensitive) match for
'updatecheck'.
C:\windows\Desktop\updateCheck.m is a case-insensitive
match and will be used instead.
You can improve the performance of your code by using exact
name matches and we therefore recommend that you update
your
usage accordingly. Alternatively, you can disable this
warning using
warning('off','MATLAB:dispatcher:InexactCaseMatch').
This warning will become an error in future releases.

was hat das denn zu bedeuten?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.452
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.12.2011, 12:22     Titel:
  Antworten mit Zitat      
Hallo,

das bedeutet, dass du wahrscheinlich updatecheck statt updateCheck eingegeben hast. Auf jeden Fall passt Groß- und Kleinschreibung nicht.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Heisenberg

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2011, 12:33     Titel:
  Antworten mit Zitat      
ok jetzt ist es fast perfekt!
einziges problem noch dass ich gerne die asugabe von oben unterdrücken würde, allerdings habe ich das ; an alle möglichen stellen gepackt und es wird nicht unterdrückt.

und noch was wie kann ich denn wenn ich den timer jetzt ausversehen mehrmals gestartet habe das debugging beenden ohne matlab zu beenden?

grüße
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.452
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.12.2011, 12:37     Titel:
  Antworten mit Zitat      
Hallo,

welche Ausgabe? Die Timer-Informationen? Das musst du im Aufruf unterdrücken:

Code:
t = updateCheck('xy.txt');


Beenden und Löschen aller Timer:
Code:
delete(timerfindall)


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Heisenberg

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2011, 12:42     Titel:
  Antworten mit Zitat      
alles klar! es läuft wunderbar!
ich bin vorerst versorgt.
Danke harald du hast es drauf Razz
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3  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.