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

Simulink Paramter nach Matlab exportieren und dort ausgeben

 

Dissmaster
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 15.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2009, 10:09     Titel: Simulink Paramter nach Matlab exportieren und dort ausgeben
  Antworten mit Zitat      
Hallo,

ich habe folgendes Problem, ich habe eine Simulink Datei die ich gerne über ein m-File starten würde. Dies kann man ja mit dem Befehl sim('.....') machen.
Die Daten werde im Workspace gespeichert, es sind einmal die Werte (simout) und die passende Zeit (tout) dazu.
Aus diesen Daten würde ich mir gerne nur diese Daten anzeigen lassen, die z.B. größer als 1 sind. Das mache ich ja mit find (simout>1).
Dieser Befehl gibt mir aber nur die Indizes aus.
Mit den Indizes Werten von simout, würde ich mir gerne die Werte von tout Anzeigen lassen, wenn das geht am besten in einer Schleife.


LG
Private Nachricht senden Benutzer-Profile anzeigen


Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 05.06.2009, 10:43     Titel:
  Antworten mit Zitat      
Hallo Dissmaster,

mein Vorschlag ("leider" ohne Schleife):

Code:
tout(simout>1)


Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Dissmaster
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 15.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2009, 10:49     Titel:
  Antworten mit Zitat      
Hallo,

mein m-File begint so:


sim ('Projekt')
find (simout>1)


Dann gibt er mir alle Indizes auf der Konsole aus. Diese würde ich aber gerne in einer Schleife so verwenden, dass mir die dazu passenden Werte der Variablen tout angezeigt werden.

LG
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 05.06.2009, 11:06     Titel:
  Antworten mit Zitat      
Hallo Dissmaster,

bitte beschreibe "dazu" genauer. Hast Du den Code mal ausprobiert? Sollen die Werte nebeneinander stehen?

Code:
sim('Projekt')
[find(simout>1),tout(simout>1)]


Wozu soll die Schleife dienen?

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Dissmaster
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 15.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2009, 11:13     Titel:
  Antworten mit Zitat      
Hallo,

super, so funktioniert es. Hätte ich ja auch selbst drauf kommen können.
K´Jetzt zeigt er mir die Werte von tout an, genau das was ich brauche.
Jetzt hätte ich noch eine Frage, wie kann ich jetzt mit den Werten rechnen?
Er gibt mir jetzt zum Beispiel 20 Werte auf der Konsole aus. Diese Werte sind wenn sie gezeichnet werden eine Rechteck Signal.
Ich würde aber jetzt gerne die Breite der oberen Welle und die der unteren Welle berechnen.
Ich habe mal gelesen, das es da die Funktion find max oder find first.
Kann ich die irgendwie zusammenpacken?
So was wie find first max tout ???

LG
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 05.06.2009, 11:38     Titel:
  Antworten mit Zitat      
Hallo Dissmaster,

bitte gib dafür mal Beispieldaten an. Also Daten für tout und simout, und welche davon Du herausfinden möchtest. Die "Breite der Welle" ist für mich noch etwas unspezifisch.

Prinzipiell kann man die Werte so am besten weiterverarbeiten:
Code:
sim('Projekt')
find_index = find(simout>1);
tout_index = tout(simout>1);
[find_index,tout_index]
...


Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Dissmaster
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 15.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2009, 12:12     Titel:
  Antworten mit Zitat      
Hallo Bijick,
da es sich um eine Rechteckfunktion handelt, springt der simout Wert z.B. von -0,5 auf +1, dort bleibt der Wert dann für ca. 0.75 sec und springt dann von +1 auf -0.5.
Auf diesem Wert bleibt er dann für ca. 0.5 sec und dann geht es wieder von vorne los.
Aber die Zeit vom ersten Sprung auf den zweiten Sprung (z.B. 0,75 sec)würde ich gerne berechnen, dafür brauche ich halt die Werte.

LG
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 05.06.2009, 12:45     Titel:
  Antworten mit Zitat      
Hallo Dissmaster,

hm, gar nicht so einfach. Ich bin nicht ganz sicher, wie oft simout den Wert 1 haben muss, damit Du auf 0.75 sec kommst. Hier ein Beispiel. s ist von t = 0.5 bis t = 1.25 auf 1.

Code:
t = 0:0.25:2.25;
s = [-0.5 -0.5 1 1 1 1 -0.5 -0.5 -0.5 1];

a = sign(diff(s));             % alle Sprungstellen
ind1 = find(a==1,1,'first')+1;   % erster Sprung nach oben
ind2 = find(a==-1,1,'first');  % erster Sprung nach unten

Breite = t(ind2)-t(ind1)


Passt es so?

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Dissmaster
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 15.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2009, 13:01     Titel:
  Antworten mit Zitat      
