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

Hysterese einer Stellgröße programmieren

 

Eddy2k
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 15.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2013, 19:55     Titel: Hysterese einer Stellgröße programmieren
  Antworten mit Zitat      
Hallo Leute,

folgendes Problem:

Die Stellgröße eines Reglers ist begrenzt, sodass sich eine Hysterese ergibt. Folgendes passiert:

Die Stellgröße u kann von 0 bis 100 % variiert werden.

Im Prinzip werden bis u = 17 % tatsächlich die eingegeben Werte verwendet, ab u = 18 % erfolgt eine Schaltung auf 12 %. D.h. für u >=18 wird immer u = 12 % verwendet. Erst wenn wieder auf 12 abgesenkt wird, können auch wieder die Werte von 13 - 17 % genutzt werden. Ab u = 18 % erfolgt wiederrum eine Reduzierung auf 12 % usw.

Ich versuche jetzt schon die ganze Zeit dieses Verhalten mithilfe von if/else-Befehlen in einer Embedded Matlab Function abzubilden. Der Eingang ist das normale u von 0 bis 100 %, der Ausgang y soll dann die begrenzte Stellgröße ausgeben. Es wäre super, wenn mir jemand helfen könnte! Smile

MfG
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.07.2013, 22:53     Titel:
  Antworten mit Zitat      
Hallo,

mir ist in diesem Absatz nicht klar, was nun Eingang ist und was unter welchen Bedingungen der Ausgang. Insbesondere: hängt der Ausgang auch von zurückliegenden Eingängen / Ausgängen ab?
Wenn du das mal übersichtlich hinschreibst, wird es vermutlich leichter, dir zu helfen. Vielleicht kannst du dir dann auch selbst helfen :)

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 15.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.07.2013, 00:10     Titel:
  Antworten mit Zitat      
Hallo Harald, danke schonmal für die Antwort. Das ganze ist nicht so leicht zu beschreiben, aber ich versuchs nochmal anders.

In die Funktion geht eine Stellgröße u ein, die Werte von 0 bis 100 annehmen kann.

Steigt u (z.B. in 1er Schritten) bis auf 17, dann sollen die entsprechenden Werte als Ausgang y ausgegeben werden.

Sobald u>17 (bis u = 100) ist, soll y nur noch 12 ausgeben.

Wenn u nun wieder <= 17 ist, bleibt y dennoch weiterhin bei 12.

Erst wenn u wieder < 13 ist , ist der Ausgangszustand erreicht.
D.h. wenn u nun wieder Werte von 0 - 17 liefert, soll y diese Werte auch ausgeben.

Erst wenn u wieder > 17 ist, soll y wieder nur 12 ausgeben.

Das ganze soll immer wieder so ablaufen.

Ich hoffe jetzt kann man es etwas besser nachvollziehen. Mit meinen Fähigkeiten hab ich es nicht hinbekommen Confused

Gruß
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: 03.07.2013, 00:17     Titel:
  Antworten mit Zitat      
geht u als skalar in die fuktion ein oder als vektor. sonst ist es schwer zu sagen ob u grade größer oder kleiner wird. wenn es als vektor vorliegt könnte man vieleicht mit diff rausfinden ob er grade zu oder abnimmt. und das dann entsprechend auswerten mit if then.
Private Nachricht senden Benutzer-Profile anzeigen
 
Eddy2k
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 15.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.07.2013, 01:17     Titel:
  Antworten mit Zitat      
Die Größe u kommt aus einer Step-Funktion. Soweit ich weiß sollte das eine skalare Größe sein. Die Embedded Matlab Function, in die das u kontinuierlich eingeht, soll dann im Prinzip als Filter dienen, mit den oben beschriebenen Operationen. Mit if/else bin ich zu keiner Lösung gekommen...
Private Nachricht senden Benutzer-Profile anzeigen
 
Eddy2k
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 15.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.07.2013, 11:54     Titel:
  Antworten mit Zitat      
Hallo Leute,

das Problem ist behoben! Ich habe es zum Schluss doch geschafft, das oben beschriebene Verhalten zu programmieren. Für alle die es interessiert poste ich hier den entsprechenden Code:

Code:

function y = fcn(u)

%#eml

eml.extrinsic('evalin','assignin');

y=u;
lock=0;
lock=evalin('base','lock');

if lock==0
    y=u;
else
    y=12;
end
if u>17&&lock==0
    lock=1;
end
if u<13&&lock==1
    lock=0;
end

assignin('base','lock',lock);
 


Vielen Dank für eure Hilfe!

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

das hässliche evalin sollte sich vermeiden lassen, indem man statische (persistent) Variablen verwendet, siehe
http://www.mathworks.com/help/simul.....persistent-variables.html

Grüße,
Harald
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.