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

Zwei Modelle mit switch ein-/ausschalten?

 

JaWi
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 56
Anmeldedatum: 10.08.13
Wohnort: Deutschland
Version: ---
     Beitrag Verfasst am: 28.12.2013, 14:56     Titel: Zwei Modelle mit switch ein-/ausschalten?
  Antworten mit Zitat      
Hallo Simulinker,

ich habe eine MATLAB-GUI programmiert, die die Werte eines Simulink-Modells visualisiert. Das Modell ist je nach Anwendungsfall entweder ein Modell mit From Workspace-Blöcken oder ein komplett anderes Modell mit speziellen Blöcken für CAN-Nachrichten. Momentan wird je nach Anwendungsfall das eine oder andere Modell geöffnet und laufen lassen, das jeweils zweite Modell ist eine eigene Datei und dann gar nicht geöffnet.

Ich suche nach einer Möglichkeit beide Modelle (zB als Submodelle) in ein Gesamtmodell zu packen uns je nach Anwendungsfall (auszulesen über eine globale Variable) so etwas wie einen switch zu dem einen bzw anderen Submodell zu schließen. Gibt es da eine Möglichkeit?

Danke!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.12.2013, 15:04     Titel:
  Antworten mit Zitat      
Hallo,

ich würde es mit enabled subsystems versuchen. Für die einfachere Wartbarkeit würde ich in die Subsystems jeweils Modellreferenzen der beiden Modelle setzen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
JaWi
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 56
Anmeldedatum: 10.08.13
Wohnort: Deutschland
Version: ---
     Beitrag Verfasst am: 28.12.2013, 16:21     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für die Antwort. Ja stimmt, an diese einfach Möglichkweit hatte ich gar nicht gedacht. Welches System enabled wird kann ja die Variable steuern. Das werde ich gleich mal ausprobieren.

Was meinst du genau mit "in die Subsystems jeweils Modellreferenzen der beiden Modelle setzen"?
Private Nachricht senden Benutzer-Profile anzeigen
 
JaWi
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 56
Anmeldedatum: 10.08.13
Wohnort: Deutschland
Version: ---
     Beitrag Verfasst am: 28.12.2013, 16:30     Titel:
  Antworten mit Zitat      
Ah, ich sehe gerade, dass es zu den Referenzen Infos auf der Mathworksseite gibt. Dann gucke ich da erst einmal, danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.12.2013, 17:01     Titel:
  Antworten mit Zitat      
Hallo,

wenn du mit Subsystemen arbeitest, musst du die Blöcke eines Modells in das Subsystem kopieren. Wenn später an dem Modell Änderungen vorgenommen werden, musst du diese Änderungen im Subsystem händisch nachziehen. Das bleibt dir mit Modellreferenzen erspart.
Solltest du die Modelle nur in diesem speziellen Zusammenhang brauchen, bringt es natürlich keine Vorteile.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
JaWi
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 56
Anmeldedatum: 10.08.13
Wohnort: Deutschland
Version: ---
     Beitrag Verfasst am: 06.01.2014, 17:56     Titel:
  Antworten mit Zitat      
Guten Abend Harald,

die Referenzierung der Modell hat wunderbar geklappt. Nun stehe ich aber vor einem anderen Problem:
- Nutze ich deinen Vorschlag mit den enbabled Subsystems weiß ich nicht, wie ich die Subsysteme je nach Wert der From Workspace-Variablen (1 oder 0) ansteuern kann. Der Trigger "hört" ja auf raising und/oder falling, wenn ich das richtig verstehe und führt dann eine bestimmte Aktion aus oder nicht. Ich brauche ja ein entweder/oder.
- Nutze ich den if-else-Block mit action Blocks, dann muss ich allen Blöcken und Modellen dieselbe Sample time hinterlegt werden, was bezogen auf die Modell schon schwierig ist und es klappt auch nicht dem Model-Block die sample time 0.1 der Modelle zuzuordnen, obwohl das im Modell so eingestellt ist. Es ergibt sich folgende Fehlermeldung:

Sample time [0, 0] of 'Switch_Mdl_if/If Action Subsystem FW/Model FW' does not match the sample time 0.1 of the If block 'Switch_Mdl_if/If' controlling its execution.

Vielen Dank für evtl. Tipps!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.01.2014, 19:10     Titel:
  Antworten mit Zitat      
Hallo,

keinen triggered subsystems nehmen, sondern enabled subsystems. Das enable Signal des einen Subsystems ist das Steuersignal, das andere ist (1-Steuersignal). Damit sollte es gehen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
JaWi
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 56
Anmeldedatum: 10.08.13
Wohnort: Deutschland
Version: ---
     Beitrag Verfasst am: 07.01.2014, 13:31     Titel:
  Antworten mit Zitat      
Ich dachte das wäre dasselbe, nun klappt es fast! Bei mir laufen momentan stets beide Modelle im jeweiligen Subsysten, da ich leider nicht heraus finde, wie man einstellt, dass das eine Subsystem bei (1-Steuersignal) enabled ist. Welchen Parameter übersehe ich?
Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.01.2014, 14:27     Titel:
  Antworten mit Zitat      
Hallo,

du musst als zweites Steuersignal über Blöcke (1-erstes Steuersignal) errechnen lassen, bevor du das als Steuersignal des zweiten Blocks reinführst.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.01.2014, 16:58     Titel:
  Antworten mit Zitat      
