Energiehaushalt eines Hauses: Lastkollektive LKT: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 38: | Zeile 38: | ||
== Programmierung / Modellierung == | == Programmierung / Modellierung == | ||
In der Programmierung werden die Komponenten den zuvor festgelegten Spezifikationen entsprechend umgesetzt. Die Programmierung erfolgte auf Basis des im technischen Systementwurf entworfenen Simulink Modells. Neben dem Simulink Modell wurde außerdem eine Matlab-Datei mit Parametern entworfen. Diese wird beim Start des Programms aufgerufen, sodass die Parameter im Workspace gespeichert sind. | |||
<pre> | |||
%**************************************************************** | |||
% Hochschule Hamm-Lippstadt * | |||
%**************************************************************** | |||
% Modul : parameter_LKT.m * | |||
% * | |||
% Datum : 22.05.2023 * | |||
% * | |||
% Funktion : Speichern der Parameter für die Last- * | |||
% kollektive des Haus-Modells im Workspace * | |||
% * | |||
% Implementation : MATLAB 2022a * | |||
% * | |||
% Req. Toolbox : - * | |||
% * | |||
% Req. Dateien : Temperaturdaten.mat * | |||
% * | |||
% Author : David Schartner; Marvin Stute * | |||
% * | |||
% Bemerkung : * | |||
% * | |||
% Letzte Änderung : 04.06.2023 * | |||
% * | |||
%***************************************************************/ | |||
load('Temperaturdaten.mat') | |||
PAR_LKT_Grundflaeche = 100; %in m^2 | |||
PAR_LKT_Deckenhoehe = 2.5; % in m | |||
PAR_LKT_Etagen = 2; % in Etagenanzahl | |||
PAR_LKT_Fensterflaeche = 25; % in Prozent | |||
PAR_LKT_Strompreis = 0.3606; % in €/kWh | |||
PAR_LKT_WasserverbrauchProPerson = 0.1230; % in m^3 für eine Person | |||
PAR_LKT_StromverbrauchProPerson = 6.8; % in kWh für eine Person | |||
PAR_LKT_zweiErwachsene = 2; % Anzahl Personen | |||
PAR_LKT_zweiKinder = 2; % Anzahl Personen | |||
PAR_LKT_Wochenendtag = 1; | |||
PAR_LKT_Urlaubstag = 0; | |||
</pre> | |||
Im Folgenden sind die einzelnen Komponenten dargestellt: | |||
=== Eigenschaften des Hauses === | |||
Die nachfolgende Abbildung zeigt die Modellierung der Komponente "Eigenschaften des Hauses". | |||
Diese ist in einem Simulink-Subsystem implementiert. | |||
Die Parameter werden direkt aus der Parameter-Datei ausgelesen und mit einem Bus Creator auf einem Bus gespeichert. | |||
[[Datei:Komponente Eigenschaften Haus.png|mini|800px|thumb|left|Abbildung 7: Modellierung der Komponente "Eigenschaften des Hauses"]] | |||
<br clear = all> | |||
=== Daten === | |||
Die nachfolgende Abbildung zeigt die Modellierung der Komponente "Daten". | |||
Diese ist in einem Simulink-Subsystem implementiert. Die aktuelle Temperatur wird aus einem Lookup-Table ausgelesen. Dafür werden die Sekunden der Simulationszeit in Stunden bzw. Tage umgewandelt. Der Wasser- & Stromverbrauch wird auf Basis der Anzahl der Bewohner im Haus berechnet. Außerdem werden die Stromkosten über die Solarstromerzeugung und dem aktuellen Stromverbrauch bestimmt. | |||
Die vier Ausgänge gehen dann direkt aus dem Submodul heraus. | |||
[[Datei:Komponente Daten.png|mini|800px|thumb|left|Abbildung 7: Modellierung der Komponente "Daten"]] | |||
<br clear = all> | |||
Code für die Funktion, die Strom-& Wasserverbrauch für die Urlaubstage reduziert: | |||
<pre> | |||
function TageZuhause = fcn(aktuellerTag) | |||
% Die Funktion zieht die Tage von dem Tageszähler ab, an denen die Familie | |||
% außer Haus ist über den Sommer- bzw. Winterurlaub | |||
persistent TageAusserHausSommer TageAusserHausWinter ersterDurchlauf Sommerurlaub Winterurlaub | |||
if isempty(ersterDurchlauf) | |||
Sommerurlaub = [213 227]; | |||
Winterurlaub = [358 365]; | |||
TageAusserHausSommer = 0; % initialisiert den Zähler für Tage die Sie nicht zuhause sind | |||
TageAusserHausWinter = 0; | |||
ersterDurchlauf = 1; | |||
end | |||
if aktuellerTag>=Sommerurlaub(1) && aktuellerTag <= Sommerurlaub(2) | |||
TageAusserHausSommer = aktuellerTag - Sommerurlaub(1); | |||
end | |||
if aktuellerTag>=Winterurlaub(1) && aktuellerTag <= Winterurlaub(2) | |||
TageAusserHausWinter = aktuellerTag - Winterurlaub(1); | |||
end | |||
TageZuhause = aktuellerTag - TageAusserHausSommer - TageAusserHausWinter; | |||
</pre> | |||
=== Szenarioermittlung === | |||
Die nachfolgende Abbildung zeigt die Modellierung der Komponente "Szenarioermittlung". | |||
Diese ist in einem Simulink-Subsystem implementiert. Die aktuelle Simulationszeit wird in den aktuellen Tag und die aktuelle Stunde aufgeteilt. Auf Basis der Stunde wird die aktuelle Zahl der Bewohner im Haus für jedes Szenario bestimmt. Auf Basis des aktuellen Tags wird das Szenario festgelegt. Anschließend wird die Anzahl der Personen im Haus ausgegeben. | |||
[[Datei:Komponente Szenarioermittlung.png|mini|800px|thumb|left|Abbildung 7: Modellierung der Komponente "Szenarioermittlung"]] | |||
<br clear = all> | |||
Code für die Funktion die das aktuelle Szenario festlegt: | |||
<pre> | |||
function LKT_PersonenZuhause = fcn(WochentagP, WochenendTagP, UrlaubstagP, aktuellerTag) | |||
LKT_PersonenZuhause = 0; % Initialisiert die Ausgangsvariable | |||
Sommerurlaub = [213 227]; % Tage in denen die Familie im Sommerurlaub ist | |||
Winterurlaub = [358 365]; % Tage in denen die Faimilie im Winterurlaub ist | |||
if aktuellerTag>=Sommerurlaub(1) && aktuellerTag <= Sommerurlaub(2) || aktuellerTag>=Winterurlaub(1) && aktuellerTag <= Winterurlaub(2) | |||
% Überprüft ob sich die Personen im Urlaub befinden und wählt falls es | |||
% der Fall ist das passende Szenario aus | |||
LKT_PersonenZuhause = UrlaubstagP; | |||
return | |||
end | |||
day = mod(aktuellerTag, 7); % Der Rest aus der Division mit 7 gibt an, welcher Wochentag aktuell ist (Zahl zwischen 0 - 6) | |||
if day == 5 || day == 6 % Die Tage 5 & 6 sind Samstag und Sonntag, also Wochenende | |||
weekend = true; | |||
else | |||
weekend = false; | |||
end | |||
% Überprüft ob Wochenende ist und wählt das passende Szenario aus | |||
if weekend == false | |||
LKT_PersonenZuhause = WochentagP; | |||
return | |||
elseif weekend == true | |||
LKT_PersonenZuhause = WochenendTagP; | |||
return | |||
end | |||
</pre> | |||
Code für die PAR_LKT_Werktag Funktion. | |||
<pre> | |||
function y = fcn(u) | |||
if u >= 0 && u < 8 | |||
y = 1; | |||
elseif u >= 8 && u < 14 | |||
y = 0; | |||
elseif u >= 14 && u < 18 | |||
y = 0.75; | |||
else | |||
y = 1; | |||
end | |||
</pre> | |||
=== Datum und Tageszeit === | |||
Die nachfolgende Abbildung zeigt die Modellierung der Komponente "Daten und Tageszeit". | |||
Diese ist in einem Simulink-Subsystem implementiert. Sie gibt über den "Clock"-Block die Simulationszeit der gesamten Simulationszeit in Sekunden an. | |||
[[Datei:Komponente Dateum und Tageszeit.png|mini|800px|thumb|left|Abbildung 7: Modellierung der Komponente "Datum und Tageszeit"]] | |||
<br clear = all> | |||
== Komponententest == | == Komponententest == | ||
Version vom 4. Juli 2023, 09:23 Uhr
Autoren: Marvin Stute; David Schartner
Betreuer: Prof. Dr.-Ing. M. Göbel
→ zum Hauptartikel: Systems Design Engineering - Seminaraufgabe SoSe 2023: Energiehaushalt eines Hauses
Einleitung
Zielsetzung der Seminaraufgabe
V-Modell
Anforderungsdefinition: Lastenheft
Funktionaler Systementwurf
Der funktionale Systementwurf war im Sommersemester 2023 kein Bestandteil der Gruppenaufgabe und wurde von Prof. Dr. Göbel bereitgestellt.
Technischer Systementwurf
Komponentenspezifikation
Programmierung / Modellierung
In der Programmierung werden die Komponenten den zuvor festgelegten Spezifikationen entsprechend umgesetzt. Die Programmierung erfolgte auf Basis des im technischen Systementwurf entworfenen Simulink Modells. Neben dem Simulink Modell wurde außerdem eine Matlab-Datei mit Parametern entworfen. Diese wird beim Start des Programms aufgerufen, sodass die Parameter im Workspace gespeichert sind.
%**************************************************************** % Hochschule Hamm-Lippstadt * %**************************************************************** % Modul : parameter_LKT.m * % * % Datum : 22.05.2023 * % * % Funktion : Speichern der Parameter für die Last- * % kollektive des Haus-Modells im Workspace * % * % Implementation : MATLAB 2022a * % * % Req. Toolbox : - * % * % Req. Dateien : Temperaturdaten.mat * % * % Author : David Schartner; Marvin Stute * % * % Bemerkung : * % * % Letzte Änderung : 04.06.2023 * % * %***************************************************************/ load('Temperaturdaten.mat') PAR_LKT_Grundflaeche = 100; %in m^2 PAR_LKT_Deckenhoehe = 2.5; % in m PAR_LKT_Etagen = 2; % in Etagenanzahl PAR_LKT_Fensterflaeche = 25; % in Prozent PAR_LKT_Strompreis = 0.3606; % in €/kWh PAR_LKT_WasserverbrauchProPerson = 0.1230; % in m^3 für eine Person PAR_LKT_StromverbrauchProPerson = 6.8; % in kWh für eine Person PAR_LKT_zweiErwachsene = 2; % Anzahl Personen PAR_LKT_zweiKinder = 2; % Anzahl Personen PAR_LKT_Wochenendtag = 1; PAR_LKT_Urlaubstag = 0;
Im Folgenden sind die einzelnen Komponenten dargestellt:
Eigenschaften des Hauses
Die nachfolgende Abbildung zeigt die Modellierung der Komponente "Eigenschaften des Hauses". Diese ist in einem Simulink-Subsystem implementiert. Die Parameter werden direkt aus der Parameter-Datei ausgelesen und mit einem Bus Creator auf einem Bus gespeichert.
Daten
Die nachfolgende Abbildung zeigt die Modellierung der Komponente "Daten". Diese ist in einem Simulink-Subsystem implementiert. Die aktuelle Temperatur wird aus einem Lookup-Table ausgelesen. Dafür werden die Sekunden der Simulationszeit in Stunden bzw. Tage umgewandelt. Der Wasser- & Stromverbrauch wird auf Basis der Anzahl der Bewohner im Haus berechnet. Außerdem werden die Stromkosten über die Solarstromerzeugung und dem aktuellen Stromverbrauch bestimmt. Die vier Ausgänge gehen dann direkt aus dem Submodul heraus.
Code für die Funktion, die Strom-& Wasserverbrauch für die Urlaubstage reduziert:
function TageZuhause = fcn(aktuellerTag) % Die Funktion zieht die Tage von dem Tageszähler ab, an denen die Familie % außer Haus ist über den Sommer- bzw. Winterurlaub persistent TageAusserHausSommer TageAusserHausWinter ersterDurchlauf Sommerurlaub Winterurlaub if isempty(ersterDurchlauf) Sommerurlaub = [213 227]; Winterurlaub = [358 365]; TageAusserHausSommer = 0; % initialisiert den Zähler für Tage die Sie nicht zuhause sind TageAusserHausWinter = 0; ersterDurchlauf = 1; end if aktuellerTag>=Sommerurlaub(1) && aktuellerTag <= Sommerurlaub(2) TageAusserHausSommer = aktuellerTag - Sommerurlaub(1); end if aktuellerTag>=Winterurlaub(1) && aktuellerTag <= Winterurlaub(2) TageAusserHausWinter = aktuellerTag - Winterurlaub(1); end TageZuhause = aktuellerTag - TageAusserHausSommer - TageAusserHausWinter;
Szenarioermittlung
Die nachfolgende Abbildung zeigt die Modellierung der Komponente "Szenarioermittlung". Diese ist in einem Simulink-Subsystem implementiert. Die aktuelle Simulationszeit wird in den aktuellen Tag und die aktuelle Stunde aufgeteilt. Auf Basis der Stunde wird die aktuelle Zahl der Bewohner im Haus für jedes Szenario bestimmt. Auf Basis des aktuellen Tags wird das Szenario festgelegt. Anschließend wird die Anzahl der Personen im Haus ausgegeben.
Code für die Funktion die das aktuelle Szenario festlegt:
function LKT_PersonenZuhause = fcn(WochentagP, WochenendTagP, UrlaubstagP, aktuellerTag) LKT_PersonenZuhause = 0; % Initialisiert die Ausgangsvariable Sommerurlaub = [213 227]; % Tage in denen die Familie im Sommerurlaub ist Winterurlaub = [358 365]; % Tage in denen die Faimilie im Winterurlaub ist if aktuellerTag>=Sommerurlaub(1) && aktuellerTag <= Sommerurlaub(2) || aktuellerTag>=Winterurlaub(1) && aktuellerTag <= Winterurlaub(2) % Überprüft ob sich die Personen im Urlaub befinden und wählt falls es % der Fall ist das passende Szenario aus LKT_PersonenZuhause = UrlaubstagP; return end day = mod(aktuellerTag, 7); % Der Rest aus der Division mit 7 gibt an, welcher Wochentag aktuell ist (Zahl zwischen 0 - 6) if day == 5 || day == 6 % Die Tage 5 & 6 sind Samstag und Sonntag, also Wochenende weekend = true; else weekend = false; end % Überprüft ob Wochenende ist und wählt das passende Szenario aus if weekend == false LKT_PersonenZuhause = WochentagP; return elseif weekend == true LKT_PersonenZuhause = WochenendTagP; return end
Code für die PAR_LKT_Werktag Funktion.
function y = fcn(u) if u >= 0 && u < 8 y = 1; elseif u >= 8 && u < 14 y = 0; elseif u >= 14 && u < 18 y = 0.75; else y = 1; end
Datum und Tageszeit
Die nachfolgende Abbildung zeigt die Modellierung der Komponente "Daten und Tageszeit". Diese ist in einem Simulink-Subsystem implementiert. Sie gibt über den "Clock"-Block die Simulationszeit der gesamten Simulationszeit in Sekunden an.
Komponententest
Integrationstest
Systemtest
Fazit
Literaturverzeichnis
→ zum Hauptartikel: Systems Design Engineering - Seminaraufgabe SoSe 2023: Energiehaushalt eines Hauses