|
|
Zwei Modelle mit switch ein-/ausschalten? |
|
JaWi |
Forum-Fortgeschrittener
|
|
Beiträge: 56
|
|
|
|
Anmeldedatum: 10.08.13
|
|
|
|
Wohnort: Deutschland
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 28.12.2013, 14:56
Titel: Zwei Modelle mit switch ein-/ausschalten?
|
|
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!
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 28.12.2013, 15:04
Titel:
|
|
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
|
|
|
JaWi |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 56
|
|
|
|
Anmeldedatum: 10.08.13
|
|
|
|
Wohnort: Deutschland
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 28.12.2013, 16:21
Titel:
|
|
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"?
|
|
|
JaWi |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 56
|
|
|
|
Anmeldedatum: 10.08.13
|
|
|
|
Wohnort: Deutschland
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 28.12.2013, 16:30
Titel:
|
|
Ah, ich sehe gerade, dass es zu den Referenzen Infos auf der Mathworksseite gibt. Dann gucke ich da erst einmal, danke!
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 28.12.2013, 17:01
Titel:
|
|
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
|
|
|
JaWi |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 56
|
|
|
|
Anmeldedatum: 10.08.13
|
|
|
|
Wohnort: Deutschland
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 06.01.2014, 17:56
Titel:
|
|
|
|
|
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!
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 06.01.2014, 19:10
Titel:
|
|
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
|
|
|
JaWi |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 56
|
|
|
|
Anmeldedatum: 10.08.13
|
|
|
|
Wohnort: Deutschland
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.01.2014, 13:31
Titel:
|
|
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!
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 07.01.2014, 14:27
Titel:
|
|
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
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 07.01.2014, 16:58
Titel:
|
|
Hallo,
ich habe gerade noch ein Beispiel zusammengeklickt, siehe Anhang.
Grüße,
Harald
Beschreibung: |
|
Download |
Dateiname: |
switch_between_subsystems.mdl |
Dateigröße: |
34.63 KB |
Heruntergeladen: |
421 mal |
|
|
|
JaWi |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 56
|
|
|
|
Anmeldedatum: 10.08.13
|
|
|
|
Wohnort: Deutschland
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.01.2014, 09:57
Titel:
|
|
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!
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 08.01.2014, 10:13
Titel:
|
|
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
Beschreibung: |
|
Download |
Dateiname: |
switch_between_subsystems.mdl |
Dateigröße: |
46.55 KB |
Heruntergeladen: |
434 mal |
|
|
|
JaWi |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 56
|
|
|
|
Anmeldedatum: 10.08.13
|
|
|
|
Wohnort: Deutschland
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.01.2014, 10:39
Titel:
|
|
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.
Beschreibung: |
|
Download |
Dateiname: |
switch_between_subsystems_3_models.slx |
Dateigröße: |
15.61 KB |
Heruntergeladen: |
362 mal |
Beschreibung: |
|
Download |
Dateiname: |
Mdl_From_Workspace1.slx |
Dateigröße: |
12.07 KB |
Heruntergeladen: |
366 mal |
Beschreibung: |
|
Download |
Dateiname: |
Mdl_CAN_bus1.slx |
Dateigröße: |
12.14 KB |
Heruntergeladen: |
365 mal |
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 08.01.2014, 17:47
Titel:
|
|
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
|
|
|
JaWi |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 56
|
|
|
|
Anmeldedatum: 10.08.13
|
|
|
|
Wohnort: Deutschland
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 09.01.2014, 11:28
Titel:
|
|
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.
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
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 - 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.
|
|