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

Simulationsabbruch über STOP-Block mit Textausgabe o.ä?

 

tifriedb
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 04.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.06.2013, 11:05     Titel: Simulationsabbruch über STOP-Block mit Textausgabe o.ä?
  Antworten mit Zitat      
Ich möchte meine Simulation in Simulink abbrechen, falls ein Signal einen bestimmten Wert annimmt. Das klappt soweit auch ganz gut über den STOP-Block.

Allerdings bricht er ohne Meldung einfach ab. Da das Model auch von Fremdpersonen bedient werden soll ist es zweckmäßig, wenn er mir dann einen Befehl ausgibt, dass er abgebrochen hat bzw. warum.
Über den STOP-Block gibt es diese Möglichkeit ja nicht.
Hab es mit if und msgbox bzw display etc. in einer embedded matlab fct probiert..diese Befehle kann er dort aber nicht verarbeiten.
Als weiterer Versuch habe ich probiert die sim über ein m-file zu starten und hier über if bei dem erreichten wert abzubrechen. Da is aber das Problem, dass er die werte ja nicht vor Simulationsende liest.

Gibt es irgendeine weitere Möglichkeit? Also sprich signal a nimmt den wert x an => Simulation wird abgebrochen mit einer Ausgabe an User: Simulationsabbruch - Funktion instabil o.ä.
Schön wäre das wenn er mir dabei auch die Stelle sprich den Zeitpunkt mit asugeben könnte.
Private Nachricht senden Benutzer-Profile anzeigen


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 20.06.2013, 12:19     Titel:
  Antworten mit Zitat      
Man kann dem Stop Block einen Callback geben. Bsp:

    Rechte Maustaste -> Properties
    Callback
    In StopFcn z.B. disp('123') eintragen


Das lässt sich gewiss noch verfeinern, so dass die gewünschten Informationen ins Command Window geschrieben werden oder ein UI aufpoppt.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
tifriedb
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 04.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.06.2013, 12:49     Titel:
  Antworten mit Zitat      
Zu simpel um drauf zu kommen Very Happy Danke
Hab es jetz mit msgbox gemacht, damit es auch sichtbar hochpoppt.
Krieg ich ihn jetzt dazu über einen Befehl [time(stop)] oder ähnlich die aktuelle bzw. letzte Simulationszeit mit auszugeben?

Edit: Ok hab jetzt ein Problem entdeckt. Diese Ausgabe soll ja nur aufkommen falls ein Grenzwert erreicht wird. Dieser wird aber je nach Parameter nicht immer erreicht. Mit dem Callback ist es jetzt aber so, dass wenn er regulär durchläuft bist time(end) gibt er auch die Fehlermeldung, was an der Stelle aber falsch wäre

Zuletzt bearbeitet von tifriedb am 20.06.2013, 13:04, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 20.06.2013, 12:56     Titel:
  Antworten mit Zitat      
Die Simulationszeit kann ja mit verschiedene Methoden rausgeschrieben werden. Ich würde es einfach so machen:

    Simulink Modell, Menü "Simulation" "Model Configuration Parameters"
    Data Im/Export
    Save to Workspace, Time anwählen
    dann wird nach Beendigung (welcher Art auch immer) tout geschrieben
    Die Simulationszeit ist dann tout(end)


Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
tifriedb
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 04.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.06.2013, 13:21     Titel:
  Antworten mit Zitat      
An sich funktioniert das, aber er schreibt es mir nur ins command window. Ich kann ihn nicht davon überzeugen es mit in die msgbox zu nehmen. Da will er nur strings.

Außerdem hab ich noch das oben in meinem edit beschriebene Problem:
"Ok hab jetzt ein Problem entdeckt. Diese Ausgabe soll ja nur aufkommen falls ein Grenzwert erreicht wird. Dieser wird aber je nach Parameter nicht immer erreicht. Mit dem Callback ist es jetzt aber so, dass wenn er regulär durchläuft bist time(end) gibt er auch die Fehlermeldung, was an der Stelle aber falsch wäre"
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 20.06.2013, 14:00     Titel:
  Antworten mit Zitat      
"Da will er nur Strings" - Also muss man dann einen String bilden in dieser Art?:

Code:

['string1', num2str(variable1), 'string2']
 


Für die andere Thematik schlage ich vor einmal die Bibliothek "Model Verification" anzuschauen.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
tifriedb
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 04.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.06.2013, 14:48     Titel:
  Antworten mit Zitat      