Hallo,

ich habe gerade noch ein Beispiel zusammengeklickt, siehe Anhang.

Grüße,
Harald

switch_between_subsystems.mdl
 Beschreibung:

Download
 Dateiname:  switch_between_subsystems.mdl
 Dateigröße:  34.63 KB
 Heruntergeladen:  421 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
JaWi
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 56
Anmeldedatum: 10.08.13
Wohnort: Deutschland
Version: ---
     Beitrag Verfasst am: 08.01.2014, 09:57     Titel:
  Antworten mit Zitat      
Hallo noch mal,

erst einmal vielen Dank für das Beispiel! Dank des Beispiels verlaufen die Signale jetzt wie gewünscht, es ist immer eins 0 und eins 1. Das Problem: Beide Modelle in den enabled subsystems laufen jeweils bei 0 und 1, das heißt es werden stets beide Modelle gestartet.
In der Doku steht "If the input is a scalar, the subsystem executes if the input value is greater than zero.", deswegen verwundert mich das sehr!

Auch bei deinem Modell laufen ja stets beide Subsysteme, nur der Output variiert. Noch mal zur Verdeutlichung: je nach Steuersignal 0 oder eins darf in meinem Fall nur eines der Subsysteme ausgeführt werden. Das andere darf nicht ausgeführt werden, da dann für das jeweils andere Modell Informationen bzw. eine ganze Toolbox fehlt und Fehlermeldungen ausgegeben werden, so dass auch das andere Modell nicht läuft.

Danke für die Ausdauer!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.01.2014, 10:13     Titel:
  Antworten mit Zitat      
Hallo,

nein, es laufen nicht beide Subsysteme - zumindest bei mir unter R2013b nicht, und es würde mich sehr wundern, wenn das irgendwo anders wäre.

Zur Veranschaulichung habe ich das Modell so aktualisiert, dass man sieht, welcher Block zu welcher Simulationszeit ausgeführt wird.

Grüße,
Harald

switch_between_subsystems.mdl
 Beschreibung:

Download
 Dateiname:  switch_between_subsystems.mdl
 Dateigröße:  46.55 KB
 Heruntergeladen:  434 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
JaWi
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 56
Anmeldedatum: 10.08.13
Wohnort: Deutschland
Version: ---
     Beitrag Verfasst am: 08.01.2014, 10:39     Titel:
  Antworten mit Zitat      
Wird durch das dis-/enable evtl. nur der Output beeinflusst? Wenn ich in dein Beispiel Modellreferenzen einbaue laufen auch ständig beide Modelle, was an der Modellzeit zu sehen ist, die bei beiden Untermodellen mit dem Hauptmodell übereinstimmt.
Siehe Anhang, das ist dein Beispiel verändert.

switch_between_subsystems_3_models.slx
 Beschreibung:

Download
 Dateiname:  switch_between_subsystems_3_models.slx
 Dateigröße:  15.61 KB
 Heruntergeladen:  362 mal
Mdl_From_Workspace1.slx
 Beschreibung:

Download
 Dateiname:  Mdl_From_Workspace1.slx
 Dateigröße:  12.07 KB
 Heruntergeladen:  366 mal
Mdl_CAN_bus1.slx
 Beschreibung:

Download
 Dateiname:  Mdl_CAN_bus1.slx
 Dateigröße:  12.14 KB
 Heruntergeladen:  365 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.01.2014, 17:47     Titel:
  Antworten mit Zitat      
Hallo,

bist du dir sicher, dass die referenzierten Modelle auch tatsächlich dann ausgeführt werden, wenn sie an sich "ausgeschaltet" sind?

Du wirst während einer Simulation nicht zwischen den beiden Modellen hin- und herschalten, oder? Dann wäre ohnehin ein Configurable Subsystem die schönere Lösung. Da musst du dann nur noch herausfinden, wie du befehlsgesteuert zwischen den verschiedenen Varianten hin- und herschalten kannst - es sollte über set_param gehen, wenn man den Parameter BlockChoice anpasst.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
JaWi
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 56
Anmeldedatum: 10.08.13
Wohnort: Deutschland
Version: ---
     Beitrag Verfasst am: 09.01.2014, 11:28     Titel:
  Antworten mit Zitat      
Hallo Harald,

nein ich brauche nicht zwischen den Modellen zu wechseln, prinzipiell müsste die Lösung deswegen passen. Welches Submodell verwendet werden muss steht schon vor dem Öffnen des Modell-Switches fest.

Ja ich bin mir sicher, das in beiden Fällen (Steuersignal eins oder null) beide Modelle ausgeführt werden, da in meinem Fall dann ja jeweils das "falsche" Model eine Fehlermeldung hervorruft.
Und bei den Minimodellen, die ich auch in dein Beispiel eingebaut habe, sieht man ja auch im Display, dass sich die werte in beiden Modellen stets ändern.

Aber ich habe eine andere Idee: Kann es sein, dass mein enable-Block momentan einfach bei 1 und 0 das Subsystem enabled? Muss ich noch irgendwo einstellen, dass das Subsystem nur bei "1" ausgeführt wird? Denn wie gesagt: Bei beiden werten 0 UND 1 werden beide Subsysteme ausgeführt.
Allerdinga habe ich so eine Einstellung nicht gefunden und in der Doku steht ja eben auch Skalar positiv usw.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.