|
|
Zeit zwischen zwei Flanken messen |
|
PHEV |
Forum-Fortgeschrittener
|
|
Beiträge: 67
|
|
|
|
Anmeldedatum: 10.12.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 10.12.2013, 11:21
Titel: Zeit zwischen zwei Flanken messen
|
|
Hallo,
wie kann ich die Zeit Zwischen zwei Flanken bzw Bits messen?
Wie kann ich die Zeit allgemein mit Simulink messen?
Ich habe schon einige Zeit gesucht und recherchiert, aber mit clock kann ich irgendwie nichts anfangen.
Ich möchte z.B. die Zeit messen, zwischen einem Bit=1 und einem anderen =1.
Danke
Edit:
Ok ich habe nun recherchiert, dass es wohl mit den Befehlen tic und toc geht. Leider weiß ich nicht genau wie man dieses anwendent.
Ich müsste dann ja so etwas schreiben wie:
tic
if(Variablex=1)
toc
if (Variabley=1)
oder sowas.
Ich bin in matlab leider wirklich neu
|
|
|
|
|
knilumis_baltaM |
Forum-Century
|
|
Beiträge: 241
|
|
|
|
Anmeldedatum: 20.04.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.12.2013, 08:57
Titel:
|
|
Kannst du nicht zwei Variablen nehmen und bei einer Flanke die Zeit aus der Clock in die Variable speichern. Jedes mal wenn du eine gerade Anzahl an Flanken detektiert hast, nimmst du die Differenz der Zeiten in den Variablen.
|
|
|
PHEV |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 67
|
|
|
|
Anmeldedatum: 10.12.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.12.2013, 09:30
Titel:
|
|
Hallo,
ich weiß nicht mal wie ich die Zeit aus einer Variable in eine clock speichere bei einer steigenden Flanke.
Ich arbeite diese woche zum ersten mal mit simulink und matlab
|
|
|
knilumis_baltaM |
Forum-Century
|
|
Beiträge: 241
|
|
|
|
Anmeldedatum: 20.04.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.12.2013, 10:06
Titel:
|
|
Wenn du eine Matlab Function nimmst, dann kannst du die Zeit z.B. so speichern:
So kannst du die letzten zwei Zeiten speichern, bei denen du eine Flanke detektiert hast. Die Frage ist, was soll ausgegeben werden nachdem eine Zeit berechnet wurde? Solange die alte Zeitdifferenz bis was neues berechnet wurde?
Ich gehe davon aus die Verschaltung des Matlab Function Blocks ist offensichtlich.
|
|
|
PHEV |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 67
|
|
|
|
Anmeldedatum: 10.12.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.12.2013, 12:44
Titel:
|
|
Hallo,
danke für die Hilfe schonmal.
Ich habe den Code mal in einen function Block eingefügt.
Leider kommt zum einen der Fehlercode:
Andereseits muss ich gestehen bin ich denke ich noch lange nicht fit genug um das ganze korrekt zu integrieren. Ich habe mal ein Bild angefügt wie ich das ganze eingebunden habe.
Die Funktionsweise von clock ist mir auch nicht ganz klar.
Mein Problem ist ebenfalls, dass ich nicht weiß wie ich mit den Ausgängen out1, out2 usw umegehen soll.
Die Eingänge kann ich ja unter configurate Parameters/Data import Export einstellen. Wie ich jedoch mehrere Ausgänge bekomme weiß ich auch nicht . Ich bekomme immer alle Ausgänge als Vektor in yout. Ich hätte die Ausgänge aber lieber einzeln, so wie die Eingäne ebenfalls.
Beschreibung: |
|
Download |
Dateiname: |
12.PNG |
Dateigröße: |
10.89 KB |
Heruntergeladen: |
723 mal |
|
|
|
knilumis_baltaM |
Forum-Century
|
|
Beiträge: 241
|
|
|
|
Anmeldedatum: 20.04.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.12.2013, 13:29
Titel:
|
|
In der zweiten Zeile habe ich das %#codegen vergessen zu löschen. Hier etwas leicht geändert.
Ich hab mal eine Simulation gemacht. Berechnet die Zeit zwischen den zwei Pulsen (hier die Breite des Rechtecks). Zeitdifferenz ist hier konstant, da ein Periodisches Signal.
Beschreibung: |
|
Download |
Dateiname: |
test.slx |
Dateigröße: |
14.74 KB |
Heruntergeladen: |
513 mal |
Beschreibung: |
|
Download |
Dateiname: |
test2.png |
Dateigröße: |
56.42 KB |
Heruntergeladen: |
773 mal |
Beschreibung: |
|
Download |
Dateiname: |
test1.png |
Dateigröße: |
10.14 KB |
Heruntergeladen: |
726 mal |
|
|
|
PHEV |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 67
|
|
|
|
Anmeldedatum: 10.12.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.12.2013, 13:40
Titel:
|
|
danke aber ich habe noch diesesn Fehlercode:
C:\Users\..........\sfun\src>"c:\program files\matlab\r2007b\sys\lcc\bin\lccmake" -f test_sfun.lmk
Das System kann den angegebenen Pfad nicht finden.
Und nach etwas recherche kommt raus das mir irgendein compiler fehlt.
Den kann ich wohl hier
http://www.microsoft.com/en-us/download/confirmation.aspx?id=8279
runterladen. Das geht jedoch nicht da ich an einem Rechner arbeite auf der Arbeit ( ich schreib hier meine Abschlussarbeit) und da habe ich zwar die berechtigung was zu installieren und runterzulade, aber der webinstaller darf scheinbar nicht ausgeführt werden.
Was mach ich denn jetzt?
Ich hab win7 und 64bit
|
|
|
PHEV |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 67
|
|
|
|
Anmeldedatum: 10.12.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.12.2013, 15:35
Titel:
|
|
nachdem ich die 32bit Matlab version installiert habe geht es!
Danke für die Super Hilfe!
|
|
|
PHEV |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 67
|
|
|
|
Anmeldedatum: 10.12.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 13.12.2013, 11:00
Titel:
|
|
|
|
|
Hallo ich muss nochmal fragen:
Wenn ich den Ausgang Zeitdiff in den Workspace lade, gibt er mir einen Vektor aus der immer 0 ist, bis die Steigende Flanke kommt, dann ist er 0,25.
Die Flanke selbst ist ja auch nur ein Vektor der von 0 auf 1 geht.
Ich habe keine Ahnung wie ich daraus die Zeit ermitten soll, die vergeht, bis die Flanke steigt.
Im Scope sieht man dass die Flanke bei z.B. 55 sek steigt. Diesen wert, also 55sec möchte ich auslesen.
Und weiterhin dann zwei flanken einlesen und die Differenz dazwischen messen.
Die Funktion macht aus meiner eingehenden Flanke eine neue...
Ich brauche denke ich eher sowas wie:
Wenn flanke1 =1
speichere aktuelle Zeit in Variable t1;
Wenn flanke2=1
speichere aktuelle Zeit in Variable t2;
Zeitdiff= t2-t1
Ich weiß aber nicht wie ich die Zeit speichere zu genau dem Zeitpunkt wenn die Flanke 1 wird.
So wird die Zeit ja dauerhaft gespeichert.
Leider weiß ich nicht was der Befehl circshift genau macht. Ich habe mir dazu die beschreibung durchgelesen, aber nicht verstanden, was dazu in meinem Beispiel gebraucht wird.
Warum time in einem array gespeichert werden muss und wie dieses genau funktioniert weiß ich auch nicht.
Über eine erklärung wäre ich sehr dankbar!
|
|
|
knilumis_baltaM |
Forum-Century
|
|
Beiträge: 241
|
|
|
|
Anmeldedatum: 20.04.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 13.12.2013, 12:33
Titel:
|
|
|
|
|
Kannst du mal deine Flankensignale als *.mat exportieren und hochladen? (to workspace block).
Zitat: |
Ich habe keine Ahnung wie ich daraus die Zeit ermitteln soll, die vergeht, bis die Flanke steigt. |
Redest du hier jetzt von einer Anstiegszeit? Bei Flanke denke ich an etwas, das von 0 auf 1 wechselt (sofort).
Zitat: |
Im Scope sieht man dass die Flanke bei z.B. 55 sek steigt. Diesen wert, also 55sec möchte ich auslesen. |
Das machst du mit:
Mein Beispiel bezog sich darauf, dass du gefragt hast wie man die Zeit speichern könnte und nicht auf dein Problem mit zwei verschiedenen Flankensignalen.
In deinem Codebeispiel machst du es ja eigentlich richtig. Du speicherst die Zeit, wenn Flanke 1 ist. Die Differenz wird zu jedem Zeitschritt berechnet, d.h. es die Berechnung ist einmal richtig (nach dem 2. Flanke detektiert wurde) aber danach ist die Ausgabe nur Wiederholung. Du kannst das jetzt so machen, dass du entweder für Wiederholungen eine -1 ausgibst oder du benutzt Enbaled Subsystem. Dieses Subsystem kannst du z.B. einmal ausführen um etwas zu berechnen und danach deaktiviert lassen.
Die Funktion circshift "dreht" einen Vektor/Matrix um eine bestimmte Anzahl von Komponenten. In meinem Beispiel (Vektor mit 2 Komponenten) habe ich alle Werte im Vektor um 1 nach unten geschoben, der letzte Wert ist dann auf den ersten Platz gewandert. Danach habe ich den ersten Wert überschrieben, d.h. der aktuellste Wert war in meinem Vektor ganz oben.
Array habe ich genommen weil mehr als eine Zeit brauchst. Du kannst natürlich auch so machen:
Ein Vektor zu nehmen ist viel kürzer, vor allem wenn du mehr Zeiten speichern willst.
|
|
|
PHEV |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 67
|
|
|
|
Anmeldedatum: 10.12.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 13.12.2013, 13:08
Titel:
|
|
|
|
|
Also ich möchte die Zeit von einem Wechsel von 0 auf 1 seit einem ereignis. Einmal start der diagnose einmal eine andere Flanke. Nicht wie lange der Flankenwechsel dauert
Zitat: |
if flanke == 1
time = zeit;
End
|
damit geht es auch nicht.
Ich möchte ja dass zu dem Zeitpunkt wenn die Flanke auf 1 geht der wert der Zeit ausgegeben wird. Nur dann sonst nicht.
Ich bekomme immer nur genau das selbe raus, wie dass was eingeht.
Mit meinem Code bekomme ich wie du gesagt hast, die werte kontinuierlich berechnet. Ich möchte sie aber nur zu dem zeitpunkt.
Ich weiß nicht wie ich das bei einem enabeld subsystem mache, oder wie ich die berechnungschritte auf eins stelle. Letzteres kann mir denke ich aber dann in die suppe spucken, wenn mehrere Flanken wechsel kommen.
Ich weiß auch nicht wo ich das nachlesen kann.
Arrays und circshift habe ich jetzt denke ich verstanden.
Ich hätte desweiteren auch gerne die möglichkeit die zeit aufzusummieren in der eine Flanke True (1) ist. Dann könnte ich quasie so lange eine Flanke auf true ist die zeit aufaddieren.
(Ich arbeite mit diagnosen, welche durch einschaltbedingungen immer an und aus gehen. Ich möchte die Diagnose verkürzen und benötige daher unter anderem die Zeit, die sie wenn die EB erfüllt sind benötigt um fertig zu werden)
Vielen dank auch für die ausführlichen erklärungen das hilft mir echt sehr die art und weise wie man programmiert zu verstehen. Ich habe da leider noch gar keine ahnung von wie man sieht.
Ich habe mal drei Datein angehängt. Zwei Flanken und die Zeit t
Beschreibung: |
|
Download |
Dateiname: |
dreiDateein.zip |
Dateigröße: |
2.28 KB |
Heruntergeladen: |
330 mal |
|
|
|
PHEV |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 67
|
|
|
|
Anmeldedatum: 10.12.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 13.12.2013, 13:16
Titel:
|
|
Andere Frage:
Ich habe ja den Zeitvektor und den Flankenvektor.
Kann man nicht auch sowas machen wie:
if Flankenvektor(:,1)==1
BenötigteZeit=t(:, Flankenvektor(:,1)==1)
end
und in die klammer von t muss die anweisung dass er aus dem vektor genau den wert ausließt der in der Zeile steht die erste 1 in dem Flankenvekort steht.
Ich bekomme das einfach nicht hin
|
|
|
knilumis_baltaM |
Forum-Century
|
|
Beiträge: 241
|
|
|
|
Anmeldedatum: 20.04.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 13.12.2013, 14:24
Titel:
|
|
Die Vektoren kannst du so auswerten, wenn die Simulation vorbei ist. Während der Simulation hast keinen Vektor, sondern zu jedem Zeitschritt ein Wert pro Signal.
Ein Signal geht bei dir bei ~29 s auf 1 und das andere ~57 s auf 1. Was soll eigentlich vor 57 s ausgegeben werden? Was soll ab 57.1 s ausgegeben werden? Nach deiner Beschreibung müsste deine Auswertung immer aus sein und geht zum Zeitpunkt 57 s einmal ein zu Berechnung und danach nie wieder. Sind bei dir die andere Modell auch getriggert. Im Simulink Library Browser findest du bei Ports & Subsystems das Enabled Subsystem. Kannst das mal Testen.
|
|
|
PHEV |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 67
|
|
|
|
Anmeldedatum: 10.12.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 13.12.2013, 15:41
Titel:
|
|
Das enabled subsystem kenne ich aber ich weiß nicht was ich damit machen muss.
Zu meiner Auswertung:
Wie ich das mache weiß ich nicht daher frage ich hier.
Ich möchte einfach überprüfen wie lange es Dauert bis eine Flanke steigt.
Steigt die Flanke soll zu diesesm Zeitpunkt die Zeit ausgegeben werden oder so ähnlich.
Ich finde das eigentlich sehr einfach zu verstehen nur weiß ich nicht wie ich es umsetzten soll.
In dem Bild z.B. :
ich möchte t1-5 wissen.
Diese dann auswerten. Das sollte doch möglich sein oder nicht???
Beschreibung: |
|
Download |
Dateiname: |
abc.png |
Dateigröße: |
8.15 KB |
Heruntergeladen: |
587 mal |
|
|
|
PHEV |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 67
|
|
|
|
Anmeldedatum: 10.12.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 16.12.2013, 09:25
Titel:
|
|
Hallo,
oben steht dass das Thema beantwortet sei, das Problem besteht aber immernoch.
Ich wäre für eine Hilfe sehr dankbar
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|