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

Simulationswert in Array speichern und sofort wiederverwende

 

david

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.09.2008, 10:39     Titel: Simulationswert in Array speichern und sofort wiederverwende
  Antworten mit Zitat      
Hallo allerseits.

Ich hätte eine dringende Frage zur Embedded MatLab Funktion und es wäre super wenn ihr mir weiterhelfen könntet:

Ich möchte während der Simulation meines Simulink Modells Werte,in meinem Fall Indizies, die in meiner Embedded Fkt bestimmt werden, in einem Array speichern und sie jedoch sofort wieder für den nächsten Simulationsschritt wiederverwenden(also fällt "to worklspace" raus).

In MatLab selbst wäre es:

array=[ ] %Initialisierung

array(end+1) = Wert des Index

Wie könnte man diesen Code in Simulink umsetzen?(Die Embedded MatLab Kkt kennt diese Befehle array(end+1) nicht)


urs

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.09.2008, 16:31     Titel:
  Antworten mit Zitat      
Ich glaube das man dieses Problem nicht mit dem embedded Matlab Function Block loesen kann... oder hat es inzwischen geklappt (wenn ja wie? Ich stehe auch gerade vor diesem Problem).
Die einzie Moeglichkeit ist wohl die Verwendung des S-Function Blocks. Leider verstehe ich nicht, was alles in dieses File rein muss.... Weiss da jemand weiter?
 
david

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.09.2008, 10:26     Titel: Re
  Antworten mit Zitat      
Ne,ich hab leider noch keine Lösung gefunden.Aber S-Funktions können ziemlich böse werden.Hab leider noch keine selbst geschrieben,hab mir aber mal in nem Buch des angeschaut und man muss alle möglichen Flags setze.
Außerdem muss das ganze noch im Realtime Workshop laufen...
Aber wenn du ne Lösung findest....

Mfg
 
Noxin99
Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 14.12.07
Wohnort: NRW
Version: ---
     Beitrag Verfasst am: 12.09.2008, 15:08     Titel:
  Antworten mit Zitat      
willst du immer nur einen wert bestimmen und diesen für den nächsten simulationsschritt verwenden???

das kannst du super mit der S-Funktion machen.
solange du eine fest definierte anzahl an ein und ausgängen hast ist das kein problem!
du könntest in der S-Funktion einen wert ausrechnen lassen, diesen auf den ausgang legen und mit einem verzögerungsglied wieder auf den eingang legen!

falls das ungefähr das ist was du wolltest, kann ich dir dabei gerne weiterhelfen
Private Nachricht senden Benutzer-Profile anzeigen
 
Bastian
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 17.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.06.2009, 16:05     Titel:
  Antworten mit Zitat      
das Thema ist zwar schon sehr alt, aber ich kann es ja mal wieder beleben.

Die lösung mit der externen Schleife für Daten, die man im nächsten Simulationsschritt wieder braucht, finde ich irgendwie unschön.

Gibt es wirklich keine Möglichkeit, innerhalb des S-Funktion Block eine Variable in den nächsten Simulationsschritt zu retten?

Habe etwas von "parsient" Variabeln gehört, aber finde nichst konkretes darüber.
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.06.2009, 00:15     Titel:
  Antworten mit Zitat      
Bastian hat Folgendes geschrieben:
Habe etwas von "parsient" Variabeln gehört, aber finde nichst konkretes darüber.


Probier es mal mit persistent - dann findest Du auch sicherlich konkreteres darüber.
Private Nachricht senden Benutzer-Profile anzeigen
 
Al

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2009, 15:44     Titel:
  Antworten mit Zitat      
s-function Discrete states Verwenden ( können eigentlich alles speichern)
Du musst aber genau auf die Updatereihenfolge achten zu der discrete states ausgelesen und gesetzt werden.
 
Manuel Soares
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 15.08.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.08.2009, 16:07     Titel:
  Antworten mit Zitat      
Also ich stehe nun vor einem ähnlichem Problem. Ich serielle Daten aus der Simulation in ein 2-D-Array einlesen, dann Zeilen und Spalten miteinander tauschen und auf die Sampletime bezogen(umsortiert) wieder ausgeben. Ich habe mich entschieden dieses mit einer S-function zu lösen. Um die Werte in den nächsten Simulationsschritt zu retten habe ich Dwork-Vectoren gefunden. Mit dessen Verwendung wird Speicher reserviert. Diese Variablen sind, vermute ich, ähnlich wie Globale Variablen im Verhalten. Da ich nun ein großes Array benötige, suche ich nach einem Weg diese auch dementsprechend zu initialisieren. meine erster Versuch war es ein Signal um zwei Schritte zu verzögern. Hierzu musste ich allerdings eine zweite Variable definieren.
Kennt da jemand eine andere Methode??

Meine initialisierung:
Code:
 %% Setup Dwork
  block.NumDworks = 2;
  block.Dwork(1).Name = 'x0';  
  block.Dwork(1).Dimensions      = 1;
  block.Dwork(1).DatatypeID      = 0;
  block.Dwork(1).Complexity      = 'Real';
  block.Dwork(1).UsedAsDiscState = true;
  block.Dwork(2).Name = 'x1';
  block.Dwork(2).Dimensions      = 1;
  block.Dwork(2).DatatypeID      = 0;
  block.Dwork(2).Complexity      = 'Real';
  block.Dwork(2).UsedAsDiscState = true;
%endfunction


Meine Verzögerung:
Code:
function Output(block)

  block.OutputPort(1).Data = block.Dwork(1).Data;
 
%endfunction

function Update(block)

  block.Dwork(1).Data = block.Dwork(2).Data;  
  block.Dwork(2).Data = block.InputPort(1).Data;
 


interleaver.m
 Beschreibung:
verwendeter code zur Verzögerung

Download
 Dateiname:  interleaver.m
 Dateigröße:  1.97 KB
 Heruntergeladen:  593 mal
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.