2017-02-26 1 views
1

Ich simuliere Wasserheizung und ich muss bestimmte Bedingung verursachen und ich kann nicht es richtig herstellen.MATLAB - wie man Bedingung mit spezifischen Anforderungen erzeugt

Die erforderliche Wassertemperatur beträgt 55 ° C. Die minimale Temperatur beträgt 50 ° C. Die maximale Temperatur beträgt 70 ° C.

Ich habe 2 Arten von Heizung - elektrische Heizung, die Wasser auf die erforderliche Temperatur von 55 ° C erwärmt und Photovoltaik-Heizung, die Wasser auf maximale Temperatur erhitzen kann.

Ich muss Bedingung erstellen, die elektrische Heizung nur einschalten, wenn die Temperatur unter 50 ° C fällt und stoppt nach Erreichen 55 ° C. Wenn die Temperatur zwischen 50 und 55 ° C liegt, ohne vorher unter 50 ° C zu fallen, ist nur eine photovoltaische Heizung möglich und die elektrische Heizung ist ausgeschaltet.

Die Temperatur wird jede Minute für das ganze Jahr überprüft. Bedingungen werden für Zyklus gestellt.

Gerade jetzt, ich habe es ohne Bedingung für die erforderliche Temperatur (55 ° C) wie folgt aus:

for i = 1:525600 
    if (temeprature(i) < 70) 
      heating = 1; %heating from photovoltaic 
     else 
      heating = 0; % heating off 
     end 
     if (temperature(i) < 50) 
      heating = 2; % electric heating when there is not enough power from PV     
     end 
    if heating==0 
    calculations 
    calling functions 
    etc. 
    ... 
    end 
    if heating==1 
    calculations 
    calling functions 
    etc. 
    ... 
    end 
    if heating==2 
    calculations 
    calling functions 
    etc. 
    ... 
    end 
computing temperature with results from conditions 
end 

Vielen Dank für jede Beratung.

+0

Sie benötigen eine switch-Anweisung, Fall (Temp <50) einschalten elektrische Heizung, in einer Weile Schleife add +1 auf die Heizung bis 50, dann brechen und gehen in die while-Anweisung der Photovoltaik-Heizung, add +1 bis 55. Wenn (Temp> 50 && Temp <55) schalten Sie die Photovoltaik-Heizung bis 55. Das ist alles. –

+0

Vielleicht verstehe ich nicht, wie du es meinst, aber ich denke nicht, dass das das Ding machen wird. Ich möchte nicht, dass es in Photovoltaik-Heizung springt ... sobald es unter 50 fällt, wird die elektrische Heizung bis 55 eingeschaltet. Die Temperatur kann nur um 0,1 oder 0,5 ° C steigen (hängt von der Leistung der Heizung ab). Außerdem brauche ich für den Zyklus, um die Minuten zu zählen. Wenn es hineinspringt während es "i" nicht zählt bis es aus dem Zyklus herauskommt (oder liege ich falsch?). Vielleicht wird die Vereinfachung (vorerst) besser sein. Nehmen wir an, dass nur elektrische Heizung möglich ist. Das bedeutet "heater == 2" und "heater == 0" Bedingungen. –

+0

Temperatur zwischen 50 a 55, keine Hitze. Wenn es unter 50 fällt, heize bis 55. –

Antwort

0

würde ich eine Funktion mit persistierendem Variable für eine elektrische Heizung machen:

function [el, pv] = whatHeating(T) 
persistent elHeat 
if (isempty(elHeat)) 
    elHeat = false; % Initialize to false. The only thing where it matters is if you start at 50<T<55. 
end 

if (T < 50) 
    elHeat = true; 
elseif (T > 55) 
    elHeat = false; 
end 
el = elHeat; % You can't return persistent variable directly. 

if (T > 70) 
    pv = false; 
else 
    pv = true; 
end 

Dann einfach Sie diese Funktion in Ihrem Haupt nennen.

+0

Wenn ich Ihre Funktion anstelle von wenn Bedingungen wie in meinem ersten Beitrag wie folgt verwenden: (el, pv) = wasHeating (T (i)) 'und' wenn el == true Berechnungen Aufruf von Funktionen usw. ... end' und 'wenn el == false Berechnungen Funktionen aufrufen usw. ... end' und' wenn pv == true Berechnungen Anruffunktionen usw. ... Ende Nur Photovoltaik-Heizung ist an und elektrisch ist die ganze Zeit aus. EDIT: Ich weiß nicht, wie ganze Blöcke von Code in den Kommentar hinzufügen, also tat ich es so. –

+0

@LamaObecna Ich habe es versucht und es schien mir gut zu funktionieren. Nicht sicher, was das Problem war. T = [53, 52, 51, 50, 49, 51, 53, 55, 57, 60, 63, 67, 70, 72, 75, 70, 60, 55, 53, 51, 49, 51, 53, 56, 60]; produziert el = [0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0] und pv = [1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1]. Testcode war für i = 1: Länge (T) [el (i), pv (i)] = whatHeating (T (i)); Ende –

+0

Ich würde gerne fragen, ob Sie so nett wären und schaute auf das Skript. Ich hob es hier: https://webshare.cz/file/6QL57g2rv6/simulation-7z Ich sehe nicht wirklich, warum es nicht funktioniert. Ich habe das meiste davon ins Englische von meiner Muttersprache (tschechisch) umgeschrieben. Es gibt 3 Dateien, Ihre Funktion, meine Simulation und Daten von PV (die automatisch geladen werden). Ich habe alles entfernt, was gerade nicht wichtig ist. Main "Ding" ist in für Zyklus (wie ich am ersten Post veröffentlicht), gleiche Syntax. Andere Sachen sind nur für Parameter, die Ergebnisse definieren und anzeigen. Ein Diagramm mit der Temperatur während des Jahres ist aufgetragen. –

Verwandte Themen