Hallo Zusammen,
ein sehr spezielles Thema ;) Ich habe o.g. Konstellation bei mir im Einsatz und wurde nun von einigen
Leuten gefragt wie ich das ganze umgesetzt habe. Deshalb habe ich mir gedacht das es für andere auch interessant sein könnte.
Anbei mein Code, er ist nicht perfekt läuft aber nun seit > 1 Jahr sehr gut.
Info vorne Weg:
Folgende Variablen werden von der Anlage gelesen:
Temperatur_Aussen: REAL;
Temperatur_Zuluft: REAL;
Temperatur_Fortluft: REAL;
Temperatur_Abluft: REAL;
Filterwechsel_Restlaufzeit_Tage: DINT;
Folgende Variablen werden geschrieben:
Lueftung_Plus: BOOL;
Lueftung_Minus: BOOL;
Die zwei o.g. Bool steuern die Luefterstufe die dann an
die Lüftungsanlage gesendet wird
Luefterstufe: BYTE;
Bypass_Min_Aussentemperatur: INT;
Bypass_Ablufttemperatur: INT;
Maximalwert_Temperatur_Aussen: REAL;
Bypass:
Den Bypass kann man nicht direkt steuern, daher manipuliere ich
die beiden Schwellwerte.
Max. Außentemp: Ist es zu warm schaltet die Anlage ab,
da sonst das Haus zu sehr aufheizt.
Das mal im groben, anbei nun das Programm.
Fragen beantworte ich gern.
Deklaration:
Programm:
Grüße
Marcel
ein sehr spezielles Thema ;) Ich habe o.g. Konstellation bei mir im Einsatz und wurde nun von einigen
Leuten gefragt wie ich das ganze umgesetzt habe. Deshalb habe ich mir gedacht das es für andere auch interessant sein könnte.
Anbei mein Code, er ist nicht perfekt läuft aber nun seit > 1 Jahr sehr gut.
Info vorne Weg:
Folgende Variablen werden von der Anlage gelesen:
Temperatur_Aussen: REAL;
Temperatur_Zuluft: REAL;
Temperatur_Fortluft: REAL;
Temperatur_Abluft: REAL;
Filterwechsel_Restlaufzeit_Tage: DINT;
Folgende Variablen werden geschrieben:
Lueftung_Plus: BOOL;
Lueftung_Minus: BOOL;
Die zwei o.g. Bool steuern die Luefterstufe die dann an
die Lüftungsanlage gesendet wird
Luefterstufe: BYTE;
Bypass_Min_Aussentemperatur: INT;
Bypass_Ablufttemperatur: INT;
Maximalwert_Temperatur_Aussen: REAL;
Bypass:
Den Bypass kann man nicht direkt steuern, daher manipuliere ich
die beiden Schwellwerte.
Max. Außentemp: Ist es zu warm schaltet die Anlage ab,
da sonst das Haus zu sehr aufheizt.
Das mal im groben, anbei nun das Programm.
Fragen beantworte ich gern.
Deklaration:
Code:
PROGRAM LUEFTUNG_ALLGEMEIN
VAR
LUEFTUNGSANLAGE: ETHERNET_MODBUSMASTER_TCP;
Lueftung_Empfangsdaten: ARRAY[0..19] OF BYTE;
Lueftung_Sendedaten: ARRAY[0..9] OF WORD;
Lueftung_Sendedaten_Puffer: ARRAY[0..5,0..9] OF WORD;
Lueftung_Senden_Start: BOOL;
Lueftung_Reset: BOOL;
Temperatur_Aussen: REAL;
Temperatur_Zuluft: REAL;
Temperatur_Fortluft: REAL;
Temperatur_Abluft: REAL;
Filterwechsel_Restlaufzeit_Tage: DINT;
Lueftung_Plus: BOOL;
Lueftung_Minus: BOOL;
SK1_NR: INT;
SK1_NR_ALT:INT;
R_TRIG_SENDEN: R_TRIG;
TON_TIMEOUT_SENDEN: TON;
TON_AUSSENTEMP_MAX: TON;
R_TRIG_AUSSENTEMP: R_TRIG;
F_TRIG_AUSSENTEMP: F_TRIG;
TON_CLK:TON;
END_VAR
VAR RETAIN PERSISTENT
Luefterstufe: BYTE;
Bypass_Min_Aussentemperatur: INT;
Bypass_Ablufttemperatur: INT;
Maximalwert_Temperatur_Aussen: REAL;
END_VAR
VAR_TEMP
TMP_ZEHNERSTELLE: INT;
TMP_EINSERSTELLE:INT;
TMP_CNT_I:INT;
END_VAR
VAR_INPUT
ueftung_Sendedaten_Puffer: BOOL;
END_VAR
Code:
LUEFTUNGSANLAGE(
strIP_ADDRESS:='192.168.51.40',
wPORT := 502,
bUNIT_ID := 180
bFUNCTION_CODE := 16#17,
wREAD_ADDRESS := 1,
wREAD_QUANTITY := 10,
ptREAD_DATA := ADR(Lueftung_Empfangsdaten),
wWRITE_ADDRESS := 1,
wWRITE_QUANTITY := 10,
ptSEND_DATA := ADR(Lueftung_Sendedaten),
xSTART := (Lueftung_Senden_Start),
xRESET :=Lueftung_Reset,
tTIME_OUT := t#3s
);
TON_TIMEOUT_SENDEN(IN:= Lueftung_Senden_Start, PT:= t#5s);
R_TRIG_SENDEN(CLK:=LUEFTUNGSANLAGE.xREADY);
(* Sendepuffer verwalten *)
(* ########################################################### *)
(* Wenn etwas im Sendepuffer steht dies senden *)
IF Lueftung_Sendedaten_Puffer[0,0] <> 16#00 THEN
Lueftung_Sendedaten[0] := Lueftung_Sendedaten_Puffer[0,0];
Lueftung_Sendedaten[1] := Lueftung_Sendedaten_Puffer[0,1];
Lueftung_Sendedaten[2] := Lueftung_Sendedaten_Puffer[0,2];
Lueftung_Sendedaten[3] := Lueftung_Sendedaten_Puffer[0,3];
Lueftung_Sendedaten[4] := Lueftung_Sendedaten_Puffer[0,4];
Lueftung_Sendedaten[5] := Lueftung_Sendedaten_Puffer[0,5];
Lueftung_Sendedaten[6] := Lueftung_Sendedaten_Puffer[0,6];
Lueftung_Sendedaten[7] := Lueftung_Sendedaten_Puffer[0,7];
Lueftung_Sendedaten[8] := Lueftung_Sendedaten_Puffer[0,8];
Lueftung_Sendedaten[9] := Lueftung_Sendedaten_Puffer[0,9];
Lueftung_Senden_Start := TRUE;
END_IF;
(* Wenn Daten erfolgreich gesendet wurden diese löschen *)
IF R_TRIG_SENDEN.Q THEN
Lueftung_Senden_Start := FALSE;
Lueftung_Sendedaten[0] := 16#00;
Lueftung_Sendedaten[1] := 16#00;
Lueftung_Sendedaten[2] := 16#00;
Lueftung_Sendedaten[3] := 16#00;
Lueftung_Sendedaten[4] := 16#00;
Lueftung_Sendedaten[5] := 16#00;
Lueftung_Sendedaten[6] := 16#00;
Lueftung_Sendedaten[7] := 16#00;
Lueftung_Sendedaten[8] := 16#00;
Lueftung_Sendedaten[9] := 16#00;
(* Puffer aufrücken *)
FOR TMP_CNT_I:=0 TO 4 DO
Lueftung_Sendedaten_Puffer[TMP_CNT_I,0] := Lueftung_Sendedaten_Puffer[(TMP_CNT_I+1),0];
Lueftung_Sendedaten_Puffer[TMP_CNT_I,1] := Lueftung_Sendedaten_Puffer[(TMP_CNT_I+1),1];
Lueftung_Sendedaten_Puffer[TMP_CNT_I,2] := Lueftung_Sendedaten_Puffer[(TMP_CNT_I+1),2];
Lueftung_Sendedaten_Puffer[TMP_CNT_I,3] := Lueftung_Sendedaten_Puffer[(TMP_CNT_I+1),3];
Lueftung_Sendedaten_Puffer[TMP_CNT_I,4] := Lueftung_Sendedaten_Puffer[(TMP_CNT_I+1),4];
Lueftung_Sendedaten_Puffer[TMP_CNT_I,5] := Lueftung_Sendedaten_Puffer[(TMP_CNT_I+1),5];
Lueftung_Sendedaten_Puffer[TMP_CNT_I,6] := Lueftung_Sendedaten_Puffer[(TMP_CNT_I+1),6];
Lueftung_Sendedaten_Puffer[TMP_CNT_I,7] := Lueftung_Sendedaten_Puffer[(TMP_CNT_I+1),7];
Lueftung_Sendedaten_Puffer[TMP_CNT_I,8] := Lueftung_Sendedaten_Puffer[(TMP_CNT_I+1),8];
Lueftung_Sendedaten_Puffer[TMP_CNT_I,9] := Lueftung_Sendedaten_Puffer[(TMP_CNT_I+1),9];
END_FOR
(* Letzten Puffereintrag löschen *)
Lueftung_Sendedaten_Puffer[5,0] := 16#00;
Lueftung_Sendedaten_Puffer[5,1] := 16#00;
Lueftung_Sendedaten_Puffer[5,2] := 16#00;
Lueftung_Sendedaten_Puffer[5,3] := 16#00;
Lueftung_Sendedaten_Puffer[5,4] := 16#00;
Lueftung_Sendedaten_Puffer[5,5] := 16#00;
Lueftung_Sendedaten_Puffer[5,6] := 16#00;
Lueftung_Sendedaten_Puffer[5,7] := 16#00;
Lueftung_Sendedaten_Puffer[5,8] := 16#00;
Lueftung_Sendedaten_Puffer[5,9] := 16#00;
END_IF;
(* Bei Timeout senden zurücksetzen *)
IF TON_TIMEOUT_SENDEN.Q THEN
Lueftung_Senden_Start := FALSE;
END_IF;
(* Takt erzeugen für zyklische Abfragen *)
TON_CLK(IN:=NOT TON_CLK.Q,PT:=t#10s);
(* SK1 NR Wegsichern und erhöhen mit jedem Takt *)
SK1_NR_ALT := SK1_NR;
IF TON_CLK.Q THEN
SK1_NR:=SK1_NR + 10;
END_IF;
(* Wenn die SK1_NR zu groß ist diese zurücksetzen *)
IF SK1_NR > 60 THEN
SK1_NR:=0;
END_IF;
(* Timer für Auswertung ob Außentemperatur über Grenzwerk ist *)
TON_AUSSENTEMP_MAX(IN:=(Temperatur_Aussen < Maximalwert_Temperatur_Aussen), PT:=t#30s);
R_TRIG_AUSSENTEMP(CLK:=TON_AUSSENTEMP_MAX.Q);
F_TRIG_AUSSENTEMP(CLK:=TON_AUSSENTEMP_MAX.Q);
(* Sendedaten aufbereiten *)
(* ########################################################### *)
(* Sendetelegramm - Temperatur Aussen v00104*)
IF SK1_NR = 0 AND SK1_NR <> SK1_NR_ALT THEN
FOR TMP_CNT_I:=0 TO 5 DO
IF Lueftung_Sendedaten_Puffer[TMP_CNT_I,0] = 16#00 THEN
Lueftung_Sendedaten_Puffer[TMP_CNT_I,0] := 16#7630;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,1] := 16#3031;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,2] := 16#3034;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,3] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,4] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,5] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,6] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,7] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,8] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,9] := 16#0000;
EXIT;
END_IF;
END_FOR;
END_IF;
(* Sendetelegramm - Temperatur Zuluft v00105*)
IF SK1_NR = 10 AND SK1_NR <> SK1_NR_ALT THEN
FOR TMP_CNT_I:=0 TO 5 DO
IF Lueftung_Sendedaten_Puffer[TMP_CNT_I,0] = 16#00 THEN
Lueftung_Sendedaten_Puffer[TMP_CNT_I,0] := 16#7630;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,1] := 16#3031;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,2] := 16#3035;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,3] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,4] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,5] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,6] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,7] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,8] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,9] := 16#0000;
EXIT;
END_IF;
END_FOR;
END_IF;
(* Sendetelegramm - Temperatur Fortluft v00106*)
IF SK1_NR = 20 AND SK1_NR <> SK1_NR_ALT THEN
FOR TMP_CNT_I:=0 TO 5 DO
IF Lueftung_Sendedaten_Puffer[TMP_CNT_I,0] = 16#00 THEN
Lueftung_Sendedaten_Puffer[TMP_CNT_I,0] := 16#7630;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,1] := 16#3031;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,2] := 16#3036;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,3] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,4] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,5] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,6] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,7] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,8] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,9] := 16#0000;
EXIT;
END_IF;
END_FOR;
END_IF;
(* Sendetelegramm - Temperatur Abluft v00107*)
IF SK1_NR = 30 AND SK1_NR <> SK1_NR_ALT THEN
FOR TMP_CNT_I:=0 TO 5 DO
IF Lueftung_Sendedaten_Puffer[TMP_CNT_I,0] = 16#00 THEN
Lueftung_Sendedaten_Puffer[TMP_CNT_I,0] := 16#7630;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,1] := 16#3031;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,2] := 16#3037;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,3] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,4] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,5] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,6] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,7] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,8] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,9] := 16#0000;
EXIT;
END_IF;
END_FOR;
END_IF;
(* Sendetelegramm - Filterwechsel Restlaufzeit in Minuten v01033*)
IF SK1_NR = 40 AND SK1_NR <> SK1_NR_ALT THEN
FOR TMP_CNT_I:=0 TO 5 DO
IF Lueftung_Sendedaten_Puffer[TMP_CNT_I,0] = 16#00 THEN
Lueftung_Sendedaten_Puffer[TMP_CNT_I,0] := 16#7630;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,1] := 16#3130;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,2] := 16#3333;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,3] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,4] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,5] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,6] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,7] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,8] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,9] := 16#0000;
EXIT;
END_IF;
END_FOR;
END_IF;
(* Sendetelegramm - Bypass min. Temperatur Aussentemperatur v01036*)
TMP_ZEHNERSTELLE := (Bypass_Min_Aussentemperatur / 10);
TMP_EINSERSTELLE := (Bypass_Min_Aussentemperatur - (TMP_ZEHNERSTELLE * 10));
IF FALSE AND SK1_NR = 50 AND SK1_NR <> SK1_NR_ALT THEN
FOR TMP_CNT_I:=0 TO 5 DO
IF Lueftung_Sendedaten_Puffer[TMP_CNT_I,0] = 16#00 THEN
Lueftung_Sendedaten_Puffer[TMP_CNT_I,0] := 16#7630;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,1] := 16#3130;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,2] := 16#3336;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,3] := 16#3D30 + TMP_ZEHNERSTELLE;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,4] := 16#3000 + (TMP_EINSERSTELLE * 256);
Lueftung_Sendedaten_Puffer[TMP_CNT_I,5] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,6] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,7] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,8] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,9] := 16#0000;
EXIT;
END_IF;
END_FOR;
END_IF;
(* Sendetelegramm - Bypass min. Temperatur Aussentemperatur v01035*)
TMP_ZEHNERSTELLE := (Bypass_Ablufttemperatur / 10);
TMP_EINSERSTELLE := (Bypass_Ablufttemperatur - (TMP_ZEHNERSTELLE * 10));
IF FALSE AND SK1_NR = 60 AND SK1_NR <> SK1_NR_ALT THEN
FOR TMP_CNT_I:=0 TO 5 DO
IF Lueftung_Sendedaten_Puffer[TMP_CNT_I,0] = 16#00 THEN
Lueftung_Sendedaten_Puffer[TMP_CNT_I,0] := 16#7630;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,1] := 16#3130;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,2] := 16#3335;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,3] := 16#3D30 + TMP_ZEHNERSTELLE;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,4] := 16#3000 + (TMP_EINSERSTELLE * 256);
Lueftung_Sendedaten_Puffer[TMP_CNT_I,5] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,6] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,7] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,8] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,9] := 16#0000;
EXIT;
END_IF;
END_FOR;
END_IF;
(* Sendetelegramm - Lüfterdrehzahl verstellen v00102*)
IF Lueftung_Plus THEN
Luefterstufe := Luefterstufe + 1;
END_IF;
IF Lueftung_Minus THEN
Luefterstufe := Luefterstufe - 1;
END_IF;
IF Luefterstufe < 0 THEN
Luefterstufe := 0;
END_IF
IF Luefterstufe > 4 THEN
Luefterstufe := 4;
END_IF
(* Wenn die Aussentemperatur unter die Max Temperatur gefallen
ist die Belüftung wieder auf die eingestellte Stufe einschalten *)
IF R_TRIG_AUSSENTEMP.Q OR Lueftung_Plus OR Lueftung_Minus THEN
Lueftung_Plus := FALSE;
Lueftung_Minus := FALSE;
(*
FOR TMP_CNT_I:=0 TO 5 DO
IF Lueftung_Sendedaten_Puffer[TMP_CNT_I,0] = 16#00 THEN
Lueftung_Sendedaten_Puffer[TMP_CNT_I,0] := 16#7630;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,1] := 16#3031;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,2] := 16#3032;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,3] := (16#3D30 + Luefterstufe);
Lueftung_Sendedaten_Puffer[TMP_CNT_I,4] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,5] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,6] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,7] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,8] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,9] := 16#0000;
EXIT;
END_IF;
END_FOR;
*)
END_IF;
(* Wenn die Aussentemperatur über die Max Temperatur gestiegen
ist die Belüftung abschalten *)
IF FALSE AND F_TRIG_AUSSENTEMP.Q THEN
FOR TMP_CNT_I:=0 TO 5 DO
IF Lueftung_Sendedaten_Puffer[TMP_CNT_I,0] = 16#00 THEN
Lueftung_Sendedaten_Puffer[TMP_CNT_I,0] := 16#7630;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,1] := 16#3031;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,2] := 16#3032;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,3] := 16#3D30;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,4] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,5] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,6] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,7] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,8] := 16#0000;
Lueftung_Sendedaten_Puffer[TMP_CNT_I,9] := 16#0000;
EXIT;
END_IF;
END_FOR;
END_IF;
(* Auswertung der Empfangsdaten *)
(* ########################################################### *)
(* Temperatur Aussen wurde empfangen v104*)
IF
Lueftung_Empfangsdaten[2] = 16#31 AND
Lueftung_Empfangsdaten[3] = 16#30 AND
Lueftung_Empfangsdaten[4] = 16#34 AND
Lueftung_Empfangsdaten[5] = 16#30
THEN
Temperatur_Aussen :=
(
(BYTE_TO_REAL(Lueftung_Empfangsdaten[06] - 48) * 10.0) +
(BYTE_TO_REAL(Lueftung_Empfangsdaten[09] - 48) * 01.0) +
(BYTE_TO_REAL(Lueftung_Empfangsdaten[11] - 48) * 00.1)
)
;
END_IF
(* Temperatur Zuluft wurde empfangen v105*)
IF
Lueftung_Empfangsdaten[2] = 16#31 AND
Lueftung_Empfangsdaten[3] = 16#30 AND
Lueftung_Empfangsdaten[4] = 16#35 AND
Lueftung_Empfangsdaten[5] = 16#30
THEN
Temperatur_Zuluft :=
(
(BYTE_TO_REAL(Lueftung_Empfangsdaten[06] - 48) * 10.0) +
(BYTE_TO_REAL(Lueftung_Empfangsdaten[09] - 48) * 01.0) +
(BYTE_TO_REAL(Lueftung_Empfangsdaten[11] - 48) * 00.1)
)
;
END_IF
(* Temperatur Fortluft wurde empfangen v1064*)
IF
Lueftung_Empfangsdaten[2] = 16#31 AND
Lueftung_Empfangsdaten[3] = 16#30 AND
Lueftung_Empfangsdaten[4] = 16#36 AND
Lueftung_Empfangsdaten[5] = 16#30
THEN
Temperatur_Fortluft :=
(
(BYTE_TO_REAL(Lueftung_Empfangsdaten[06] - 48) * 10.0) +
(BYTE_TO_REAL(Lueftung_Empfangsdaten[09] - 48) * 01.0) +
(BYTE_TO_REAL(Lueftung_Empfangsdaten[11] - 48) * 00.1)
)
;
END_IF
(* Temperatur Abluft wurde empfangen v107*)
IF
Lueftung_Empfangsdaten[2] = 16#31 AND
Lueftung_Empfangsdaten[3] = 16#30 AND
Lueftung_Empfangsdaten[4] = 16#37 AND
Lueftung_Empfangsdaten[5] = 16#30
THEN
Temperatur_Abluft :=
(
(BYTE_TO_REAL(Lueftung_Empfangsdaten[06] - 48) * 10.0) +
(BYTE_TO_REAL(Lueftung_Empfangsdaten[09] - 48) * 01.0) +
(BYTE_TO_REAL(Lueftung_Empfangsdaten[11] - 48) * 00.1)
)
;
END_IF
(* Restlaufzeit bis Filterwechsel wurde empfangen v1033*)
IF
Lueftung_Empfangsdaten[2] = 16#30 AND
Lueftung_Empfangsdaten[3] = 16#31 AND
Lueftung_Empfangsdaten[4] = 16#33 AND
Lueftung_Empfangsdaten[5] = 16#33
THEN
Filterwechsel_Restlaufzeit_Tage :=
(
(
(BYTE_TO_DINT(Lueftung_Empfangsdaten[06] - 48) * 00100000) +
(BYTE_TO_DINT(Lueftung_Empfangsdaten[09] - 48) * 00010000) +
(BYTE_TO_DINT(Lueftung_Empfangsdaten[08] - 48) * 00001000) +
(BYTE_TO_DINT(Lueftung_Empfangsdaten[11] - 48) * 00000100) +
(BYTE_TO_DINT(Lueftung_Empfangsdaten[10] - 48) * 00000010) +
(BYTE_TO_DINT(Lueftung_Empfangsdaten[13] - 48) * 00000001)
)
/60
/24
)
;
END_IF
Marcel