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

Wie erstelle ich einen Vektor in Simulink?

 

Tokker

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2009, 09:40     Titel: Wie erstelle ich einen Vektor in Simulink?
  Antworten mit Zitat      
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: ---
     Beitrag Verfasst am: 26.06.2009, 16:38     Titel:
  Antworten mit Zitat      
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

Forum-Century


Beiträge: 230
Anmeldedatum: 16.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2009, 18:47     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Volker81k
Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 12.05.09
Wohnort: Zürich
Version: R2006a
     Beitrag Verfasst am: 29.06.2009, 09:42     Titel:
  Antworten mit Zitat      
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

Vektor in Simulink.jpg
 Beschreibung:

Download
 Dateiname:  Vektor in Simulink.jpg
 Dateigröße:  15.6 KB
 Heruntergeladen:  2578 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Tokker

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.07.2009, 20:50     Titel: Danke
  Antworten mit Zitat      
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
 
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.