|
|
Wie erstelle ich einen Vektor in Simulink? |
|
Tokker |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.06.2009, 08:40
Titel: Wie erstelle ich einen Vektor in Simulink?
|
|
Hallo zusammen,
ich habe folgendes Problem, dass ich in meinem Modell einen Zeitblock verwende und alle 100 s einen Wert abgreifen und diesen einem Vektor hinzufügen möchte. Soll heißen, ich möchte den Wert c haben und ihn dann dem Vektor i zufügen wobei der neue Vektor dann die Form i=[i,u].
Wie realisiere ich dies in Simulink?
Meine Idee war:
Zuerst: MathFunction mod für Zeit t und 100, liefert den Wert d
Input: Wert d und Wert c und Anfangsvektor m
Output: i und m, wobei m über einen Memory-Block zum Input übergeben wird.
if-Abfrage:
"i=m;
if(d==0)
i=[i,c]
end
"
Funktioniert aber nicht. Habt Ihr da einen Lösungsvorschlag?
Danke.
Tokker
|
|
|
|
|
Hans-Wert |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.06.2009, 15:38
Titel:
|
|
Das ist in Simulink nicht möglich, nur in Matlab.
Simulink erlaubt keine dynamischen Signal Dimensionen.
So etwas wie i=[i,c] geht nicht. Wenn du Elemente zu einem Vektor hinzufügst mußt du ein neues Signal erzeugen.
Hier am Beispiel eines Mux-Blockes dessen Ausgang über einen Unit Delay Block auf den Eingang zurückgekoppelt wird. Am zweiten Eingang des Mux-Blockes liegt eine Konstante an.
Unable to determine signal dimensions. There is a loop consisting of 'untitled/Unit Delay' that cannot be resolved because signal dimensions are defined by a cyclic relationship. Specifying the signal dimensions on Inport, Mux, Selector, Demuxes will help resolve signal dimensions in the loop. You can also use the Signal Specifications to define the signal dimensions.
Ich kenne das Problem. kenne aber keine Lösung.
|
|
|
Idefix_1024 |
Forum-Century
|
|
Beiträge: 230
|
|
|
|
Anmeldedatum: 16.10.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.06.2009, 17:47
Titel:
|
|
wie wäre es mit einer Lösung anhand einer s-Function?
man sollte aber auch hier zu Beginn die Größe des abschließend vorliegenden Vektors kennen...
oder man realisiert einen Ringspeicher der nach einer Anzahl von x-Werten beginnt den ersten Wert zu überschreiben.
mit dem Work-Vektor sollte das schon funktionieren.
zunächst muss man den WorkVektor einrichten
ssSetNumRWork(S, 2); /* Anzahl der Vektorelemente ist 2; der Vektor hat Elemente vom Typ REAL */
dann kann mit
ssGetRWorkValue(S,0) = 5;
das 1. Element des Vektors mit dem Wert 5 überschrieben werden
mit
ssGetRWorkValue(S,1) = 6;
wird das zweite Element mit dem Wert 6 überschrieben
initialisiert sind alle Elemente des Vektors mit Null
ssGetRWorkValue(S,2) = 7; // Ist auf Grund der Initialisierung mit nur zwei Elementen 0 und 1 nicht erlaubt! Bzw. es wird ein nicht definierter Speicherbereich beschrieben... das hat sehr seltsame Fehler zur Folge... oft auch erst Wochen später ;-)
Grüße
|
|
|
Volker81k |
Forum-Anfänger
|
|
Beiträge: 26
|
|
|
|
Anmeldedatum: 12.05.09
|
|
|
|
Wohnort: Zürich
|
|
|
|
Version: R2006a
|
|
|
|
|
|
Verfasst am: 29.06.2009, 08:42
Titel:
|
|
Hallo Tokker,
wie wäre es mit einem getriggertem Subsystem? Ein Pulsgenerator gibt dir alle 100s ein Signal, womit das Subsystem aufgerufen wird.
Da drin befindet sich ein ToWorkspace-Block, der dein Signal m speichert. Wenn ich das richtig verstanden habe, willst du das Signal m in Abhängigkeit von c speichern, wenn das so ist schalte noch eine MUX davor (s. Bild). Der ToWorkspace-Block sollte auf Array umgestellt werden.
Grüsse
Volker
Beschreibung: |
|
Download |
Dateiname: |
Vektor in Simulink.jpg |
Dateigröße: |
15.6 KB |
Heruntergeladen: |
2636 mal |
|
|
|
Tokker |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.07.2009, 19:50
Titel: Danke
|
|
Hallo zusammen,
danke für die Ideen. Gelöst habe ich mein Problem, dass ich die benötigte Variable alle n-Sekunden auslese und als Vektor im Workspace speichere. Danach rufe ich als Stop-Fcn mein generiertes M-File auf, das dann die noch ausstehenden Berechnungsschritte durchführt.
Bin mir nicht sicher ob es auch einfacher ging, aber es funktioniert so auf jeden Fall auch.
Tokker
|
|
|
|
|
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 - 2025
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.
|
|