Hallo Zusammen,
ich möchte den Anlagenstatus einer Alpha Innotec Wärmepumpe mit Luxtronik 1.0 Steuerung (RS232 Schnittstelle) vom EibPC abfragen.
Die Wärmepumpe reagiert auf den ASCII Request 1800 mit folgendem Feedback:
// Header
1800;8
// Temperaturwerte
1100;12;256;254;267;261;50;445;450;125;121;750;200 ;0
// Status WP-Eingänge
1200;6;1;1;0;1;1;0
// Status WP-Ausgänge
1300;13;0;0;1;1;0;1;0;0;0;0;0;0;0
// Ablaufzeiten
1400;29;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;3;0;0;0;0; 0;38;0;0;0;0;0;0
// Betriebsstunden
1450;9;3628317;2161;1678;3121663;2162;1443;372727; 0;6230122
// Sub-Header
1500;5
// Fehlermeldung 1 (z.B. Fehler 709, vom 22.11.2008 11.54 Uhr)
1500;1500;6;709;22;11;8;11;54
// Fehlermeldung 2
1500;1501;6;715;22;11;8;12;4
// Fehlermeldung 3
1500;1502;6;709;22;11;8;12;4
// Fehlermeldung 4
1500;1503;6;711;11;12;8;20;24
// Fehlermeldung 5
1500;1504;6;708;13;12;8;14;9
// Sub-Footer
1500;5
// Sub-Header
1600;5
// Abschaltung 1 (z.B. Abschaltgrund 010, vom 19.12.2008 12.32 Uhr)
1600;1600;6;010;19;12;8;12;32
// Abschaltung 2
1600;1601;6;010;19;12;8;14;54
// Abschaltung 3
1600;1602;6;010;19;12;8;17;10
// Abschaltung 4
1600;1603;6;010;19;12;8;19;31
// Abschaltung 5
1600;1604;6;010;19;12;8;21;14
// Sub-Footer
1600;5
// Anlagenstatus
1700;12;2;V2.33;1;5;19;12;8;10;42;12;0;1
// Footer
1800;8
Anmerkung:
1100 ist z.B. der Datensatz zu den Temperaturen mit 12 Einzelwerten (z.B. 256 = 25,6°C)
1100;12;“Vorlauftemperatur Heizkreis“;“Rücklauftemperatur Heizkreis“;“Rücklauf-Soll Heizkreis“;
“Heissgastemperatur“;“Außentemperatur“;“ Brauchwarmwasser Ist-Temperatur“;
“Brauchwarmwasser Soll-Temperatur“;“Wärmequellen-Eintrittstemperatur“;“ Wärmequellen-Austrittstemperatur“;
“Mischkreis 1 Vorlauftemperatur“;“ Mischkreis 1 Vorlauf-Soll-Temperatur“;“Raumstation“
Bis hier bin ich bisher mit der Programmierung gekommen:
[highlight=epc]
// Datenauswertung von Alpha Innotec Wärmepumpen über RS232 (Luxtronik 1.0)
rawdata=$$
len=0u16
Buffer=$$
// Request 1800 für den Anlagenstatus alle 5 Minuten über RS232 senden
if cycle(5,0) then sendrs232($1800$) endif
// Empfangen des Anlagenstatus über RS232
if event(readrs232(rawdata,len)) then {
Buffer=Buffer + split(rawdata,0u16,len);
len=0u16
} endif
// Einzelwerte zu den Temperaturen definieren
Heizkreis_Ist_Vorlauftemperatur=0.0
Heizkreis_Ist_ Rücklauftemperatur=0.0
Heizkreis_Soll_Rücklauftemperatur=0.0
Heissgastemperatur=0.0
Außentemperatur=0.0
Brauchwarmwasser_Ist_Temperatur=0.0
Brauchwarmwasser_Soll_Temperatur=0.0
Wärmequellen_Eintrittstemperatur=0.0
Wärmequellen_Austrittstemperatur=0.0
Mischkreis_1_Ist_Vorlauftemperatur=0.0
Mischkreis_1_Soll_Vorlauftemperatur=0.0
Raumstation=0.0
// Einzelwerte zu den Wärmepumpeneingängen definieren
Abtau_Soledruck_Durchfluss=0u16
Sperrzeit_vom_EVU=0u16
Hochdruckpressostat=0u16
Motorschutz=0u16
Niederdruckpressostat=0u16
Anschluss_einer_Fremdstromanode=0u16
// Einzelwerte zu den Wärmepumpenausgängen definieren
Abtauventil=0u16
Brauchwarmwasserumwälzpumpe=0u16
Fußbodenheizungsumwälzpumpe=0u16
Heizungsumwälzpumpe=0u16
Mischer_1_Auf=0u16
Mischer_1_Zu=0u16
Ventilation_des_Wärmepumpengehäuses=0u16
Ventilator_Brunnen_oder_Soleumwälzpumpe=0u16
Verdichter_1_in_Wärmepumpe=0u16
Verdichter_2_in_Wärmepumpe=0u16
Zusatzumwälzpumpe_Zirkulationspumpe=0u16
Zweiter_Wärmeerzeuger_1=0u16
Zweiter_Wärmeerzeuger_2_Sammelstörung=0u16
// Einzelwerte zu den Ablaufzeiten definieren
Wärmepumpe_läuft_seit=0t24
Zweiter_Wärmeerzeuger_1_läuft_seit=0t24
Zweiter_Wärmeerzeuger_2_läuft_seit=0t24
Netzeinschaltverzögerung=0t24
Standzeit_Schaltspielsperre=0t24
Einschaltverzögerung_Schaltspielsperre=0t24
Verdichter_Standzeit=0t24
Heizungsregler_Mehr_Zeit=0t24
Heizungsregler_Weniger_Zeit=0t24
Thermische_Desinfektion_läuft_seit=0t24
Sperre_Brauchwarmwasser=0t24
// Einzelwerte zu den Betriebstunden definieren
Betriebsstunden_Verdichter_1=0t24
Impulse_Verdichter_1=0t24
Durchschnittliche Laufzeit Verdichter_1=0t24
Betriebsstunden_Verdichter_2=0t24
Impulse_Verdichter_2=0t24
Durchschnittliche_Laufzeit_Verdichter 2=0t24
Betriebsstunden_Zweiter_Wärmeerzeuger_1=0t24
Betriebsstunden_Zweiter_Wärmeerzeuger_2=0t24
Betriebsstunden_Wärmepumpe=0t24
// Einzelwerte zu den Fehlercodes definieren
Fehler_1_Code=0u16
Fehler_1_Datum=0d24
Fehler_1_Uhrzeit=0t24
Fehler_2_Code=0u16
Fehler_2_Datum=0d24
Fehler_2_Uhrzeit=0t24
Fehler_3_Code=0u16
Fehler_3_Datum=0d24
Fehler_3_Uhrzeit=0t24
Fehler_4_Code=0u16
Fehler_4_Datum=0d24
Fehler_4_Uhrzeit=0t24
Fehler_5_Code=0u16
Fehler_5_Datum=0d24
Fehler_5_Uhrzeit=0t24
// Einzelwerte zu den Abschaltungen definieren
Abschaltung_1_Code=0u16
Abschaltung_1_Datum=0d24
Abschaltung_1_Uhrzeit=0t24
Abschaltung_2_Code=0u16
Abschaltung_2_Datum=0d24
Abschaltung_2_Uhrzeit=0t24
Abschaltung_3_Code=0u16
Abschaltung_3_Datum=0d24
Abschaltung_3_Uhrzeit=0t24
Abschaltung_4_Code=0u16
Abschaltung_4_Datum=0d24
Abschaltung_4_Uhrzeit=0t24
Abschaltung_5_Code=0u16
Abschaltung_5_Datum=0d24
Abschaltung_5_Uhrzeit=0t24
// Einzelwerte zu dem Anlagenstatus definieren
Wärmepumpentyp=0u16
Software_Version=$$
Bivalenzstufe=0u16
Aktueller_Betriebszustand=0u16
// Buffer parsen nach Temperaturwerten
[/highlight]
Im nächsten Schritt muß ich im Buffer nach den einzelnen Parameter-Kennungen suchen, wie z.B. 1100;12 für die Temperaturwerte und die darauf folgende Werte auslesen.
Wie realisiere ich das Parsen am sinnvollsten?
Außerdem frage ich mich, ob das Einlesen des Anlagenstatus in den Buffer so optimal läuft, da die einzelnen Zeilen (mit CRLF terminiert) im Buffer durch zwei Blanks getrennt sind.
Viele Grüße
Michael
PS: Vielen Dank an Swenga für die sehr gute Schnittstellen-Dokumentation
ich möchte den Anlagenstatus einer Alpha Innotec Wärmepumpe mit Luxtronik 1.0 Steuerung (RS232 Schnittstelle) vom EibPC abfragen.
Die Wärmepumpe reagiert auf den ASCII Request 1800 mit folgendem Feedback:
// Header
1800;8
// Temperaturwerte
1100;12;256;254;267;261;50;445;450;125;121;750;200 ;0
// Status WP-Eingänge
1200;6;1;1;0;1;1;0
// Status WP-Ausgänge
1300;13;0;0;1;1;0;1;0;0;0;0;0;0;0
// Ablaufzeiten
1400;29;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;3;0;0;0;0; 0;38;0;0;0;0;0;0
// Betriebsstunden
1450;9;3628317;2161;1678;3121663;2162;1443;372727; 0;6230122
// Sub-Header
1500;5
// Fehlermeldung 1 (z.B. Fehler 709, vom 22.11.2008 11.54 Uhr)
1500;1500;6;709;22;11;8;11;54
// Fehlermeldung 2
1500;1501;6;715;22;11;8;12;4
// Fehlermeldung 3
1500;1502;6;709;22;11;8;12;4
// Fehlermeldung 4
1500;1503;6;711;11;12;8;20;24
// Fehlermeldung 5
1500;1504;6;708;13;12;8;14;9
// Sub-Footer
1500;5
// Sub-Header
1600;5
// Abschaltung 1 (z.B. Abschaltgrund 010, vom 19.12.2008 12.32 Uhr)
1600;1600;6;010;19;12;8;12;32
// Abschaltung 2
1600;1601;6;010;19;12;8;14;54
// Abschaltung 3
1600;1602;6;010;19;12;8;17;10
// Abschaltung 4
1600;1603;6;010;19;12;8;19;31
// Abschaltung 5
1600;1604;6;010;19;12;8;21;14
// Sub-Footer
1600;5
// Anlagenstatus
1700;12;2;V2.33;1;5;19;12;8;10;42;12;0;1
// Footer
1800;8
Anmerkung:
1100 ist z.B. der Datensatz zu den Temperaturen mit 12 Einzelwerten (z.B. 256 = 25,6°C)
1100;12;“Vorlauftemperatur Heizkreis“;“Rücklauftemperatur Heizkreis“;“Rücklauf-Soll Heizkreis“;
“Heissgastemperatur“;“Außentemperatur“;“ Brauchwarmwasser Ist-Temperatur“;
“Brauchwarmwasser Soll-Temperatur“;“Wärmequellen-Eintrittstemperatur“;“ Wärmequellen-Austrittstemperatur“;
“Mischkreis 1 Vorlauftemperatur“;“ Mischkreis 1 Vorlauf-Soll-Temperatur“;“Raumstation“
Bis hier bin ich bisher mit der Programmierung gekommen:
[highlight=epc]
// Datenauswertung von Alpha Innotec Wärmepumpen über RS232 (Luxtronik 1.0)
rawdata=$$
len=0u16
Buffer=$$
// Request 1800 für den Anlagenstatus alle 5 Minuten über RS232 senden
if cycle(5,0) then sendrs232($1800$) endif
// Empfangen des Anlagenstatus über RS232
if event(readrs232(rawdata,len)) then {
Buffer=Buffer + split(rawdata,0u16,len);
len=0u16
} endif
// Einzelwerte zu den Temperaturen definieren
Heizkreis_Ist_Vorlauftemperatur=0.0
Heizkreis_Ist_ Rücklauftemperatur=0.0
Heizkreis_Soll_Rücklauftemperatur=0.0
Heissgastemperatur=0.0
Außentemperatur=0.0
Brauchwarmwasser_Ist_Temperatur=0.0
Brauchwarmwasser_Soll_Temperatur=0.0
Wärmequellen_Eintrittstemperatur=0.0
Wärmequellen_Austrittstemperatur=0.0
Mischkreis_1_Ist_Vorlauftemperatur=0.0
Mischkreis_1_Soll_Vorlauftemperatur=0.0
Raumstation=0.0
// Einzelwerte zu den Wärmepumpeneingängen definieren
Abtau_Soledruck_Durchfluss=0u16
Sperrzeit_vom_EVU=0u16
Hochdruckpressostat=0u16
Motorschutz=0u16
Niederdruckpressostat=0u16
Anschluss_einer_Fremdstromanode=0u16
// Einzelwerte zu den Wärmepumpenausgängen definieren
Abtauventil=0u16
Brauchwarmwasserumwälzpumpe=0u16
Fußbodenheizungsumwälzpumpe=0u16
Heizungsumwälzpumpe=0u16
Mischer_1_Auf=0u16
Mischer_1_Zu=0u16
Ventilation_des_Wärmepumpengehäuses=0u16
Ventilator_Brunnen_oder_Soleumwälzpumpe=0u16
Verdichter_1_in_Wärmepumpe=0u16
Verdichter_2_in_Wärmepumpe=0u16
Zusatzumwälzpumpe_Zirkulationspumpe=0u16
Zweiter_Wärmeerzeuger_1=0u16
Zweiter_Wärmeerzeuger_2_Sammelstörung=0u16
// Einzelwerte zu den Ablaufzeiten definieren
Wärmepumpe_läuft_seit=0t24
Zweiter_Wärmeerzeuger_1_läuft_seit=0t24
Zweiter_Wärmeerzeuger_2_läuft_seit=0t24
Netzeinschaltverzögerung=0t24
Standzeit_Schaltspielsperre=0t24
Einschaltverzögerung_Schaltspielsperre=0t24
Verdichter_Standzeit=0t24
Heizungsregler_Mehr_Zeit=0t24
Heizungsregler_Weniger_Zeit=0t24
Thermische_Desinfektion_läuft_seit=0t24
Sperre_Brauchwarmwasser=0t24
// Einzelwerte zu den Betriebstunden definieren
Betriebsstunden_Verdichter_1=0t24
Impulse_Verdichter_1=0t24
Durchschnittliche Laufzeit Verdichter_1=0t24
Betriebsstunden_Verdichter_2=0t24
Impulse_Verdichter_2=0t24
Durchschnittliche_Laufzeit_Verdichter 2=0t24
Betriebsstunden_Zweiter_Wärmeerzeuger_1=0t24
Betriebsstunden_Zweiter_Wärmeerzeuger_2=0t24
Betriebsstunden_Wärmepumpe=0t24
// Einzelwerte zu den Fehlercodes definieren
Fehler_1_Code=0u16
Fehler_1_Datum=0d24
Fehler_1_Uhrzeit=0t24
Fehler_2_Code=0u16
Fehler_2_Datum=0d24
Fehler_2_Uhrzeit=0t24
Fehler_3_Code=0u16
Fehler_3_Datum=0d24
Fehler_3_Uhrzeit=0t24
Fehler_4_Code=0u16
Fehler_4_Datum=0d24
Fehler_4_Uhrzeit=0t24
Fehler_5_Code=0u16
Fehler_5_Datum=0d24
Fehler_5_Uhrzeit=0t24
// Einzelwerte zu den Abschaltungen definieren
Abschaltung_1_Code=0u16
Abschaltung_1_Datum=0d24
Abschaltung_1_Uhrzeit=0t24
Abschaltung_2_Code=0u16
Abschaltung_2_Datum=0d24
Abschaltung_2_Uhrzeit=0t24
Abschaltung_3_Code=0u16
Abschaltung_3_Datum=0d24
Abschaltung_3_Uhrzeit=0t24
Abschaltung_4_Code=0u16
Abschaltung_4_Datum=0d24
Abschaltung_4_Uhrzeit=0t24
Abschaltung_5_Code=0u16
Abschaltung_5_Datum=0d24
Abschaltung_5_Uhrzeit=0t24
// Einzelwerte zu dem Anlagenstatus definieren
Wärmepumpentyp=0u16
Software_Version=$$
Bivalenzstufe=0u16
Aktueller_Betriebszustand=0u16
// Buffer parsen nach Temperaturwerten
[/highlight]
Im nächsten Schritt muß ich im Buffer nach den einzelnen Parameter-Kennungen suchen, wie z.B. 1100;12 für die Temperaturwerte und die darauf folgende Werte auslesen.
Wie realisiere ich das Parsen am sinnvollsten?
Außerdem frage ich mich, ob das Einlesen des Anlagenstatus in den Buffer so optimal läuft, da die einzelnen Zeilen (mit CRLF terminiert) im Buffer durch zwei Blanks getrennt sind.
Viele Grüße
Michael
PS: Vielen Dank an Swenga für die sehr gute Schnittstellen-Dokumentation
Kommentar