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

Syntax Probleme Füllstand Modellieren

 

oluschka
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 17.02.16
Wohnort: Paderborn
Version: ---
     Beitrag Verfasst am: 19.02.2016, 13:04     Titel: Syntax Probleme Füllstand Modellieren
  Antworten mit Zitat      
Hallo

Habe ein Grundlegendes Problem in der Syntax.
Ziel ist es einen Modell zu bilden das den Füllstand in einem Behälter zwischen zwei Grenzen entweder füllt oder entleert.

Herangehensweise:

while
if Bedingung (Füllstand unterhalb Reserve)
Anweisung (Aggregat ON)
Anweisung (Speicher füllen)

if Bedingung (Füllstand = max)
Anweisung (Aggregat OFF)
Anweisung (Speicher leeren)
end
else
Anweisung (Aggregat OFF)
Anweisung (Speicher leeren)

if Bedingung (Füllstand = unterhalb Reserve)
Anweisung (Aggregat ON)
Anweisung (Speicher füllen)
end

end
end

Problem:
- Sobald z.B. die erste Bedingung erfüllt ist, wird der Speicher nur noch gefüllt ohne bei Maximalwert umzukehren und zu entleeren.
- Kann man so ein Verhalten des Speichers überhaupt in der oberen Form darstellen? Hätte vielleicht jemand einen Tipp?

Danke und liebe Grüße
_________________

Tu etwas gutes. Und etwas gutes kommt zu dir, grad wenn du es nicht vermutest.
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 22.02.2016, 15:23     Titel:
  Antworten mit Zitat      
wo ist der untschied zwischen
Bedingung (Füllstand unterhalb Reserve)
und
if Bedingung (Füllstand = unterhalb Reserve)
falls das das gleiche ist wird letzteres nie ture da es ja im else part vom ersten kommt
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
oluschka
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 17.02.16
Wohnort: Paderborn
Version: ---
     Beitrag Verfasst am: 23.02.2016, 12:14     Titel:
  Antworten mit Zitat      
Hallo

oh das war ein Schreibfehler, es soll beide mal das selbe aussagen. Ja ich wusste es nicht besser wie ich so eine Bedingung beschreiben sollte. Die zweite if Bedingung habe ich dazwischen geschoben um eine Umkehrung in der Be- bzw. Entladung zu bewirken. Denn ich gehe von einem Anfangszustand aus, prüfe den Wert in welchem Bereich er sich befindet und gebe dann die Bedingung Be- oder Entladen. Doch dieses Vorgang sollte nur so lange von statten gehen bis eine weitere Bedingung (Speicher voll oder leer) erfüllt ist.

Ich habe jetzt einen anderen Weg eingeschlagen um meine Aufgabenstellung zu lösen, für's Verständnis würde es mich trotzdem Interessieren wo mein Denkfehler lag bzw. wie man so einen Sachverhalt programtechnisch lösen könnte.

Grüße
_________________

Tu etwas gutes. Und etwas gutes kommt zu dir, grad wenn du es nicht vermutest.
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 23.02.2016, 12:54     Titel:
  Antworten mit Zitat      
Hallo,

ich bin mir nicht sicher ob ich die Zustände richtig verstanden habe. Wo ist der Unterschied zwischen leer und Füllstand < Reserve?

Aber evtl. hilf dir ja dieser Ansatz:

Code:

Fuellstand = 1;
Reserve = 0.1;
maxFuellstand = 1;
minFuellstand = 0;
stop = 0;
state = '';

while stop == 0

    % Anweisung bestimmen
    if (Fuellstand > minFuellstand) && (Fuellstand < maxFuellstand) && isempty(state)
%         Anweisung (Aggregat ON)
%         Anweisung (Speicher fuellen)
        state = 'fuellen';

    elseif (Fuellstand == maxFuellstand) && isempty(state)
%         Anweisung (Aggregat OFF)
%         Anweisung (Speicher leeren)
        state = 'leeren';
    end

   % Aktion
    switch state
        case 'fuellen'
            Fuellstand = round(Fuellstand + 0.1,1);
        case 'leeren'
            Fuellstand = round(Fuellstand - 0.1,1);
    end
   
    % prüfe Füllstand nach Änderung
    if (Fuellstand == minFuellstand) || (Fuellstand == maxFuellstand)
        % Ende
        stop = 1;        
    end
end
 


Hiermit wird aber nur ein Zustand abgearbeitet und dann die while Schliefe beendet. Komplett füllen und dann wieder entleeren müsste man noch einbauen.

Gruß DSP
Private Nachricht senden Benutzer-Profile anzeigen
 
oluschka
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 17.02.16
Wohnort: Paderborn
Version: ---
     Beitrag Verfasst am: 26.02.2016, 11:47     Titel:
  Antworten mit Zitat      
Hallo

die Bedingung Füllstand < Reserve soll das das Aggregat anlaufen lassen, obwohl der Füllstand noch nicht minimal ist. Aufgrund der spätern Darstellung habe ich bewusst nicht "min Fuellstand" genommen.

Besten Dank für die Hilfe das sieht schon sehr gut aus werde mal versuchen darauf aufzubauen und die Bedingung "nach dem max Fuellstand erreicht ist wieder entleeren" einzubauen.

Liebe Grüße
_________________

Tu etwas gutes. Und etwas gutes kommt zu dir, grad wenn du es nicht vermutest.
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 - 2025 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.