Hallo Bijick,

vielen Dank für deine schnelle Antwort.
Was ich aber nicht so ganz verstehe sind die ersten beiden Zeilen.
In denen gebe ich doch einen Bereich vor, oder?
Den Bereich will ich ja durch das tout bestimmen und s sind ja auch die Werte von simout.
Ich will das so haben wie eben, das ich über die Indizes von simout an die Werte von tout rankomme. Dabei hast du mir ja schon super geholfen
Von den tout Werten hätte ich jetzt gerne den ersten max wert und den Wert an dem er wieder ins negative springt. Und dann von den beiden Werten die Differenz.
Zur Vereinfachung kann ich ja in Simulink die Zeit von bis angeben.
Also wenn ich die Zeit von 10 - 15 angebe und mein System in dem Zeitraum einmal ins positive springt und einmal ins negative, dann sollte es doch einfacher sein die gesuchten Werte zu finden, oder?
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 05.06.2009, 13:38     Titel:
  Antworten mit Zitat      
Hallo Dissmaster,

die ersten beiden Zeilen brauchte ich, um ein lauffähiges Beispiel erstellen und testen zu können. Du brauchst sie nicht. Wie Du richtig vermutest, kannst Du t durch tout und s durch simout ersetzen.

Du hast recht: Wenn es jeweils nur einen Sprung gibt, ist es einfacher:

Code:
ind2 = find(tout>10 && tout<15); % Sicher, dass es nur je einen Sprung gibt? Oder sind Indzes 10 und 15 gemeint.

ind3 = find(simout(ind2)==max(simout(ind2)),1,'first'); % erster Wert oben
ind4 = find(simout(ind2)==max(simout(ind2)),1,'last'); % letzter Wert oben

Startzeit = tout(ind3)
Endzeit = tout(ind4+1) % 1 nach dem letzten Wert oben ist er wieder negativ
% oder: Endzeit = tout(ind4)
Breite = Endzeit-Startzeit


Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Dissmaster
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 15.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2009, 13:49     Titel:
  Antworten mit Zitat      
Hallo,

mit 10 und 15 sind die Werte auf der Zeitachse gemeint und nicht die Indizes.
Ich werde es mal so versuchen, und mich dann bei dir melden.

Vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen
 
Dissmaster
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 15.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.06.2009, 21:55     Titel:
  Antworten mit Zitat      
Hallo,

das funktioniert nicht so ganz.
Ich habe jetzt mal den m-File und die Schaltung drangehängt, ist vielleicht etwas einfacher.

Damit es genauer wird, habe ich beim Scope den Wert auf 20000 gesetzt, jetzt wirft er mir so viele Werte raus, ist echt der Hammer.
Aber ich brauche es halt genau.
Ich habe den Simulationsbereich schon eingegrenzt, aber irgendwie klappt es nicht.

Studienarbeit.mdl
 Beschreibung:

Download
 Dateiname:  Studienarbeit.mdl
 Dateigröße:  21.74 KB
 Heruntergeladen:  544 mal
Au Berechnung.m
 Beschreibung:

Download
 Dateiname:  Au Berechnung.m
 Dateigröße:  131 Bytes
 Heruntergeladen:  515 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 07.06.2009, 14:32     Titel:
  Antworten mit Zitat      
Hallo Dissmaster,

was heißt "das funktioniert nicht so ganz"? Bitte erkläre, was passieren soll und was stattdessen passiert. Wenn es sich um ein neues Problem handelt (Au-Berechnung kam doch bisher noch nicht vor, oder), eröffne bitte ein neues Thema und beschreibe das neue Problem genau. Wenn man zum Nachvollziehen Simulink braucht, dann bitte in der entsprechenden Kategorie.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Dissmaster
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 15.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.06.2009, 14:41     Titel:
  Antworten mit Zitat      
Hallo,

das mit dem Au berechnen, das ist die Berechnung, die ich die ganze Zeit schon durchführen will.
Sprich den ersten Sprungwert - den letzten Sprungwert, dieser Wert heißt bei mir Au.
Die Simulink Datei habe ich nur angehängt, damit man sieht wo ich die Daten in den Workspace schreibe.
Ich hbae jetzt mal Simulink geschaut, ich kann die Daten die ich am Ende brauche komplett in ein Array schreiben lassen (in den Workspace).
Also ich kan mein Eingangssignal und mein Ausgangssignal incl. der Zeit in ein Array schreiben lassen.
Aber dann wies ich nicht, wie ich auf den Workspace zugreife, da ich ja dann drei Werte in dem Workspace stehen habe incl. noch der Indizes. Gibt es die Möglichkeit einzelne Spalten anzugeben?

LG
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.