Also wenn ich sage msgbox('tout(end)') bekomme ich "Error evaluating 'StopFcn' callback of Stop block 'fdxc_revF/Stop Simulation'. Input must be a string."
Lasse ich die ' ' weg schreibt er einfach tout(end) aus.

Vielen Dank für die zweite Info aber so richtig werd ich aus der bib nicht schlau. Ich will ja nur das im ersten Post beschriebene...sprich falls wert x aufkommt Abbruch und Ausgabe von Text und Zeit, falls wert x nicht auftritt Durchlauf bis Ende und keinerlei Ausgabe von Text und Zeit
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 21.06.2013, 07:42     Titel:
  Antworten mit Zitat      
Code:


Very Happy

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
tifriedb
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 04.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.06.2013, 13:19     Titel:
  Antworten mit Zitat      
Ja das funktioniert soweit ganz gut nur krieg ich ihn nicht dazu dass mit dem Text zu verbinden. Ich habe jetzt:

msgbox('Achtung - Funktion instabil. Parameter anpassen', num2str(eval('tout(end)')))

Dann gibt er mir aber eine Box in der der Text steht und eine zweite Box in der die Zeit steht. Ich hätte das aber gern so, dass es in einer kommt. Sprich: Achtung - Funktion instabil. Parameter anpassen - Abbruchzeit: X s

Und es besteht weiterhin das Problem, dass er das bei jedem Stop ausgibt. Nicht nur bei der Stopbedingung des Stopblocks, sondern bei jedem.
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 21.06.2013, 13:35     Titel:
  Antworten mit Zitat      
So geht's - es muss ein String sein, anders waren es zwei Parameter:

Code:

msgbox(['Achtung - Funktion instabil. Parameter anpassen', num2str(eval('tout(end)'))])
 


Welche anderen Stops gibt es denn noch?

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
tifriedb
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 04.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.06.2013, 13:45     Titel:
  Antworten mit Zitat      
Den Stopblock find ich schon am einfachsten bzw. ich finde nichts besseres.
Wollte es jetzt getrennt machen. Der Stop-Block stoppt meine Simulation wenn seine Bedinging davor erfüllt ist. Ist das der Fall bekommt der Stop-Block einfach ein Signal "1" statt vorher "0".
Um das Problem des Callbacks zu lösen wollte ich ein if-Block einfügen, der sagt if u==1 load(beliebig.m) und diese m-file soll mir dann meine messagebox ausführen. Das wäre definitiv von hinten ins Auge, aber auch daran scheitere ich, weil die Embedded Matlab function weder load noch open kennt und ich sonst nicht weiß was mir sonst die m-file ausführt...
Private Nachricht senden Benutzer-Profile anzeigen
 
tifriedb
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 04.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2013, 08:05     Titel:
  Antworten mit Zitat      
Hat sonst niemand ne Idee?
Ich denke die Callback-Idee ist an sich doch die Einfachste und Zielführenste. Aber der "Stpfct" Callback ist einfach vllt der Falsche, da das jede Art Stop der Simulation einschließt. Ich bräuchte eine fct, die nur aktiv wird wenn der Stop-Block aktiv wird. D.h. der Block stoppt die Simulation ja sobald sein eingehender wert ungleich 0 ist. Dann wird er ja erst aktiv und soll dann seine msgbox ausgeben. Hab es schon über die InitFct und die LoadFct versucht...das bringt aber leider nix.

Edit:
So hab jetzt eine halbwegs elegante Lösung. Das Bild im Anhang zeigt es grob. Habe meine Grenzen im static gab so gewählt, dass "1" meine Abbruchsbedingung ist. In die Ausgabe dieses Blocks konnte ich meine mgsboxfunktion einfügen. Leider gibt er mir wenn ich stop simulation aktiviere dieses Simulink-Fehlerfenster mit aus. Da das User die Simulink nicht kennen verwirren könnte möchte ich das nicht. Hab das also deaktiviert und ein Stop-block wieder dran gehängt. Dieser stoppt jetzt meine Sim und der static gab block prüft nur meine Bedingung und gibt meine messagebox aus. Vllt etwas umständlich aber es funktioniert wie es soll.

loesung.PNG
 Beschreibung:

Download
 Dateiname:  loesung.PNG
 Dateigröße:  49.6 KB
 Heruntergeladen:  866 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.