Ankündigung

Einklappen
Keine Ankündigung bisher.

Anlagenstatus einer Alpha Innotec Wärmepumpe (Luxtronik 1.0)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #76
    Ich habe meine AI WP von der Steuerung Luxtronik 1 auf die 2 umgebaut. Daher nutze ich nicht mehr das RS232 I/F, sondern ein LAN I/F.

    Die Abfrage der Luxtronik 2 ist deutlich komplexer, als die von Dir genutzte.
    Ich nutze parallel noch 1-Wire und zahlreiche Internet Abfragen und habe nicht die geringsten Probleme.

    Sowohl das Luxtronik 1 als auch das 2 Makro haben bei mir nie Trouble verursacht.

    Ich würde an Deiner Stelle versuchen die Fehlerquelle zu isolieren in dem Du Deinen Code einmal testweise aufteilst. Du könntest z.B. einmal einige Tage mit/ohne WP Makro vergleichen oder andere Code Bereiche testweise entfernen.

    Ich hatte diese Art Probleme einmal im Zusammenhang mit 1-Wire.

    Kommentar


      #77
      Moin Mathias,

      Zitat von Matthias Beitrag anzeigen
      "htime" Event "vergessen"
      if htime(19,15,0) then write(...)
      htime habe ich in meinem Code nicht eingesetzt, würde ich über chtime lösen.

      Die RS232 Schnittstelle ist ein Kandidat um den EibPC zu belasten. Ich habe ähnliche Probleme bei meinem HA7E Makro das auch via RS232 abfragt mit verzögerten Reaktionen. Bin dabei, das mit der aktuellen Beta noch mal zu isolieren ob es dafür tiefer liegende Gründe geben könnte.

      Gruß,
      Bernd

      Kommentar


        #78
        Hallo Bernd,

        Zitat von bmx Beitrag anzeigen
        Die RS232 Schnittstelle ist ein Kandidat um den EibPC zu belasten. Ich habe ähnliche Probleme bei meinem HA7E Makro das auch via RS232 abfragt mit verzögerten Reaktionen.
        In die Richtung Verarbeitung des Datenstroms aus Richtung RS232 geht auch meine Vermutung.
        Ohne das Makro hatte der EibPC nie Probleme gemacht.
        "verzögerte Reaktionen" ist genau das was ich auch beobachte. Bislang dachte ich es staut sich nur etwas in der Abarbeitung. Aber wie schon geschrieben - es gehen auch Events verloren..

        Grüße
        Matthias

        Kommentar


          #79
          Hallo Michael,

          Zitat von Jambala Beitrag anzeigen
          Ich habe meine AI WP von der Steuerung Luxtronik 1 auf die 2 umgebaut. Daher nutze ich nicht mehr das RS232 I/F, sondern ein LAN I/F.
          Das ist zwar hier jetzt Off-Topic - trotzdem kurz dazu:
          sowas hab ich mir damals auch schon überlegt als ich hörte dass es eine Version 2 mit Ethernet gibt. Funktioniert das nach dem Prinzip (wie ich erwarten würde) alte Steuerung raus, neue Steuerung rein und fertig? (also Steckerbelegung der Steuerkabel sind identisch?)

          Zitat von Jambala Beitrag anzeigen
          Ich würde an Deiner Stelle versuchen die Fehlerquelle zu isolieren in dem Du Deinen Code einmal testweise aufteilst. Du könntest z.B. einmal einige Tage mit/ohne WP Makro vergleichen oder andere Code Bereiche testweise entfernen.

          Ich hatte diese Art Probleme einmal im Zusammenhang mit 1-Wire.
          Ich habe nicht wirklich komplexen Code oder Makros im EibPC.

          Code:
          [MacroLibs]
          //Makro-Bibliotheken
          
          ./MakroLibs/Enertex.lib
          ./MakroLibs/EnertexLicht.lib
          ./MakroLibs/EnertexCommandFusion.lib
          ./MakroLibs/Alpha_Innotec_WP_v2.lib
          An CommandFusion kann es eigentlich nicht liegen - das hab ich im Nachgang erst implementiert. Da gab es schon die Probleme. (Bzw. wirkt sich das mit der verzögernden Bearbeitung auch auf die CF Kommunikation aus. Button drücken oder gar Slider bewegen wenn grad ein Polling der Wärmepumpe läuft bringt da nicht viel)

          Grüße
          Matthias

          Kommentar


            #80
            Hallo Michael,

            Zitat von enertegus Beitrag anzeigen
            Wenn ein htime nicht ausgelöst wird, ist dies so, dass der EIbPC mehr als 1 Sekunde gehindert wurde, die Logik auszuführen. ... Der Code könnte natürlich auch eine Art Selbstschleife generieren, ggf. abhängig, was von der WP an Daten zurückkommt.
            Sowas kann passieren?
            Ich dachte man kann keine Schleifen programmieren?
            IIRC führt doch der EibPC aller 100ms das Programm aus.

            (Wie) Kann es sein, dass Code, der z.B. RS232-Buffer abfragt, so viel Zeit zum Verabeiten benötigt dass der nächste Zyklus erst Sekunden später durchlaufen wird? Ich dachte das wäre asynchron.
            Es kann ja nicht sein dass er "riesige Datenmengen" aus dem Buffer abholt die Verarbeitet werden müssen was so lange dauert. Bislang, so dachte ich, funktioniert das eh in Chunks. Oder?

            Den Event-Speicher werde ich heute Abend mal auslesen.

            Grüße
            Matthias

            Kommentar


              #81
              Hallo Matthias,

              Zitat von Matthias Beitrag anzeigen
              Funktioniert das nach dem Prinzip (wie ich erwarten würde) alte Steuerung raus, neue Steuerung rein und fertig? (also Steckerbelegung der Steuerkabel sind identisch?)
              Grundsätzlich ist dies so. Hier sollte aber sehr viel Sorgfalt an den Tag gelegt werden. Ich habe erst jedes Kabel mit einem Beschriftungsaufkleber versehen, dann die Steuerung ausgebaut. Dabei war das kniffligste die Platinenhalter (Plastikspreizklammern) zu lösen und auszubauen (die Dinger sind hartnäckig). Der Einbau der neuen Platine und die Inbetriebnahme war keine große Sache (vor dem Umbau natürlich zwingend Fotos/Screenshots von den Einstellungen machen).

              Zitat von Matthias Beitrag anzeigen
              Ich habe nicht wirklich komplexen Code oder Makros im EibPC.
              Bedarf es auch nicht zwingend. Ich habe mir vor kurzem einen Bug eingebaut, wo in zwei Makros Variablen gegeneinander vertauscht waren. Im Prinzip sagt das eine Makros Ein während das andere Aus sagte. Da schaukelt sich dann in Kombination mit Timern schnell etwas hoch.

              Aus diesem Grund empfehle ich immer erst das Problem systematisch einzugrenzen. Dies geht nur durch isolieren einzelner Code Abschnitte.

              Viele Grüße

              Michael

              Kommentar


                #82
                Zitat von bmx Beitrag anzeigen
                Die RS232 Schnittstelle ist ein Kandidat um den EibPC zu belasten. Ich habe ähnliche Probleme bei meinem HA7E Makro das auch via RS232 abfragt mit verzögerten Reaktionen. Bin dabei, das mit der aktuellen Beta noch mal zu isolieren ob es dafür tiefer liegende Gründe geben könnte
                Hallo Bernd,

                seit den Problemen beim letzten Firmware Upgrade bin ich auf das Enertex 1-Wire Makro geschwenkt und kann seitdem keine Probleme feststellen.

                Insofern bin ich mir nicht sicher, ob es an der RS232 Funktion oder an dem Makro liegt.

                Ich würde gerne im Zusammenhang mit den Möglichkeiten der Beta wieder auf Dein Makro schwenken, da ich dann mehr als 20 Sensoren betreiben könnte.

                Wenn Du Unterstützung beim Testen benötigst melde Dich.

                Viele Grüße

                Michael

                Kommentar


                  #83
                  Zitat von Matthias Beitrag anzeigen
                  Hallo Michael,
                  Sowas kann passieren?
                  Ok, ich muss mich korrigieren: Natürlich hat unsere Software überhaupt nie nicht irgendeinen Touch von einer nicht ordnungsgemäßen Funktion - egal ob nun der Programmierer was falsch macht oder nicht.
                  Ich dachte man kann keine Schleifen programmieren?
                  IIRC führt doch der EibPC aller 100ms das Programm aus.
                  Eher häufiger, siehe Performance-Einstellung im EibStudio.
                  (Wie) Kann es sein, dass Code, der z.B. RS232-Buffer abfragt, so viel Zeit zum Verabeiten benötigt dass der nächste Zyklus erst Sekunden später durchlaufen wird? Ich dachte das wäre asynchron.
                  ist es auch. Der RS232 Treiber puffert da die Daten von "alleine" und die FW holt die Daten einfach ab. Im Unterschied zum Betrieb mit FT12 wird die RS232 im Datenmodus mit geringer Priorität betrieben. Daher sollte der Kernel auch nicht ins Stocken kommen.
                  Die Beobachtung vom bmx möchte ich da mal außen vor lassen. Sein Makro hat eine detailierte Fehlerbehandlung und - man korrigiere mich - frägt da nach, wenn was nicht passt und dann kann die Systemlast schon mal ansteigen. "Unser" HA7E Makro verursacht da keine Probleme, ist da aber auch nicht so genau, wenn mal ein Wert ausbleibt.
                  Den Event-Speicher werde ich heute Abend mal auslesen.
                  Ja, das würde ich mal als erstes vorschlagen.
                  offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                  Enertex Produkte kaufen

                  Kommentar


                    #84
                    Zitat von enertegus Beitrag anzeigen
                    Ja, das würde ich mal als erstes vorschlagen.
                    Habe den Ereignis Speicher auslesen können.
                    Gestern war der 29.10. - im besagten Zeitraum um 19:15:00 wurde nichts bemerkt:

                    Code:
                    % Event: 0:ERR_EIBNET_IP_TIMEOUT_SEARCH@2013-10-24 00:12:06
                    % Event: 0:ERR_EIBNET_IP_TIMEOUT_CONNECTIONSTATE_REQUEST@2013-10-29 23:52:29
                    % Event: 0:ERR_EIBNET_IP_TUNNELLING_TIMEOUT_0@2013-10-30 00:38:18
                    % Event: 0:ERR_EIBNET_IP_TUNNELLING_TIMEOUT_1@2013-10-30 00:38:19
                    % Event: 0:ERR_EIBNET_IP_TIMEOUT_SEARCH@2013-10-30 00:38:23
                    Die Meldungen stören mich jetzt doch etwas - sollte ich mal vom Enertex IP-Router ein Software Update machen?

                    Grüße
                    Matthias

                    Kommentar


                      #85
                      Zitat von Matthias Beitrag anzeigen
                      Die Meldungen stören mich jetzt doch etwas - sollte ich mal vom Enertex IP-Router ein Software Update machen?
                      ja klar.
                      offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                      Enertex Produkte kaufen

                      Kommentar


                        #86
                        Hallo,

                        ich muss das Thema noch mal nach oben ziehen, da der WAF hier grad wieder zu sinken beginnt und ein Update auf V3 keine Besserung gebracht hat.

                        Habe heute mal gemessen wie groß die Verzögerung ist. 20s ist der EibPC beschäftigt und machts nichts (außer die Wärmepumpe per RS232 abzufragen):

                        Code:
                        Zeit    Quelladr    Zieladr    Ziel    Rout    DPT    Typ    Daten
                        19:53:30.189    15.15.12    15/1/0    Zeit    6    3 byte    Write    73 35 2A
                        19:53:31.220    15.15.12    15/1/0    Zeit    6    3 byte    Write    73 35 2B
                        19:53:32.236    15.15.12    15/1/0    Zeit    6    3 byte    Write    73 35 2C
                        19:53:33.251    15.15.12    15/1/0    Zeit    6    3 byte    Write    73 35 2D
                        
                        19:53:54.079    15.15.12    1/6/7    LCD_Beleuchtung    6    1 bit    Write    $01
                        19:53:54.376    15.15.12    15/1/0    Zeit    6    3 byte    Write    73 36 06
                        19:53:55.282    15.15.12    15/1/0    Zeit    6    3 byte    Write    73 36 07
                        Wie hier zu sehen schickt der EibPC per cycle(0,1) jede Sekunde die Uhrzeit auf den Bus. Alerdings ist zwischen 19:53:34 und 19:53:53 Sendepause!

                        Was nun? Wie kann man dem Fehler am Besten auf die Schliche kommen?

                        Grüße
                        Matthias

                        Kommentar


                          #87
                          Debugging

                          Hallo zusammen,

                          habe heute Abend versucht etwas Debugging zu betreiben.
                          Jetzt bin ich am Ende meines Lateins.

                          Für mich sieht das nach einem Bug in der Firmware aus!

                          Was habe ich getan?

                          Ein Mininmalprogramm erstellt, welches das Makro einbindet und zusätzlich noch jede Sekunde ein Telegramm mit der Uhrzeit auf den Bus schickt:

                          [highlight=epc]
                          [RS232]
                          // RS232-Konfiguration: Baudrate, Datenbits, Stoppbits, Parität, Flusssteuerung
                          57600
                          8
                          1
                          0
                          2

                          [MacroLibs]
                          //Makro-Bibliotheken
                          ./MakroLibs/Alpha_Innotec_WP_v2.lib

                          [Macros]
                          Luxtronik1(1,AUS)


                          [ETS-ESF]
                          // Die aus der ETS3 exportierte ESF-Datei
                          ./Haus.esf

                          [WebServer]

                          [InitGA]


                          [EibPC]
                          myDEBUG=EIN
                          if myDEBUG==EIN and cycle(0,1) then write("Zeit-15/1/0",settime()) endif


                          // Reaktion auf Waermepumpe

                          if change(WP_Temp_Aussentemperatur) or change(WP_Temp_Warmwasser_Ist_Temperatur) then {
                          write("LCD_Beleuchtung_BadOG-1/6/7",EIN);
                          write("Text_Bad_OG-1/6/6",convert(WP_Temp_Aussentemperatur,$$c14)+$ / $c14+convert(WP_Temp_Warmwasser_Ist_Temperatur,$$c 14))
                          } endif
                          [/highlight]

                          Dann in der Makro-Bibliothek Code eingebaut, welcher an entsprechenden Zeilen ein Telegramm mit der Zeilennummer auf den Bus schreibt:

                          [highlight=epc]
                          //
                          // -----------------------------------------------------------------------------------------------------------
                          // RS232 Gateway für Alpha Innotec Wärmepumpen mit Luxtronik 1.0 Steuerung (bis Baujahr 2008)
                          // -----------------------------------------------------------------------------------------------------------
                          // - die Anbindung der Wärmepumpe erfolgt über ein serielles 1:1 Kabel (Pin 2&3 Data, Pin 5 GND)
                          // - die Wärmepumpe muß im Menüpunkt Einstellungen, Datenzugang auf Standard stehen (PIN 9445)
                          // - Schnittstellen-Parameter: 57600, 8, N, 1, Xon/Xoff
                          // - der Aufruf des Makros erfolgt aus dem EibPC so: Luxtronik1(5,AUS)
                          // - 5 steht für die Abfrageperiode in Minuten und AUS bedeutet keine Comfort-Platine verbaut
                          // - sofern in der Wärmepumpe eine Comfort-Platine verbaut ist, erfolgt der Aufruf so: Luxtronik1(5,EIN)
                          // - die Comfort-Platine wird in der Regel verbaut, wenn Solarkollektoren oder ein Schwimmbad vorhanden ist
                          //
                          // copyright Michael Schriefers, 2011
                          //
                          // Rechtlicher Hinweis
                          // Die private Nutzung und Weitergabe der angebotenen Software erfolgt ausdrücklich nur unter den folgenden
                          // Bedingungen, die der Nutzer mit der Ingebrauchsnahme des Programms anerkennt:
                          // a) Der Autor der Software gibt keine Garantien irgendeiner Art, weder ausdrücklich noch implizit, zur
                          // Verwendung der unentgeltlich zur Verfügung gestellten Software für irgendeinen Zweck.
                          // b) Unter keinen Umständen ist der Autor haftbar für jedwede Schäden, Folgeschäden, einschließlich aller
                          // entgangenen Gewinne und Vermögensverluste oder anderer mittelbarer oder unmittelbarer Schäden, die durch
                          // den Gebrauch oder die Nichtverwendbarkeit der Software und seiner begleitenden Dokumentation entstehen.
                          // c) Eine über den eigenen Gebrauch hinausgehende kommerzielle Nutzung der Software bzw. von Elementen dieser
                          // Software ist nicht zulässig.
                          //
                          //
                          :begin Luxtronik1(Abfrageperiode,Comfortplatine)
                          :info $Abfrage des Anlagenstatus einer Alpha Innotec Wärmepumpe mit Luxtronik 1.0 Steuerung über RS232$ \\
                          $Eingabe der Abfrageperiode in Minuten (z.B. 5) und ob Comfort-Platine vorhanden ist (EIN oder AUS) $
                          :shortinfo $Alpha Innotec Wärmepumpen Gateway (Luxtronik 1.0)$

                          RS232_Statusabfrage=AUS
                          RS232_Comfortabfrage=AUS
                          Rawdata1=$$
                          Rawdata2=$$
                          Buffer=$$
                          BufferComfort=$$
                          Len1=0u16
                          Len2=0u16
                          StartPos=0u16
                          EndPos=0u16
                          Data_Temperatur=$$
                          Data_Eingaenge=$$
                          Data_Ausgaenge=$$
                          Data_Ablaufzeiten=$$
                          Data_Betriebsstunden=$$
                          Data_Fehler1=$$
                          Data_Fehler2=$$
                          Data_Fehler3=$$
                          Data_Fehler4=$$
                          Data_Fehler5=$$
                          Data_Abschaltungen1=$$
                          Data_Abschaltungen2=$$
                          Data_Abschaltungen3=$$
                          Data_Abschaltungen4=$$
                          Data_Abschaltungen5=$$
                          Data_Anlagenstatus=$$
                          Data_Comfortplatine=$$

                          // Anlagenstatus über RS232 in periodischem Abstand abfragen
                          if cycle(Abfrageperiode,0) then {
                          Rawdata1=$$;
                          Buffer=$$;
                          Len1=0u16;
                          RS232_Statusabfrage=EIN;

                          write('1/6/6'c14,$line 67$c14);

                          sendrs232($1800$,0x0d,0x0a)
                          } endif

                          // Zeitfenster für RS232 Lesevorgang (2 Sekunden)
                          if after(RS232_Statusabfrage==EIN,2000u64) then {

                          write('1/6/6'c14,$line 75$c14);

                          RS232_Statusabfrage=AUS
                          } endif

                          // Empfangen des Anlagenstatus über RS232 und füllen des Buffers
                          if RS232_Statusabfrage==EIN and event(readrs232(Rawdata1,Len1)) then {

                          write('1/6/6'c14,$line 83$c14);

                          Buffer=split(Rawdata1,0u16,Len1);

                          write('1/6/6'c14,$line 87$c14)


                          } endif

                          // Status der Comfortplatine über RS232 abfragen (sofern vorhanden)
                          if Comfortplatine==EIN and after(RS232_Statusabfrage==EIN,3000u64) then {
                          Rawdata2=$$;
                          BufferComfort=$$;
                          Len2=0u16;
                          RS232_Comfortabfrage=EIN;

                          write('1/6/6'c14,$line 99$c14);

                          sendrs232($6100$,0x0d,0x0a)
                          } endif

                          // Zeitfenster für RS232 Lesevorgang Comfort-Platine (2 Sekunden)
                          if after(RS232_Comfortabfrage==EIN,2000u64) then {
                          RS232_Comfortabfrage=AUS
                          } endif

                          // Empfangen des Status der Comfort-Platine über RS232 und füllen des Buffers
                          if RS232_Comfortabfrage==EIN and event(readrs232(Rawdata2,Len2)) then {

                          write('1/6/6'c14,$line 112$c14);

                          BufferComfort=split(Rawdata2,0u16,Len2);

                          write('1/6/6'c14,$line 116$c14)


                          } endif

                          // Parsen der einzelnen Informationsblöcke der Wärmepumpendaten
                          if delay(change(Buffer),2000u64) and size(Buffer)>=10u16 then {

                          write('1/6/6'c14,$line 124$c14);


                          /* Temperaturdaten */;
                          StartPos=0u16;
                          EndPos=0u16;
                          StartPos=find(Buffer,$1100;12;$,0u16)+size($1100;1 2;$);
                          EndPos=find(Buffer,$1200;6;$,0u16)-2u16;
                          Data_Temperatur=split(Buffer,StartPos,EndPos);
                          Data_Temperatur=Data_Temperatur+$;$;

                          write('1/6/6'c14,convert(Data_Temperatur,$$c14));

                          /* Status der Eingänge */;
                          StartPos=find(Buffer,$1200;6;$,0u16)+size($1200;6; $);
                          EndPos=find(Buffer,$1300;13;$,0u16)-2u16;
                          Data_Eingaenge=split(Buffer,StartPos,EndPos);
                          Data_Eingaenge=Data_Eingaenge+$;$;
                          /* Status der Ausgänge */;
                          StartPos=find(Buffer,$1300;13;$,0u16)+size($1300;1 3;$);
                          EndPos=find(Buffer,$1400;29;$,0u16)-2u16;
                          Data_Ausgaenge=split(Buffer,StartPos,EndPos);
                          Data_Ausgaenge=Data_Ausgaenge+$;$;
                          /* Ablaufzeiten */;
                          StartPos=find(Buffer,$1400;29;$,0u16)+size($1400;2 9;$);
                          EndPos=find(Buffer,$1450;9;$,0u16)-2u16;
                          Data_Ablaufzeiten=split(Buffer,StartPos,EndPos);
                          Data_Ablaufzeiten=Data_Ablaufzeiten+$;$;
                          /* Betriebsstunden */;
                          StartPos=find(Buffer,$1450;9;$,0u16)+size($1450;9; $);
                          EndPos=find(Buffer,$1500;5$,0u16)-2u16;
                          Data_Betriebsstunden=split(Buffer,StartPos,EndPos) ;
                          Data_Betriebsstunden=Data_Betriebsstunden+$;$;
                          /* Fehlercodes */;
                          StartPos=find(Buffer,$1500;1500;6;$,0u16)+size($15 00;1500;6;$);
                          EndPos=find(Buffer,$ 1500;1501;6$,0u16)-2u16;
                          Data_Fehler1=split(Buffer,StartPos,EndPos);
                          Data_Fehler1=Data_Fehler1+$;$;
                          StartPos=find(Buffer,$1500;1501;6;$,0u16)+size($15 00;1501;6;$);
                          EndPos=find(Buffer,$ 1500;1502;6$,0u16)-2u16;
                          Data_Fehler2=split(Buffer,StartPos,EndPos);
                          Data_Fehler2=Data_Fehler2+$;$;
                          StartPos=find(Buffer,$1500;1502;6;$,0u16)+size($15 00;1502;6;$);
                          EndPos=find(Buffer,$ 1500;1503;6$,0u16)-2u16;
                          Data_Fehler3=split(Buffer,StartPos,EndPos);
                          Data_Fehler3=Data_Fehler3+$;$;
                          StartPos=find(Buffer,$1500;1503;6;$,0u16)+size($15 00;1503;6;$);
                          EndPos=find(Buffer,$ 1500;1504;6$,0u16)-2u16;
                          Data_Fehler4=split(Buffer,StartPos,EndPos);
                          Data_Fehler4=Data_Fehler4+$;$;
                          StartPos=find(Buffer,$1500;1504;6;$,0u16)+size($15 00;1504;6;$);
                          EndPos=find(Buffer,$ 1500;5$,0u16)-2u16;
                          Data_Fehler5=split(Buffer,StartPos,EndPos);
                          Data_Fehler5=Data_Fehler5+$;$;
                          /* Abschaltungen */;
                          StartPos=find(Buffer,$1600;1600;6;$,0u16)+size($16 00;1600;6;$);
                          EndPos=find(Buffer,$1600;1601;6$,0u16)-2u16;
                          Data_Abschaltungen1=split(Buffer,StartPos,EndPos);
                          Data_Abschaltungen1=Data_Abschaltungen1+$;$;
                          StartPos=find(Buffer,$1600;1601;6;$,0u16)+size($16 00;1601;6;$);
                          EndPos=find(Buffer,$1600;1602;6$,0u16)-2u16;
                          Data_Abschaltungen2=split(Buffer,StartPos,EndPos);
                          Data_Abschaltungen2=Data_Abschaltungen2+$;$;
                          StartPos=find(Buffer,$1600;1602;6;$,0u16)+size($16 00;1602;6;$);
                          EndPos=find(Buffer,$1600;1603;6$,0u16)-2u16;
                          Data_Abschaltungen3=split(Buffer,StartPos,EndPos);
                          Data_Abschaltungen3=Data_Abschaltungen3+$;$;
                          StartPos=find(Buffer,$1600;1603;6;$,0u16)+size($16 00;1603;6;$);
                          EndPos=find(Buffer,$1600;1604;6$,0u16)-2u16;
                          Data_Abschaltungen4=split(Buffer,StartPos,EndPos);
                          Data_Abschaltungen4=Data_Abschaltungen4+$;$;
                          StartPos=find(Buffer,$1600;1604;6;$,0u16)+size($16 00;1604;6;$);
                          EndPos=find(Buffer,$1600;1605;6$,0u16)-2u16;
                          Data_Abschaltungen5=split(Buffer,StartPos,EndPos);
                          Data_Abschaltungen5=Data_Abschaltungen5+$;$;
                          /* Anlagenstatus */;
                          StartPos=find(Buffer,$1700;12;$,0u16)+size($1700;1 2;$);
                          EndPos=find(Buffer,$1800;8;$,0u16)-2u16;
                          Data_Anlagenstatus=split(Buffer,StartPos,EndPos);
                          Data_Anlagenstatus=Data_Anlagenstatus+$;$;

                          write('1/6/6'c14,$line 205$c14);

                          } endif

                          // Parsen der einzelnen Informationsblöcke der Comfort-Platinen Daten
                          if delay(change(BufferComfort),2000u64) and size(BufferComfort)>=10u16 then {

                          write('1/6/6'c14,$line 212$c14);

                          /* Status ComfortPlatine */;
                          StartPos=0u16;
                          EndPos=0u16;
                          StartPos=find(BufferComfort,$6100;4;$,0u16)+size($ 6100;4;$);
                          EndPos=Len2;
                          Data_Comfortplatine=split(BufferComfort,StartPos,E ndPos);
                          Data_Comfortplatine=Data_Comfortplatine+$;$;

                          write('1/6/6'c14,$line 222$c14);

                          } endif

                          // Einzelwerte zu den Temperaturen definieren
                          WP_Temp_Heizkreis_Ist_Vorlauftemperatur=0.0
                          WP_Temp_Heizkreis_Ist_Ruecklauftemperatur=0.0
                          WP_Temp_Heizkreis_Soll_Ruecklauftemperatur=0.0
                          WP_Temp_Heissgastemperatur=0.0
                          WP_Temp_Aussentemperatur=0.0
                          WP_Temp_Warmwasser_Ist_Temperatur=0.0
                          WP_Temp_Brauchwarmwasser_Soll_Temperatur=0.0
                          WP_Temp_Waermequellen_Eintrittstemperatur=0.0
                          WP_Temp_Waermequellen_Austrittstemperatur=0.0
                          WP_Temp_Mischkreis_1_Ist_Vorlauftemperatur=0.0
                          WP_Temp_Mischkreis_1_Soll_Vorlauftemperatur=0.0
                          WP_Temp_Raumstation=0.0

                          // Parsen der einzelnen Temperaturwerte
                          if change(Data_Temperatur) and Data_Temperatur!=$$ then {

                          write('1/6/6'c14,$line 243$c14);


                          /* Parsen von Heizkreis_Ist_Vorlauftemperatur */;
                          StartPos=0u16;
                          EndPos=find(Data_Temperatur,$;$,0u16)-1u16;
                          WP_Temp_Heizkreis_Ist_Vorlauftemperatur=convert(sp lit(Data_Temperatur,StartPos,EndPos),0.0)*0.1;
                          /* Parsen von Heizkreis_Ist_Ruecklauftemperatur */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Temperatur,$;$,1u16)-1u16;
                          WP_Temp_Heizkreis_Ist_Ruecklauftemperatur=convert( split(Data_Temperatur,StartPos,EndPos),0.0)*0.1;
                          /* Parsen von Heizkreis_Soll_Ruecklauftemperatur */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Temperatur,$;$,2u16)-1u16;
                          WP_Temp_Heizkreis_Soll_Ruecklauftemperatur=convert (split(Data_Temperatur,StartPos,EndPos),0.0)*0.1;
                          /* Parsen von Heissgastemperatur */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Temperatur,$;$,3u16)-1u16;
                          WP_Temp_Heissgastemperatur=convert(split(Data_Temp eratur,StartPos,EndPos),0.0)*0.1;
                          /* Parsen von Aussentemperatur */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Temperatur,$;$,4u16)-1u16;
                          WP_Temp_Aussentemperatur=convert(split(Data_Temper atur,StartPos,EndPos),0.0)*0.1;
                          /* Parsen von Brauchwarmwasser_Ist_Temperatur */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Temperatur,$;$,5u16)-1u16;
                          WP_Temp_Warmwasser_Ist_Temperatur=convert(split(Da ta_Temperatur,StartPos,EndPos),0.0)*0.1;
                          /* Parsen von Brauchwarmwasser_Soll_Temperatur */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Temperatur,$;$,6u16)-1u16;
                          WP_Temp_Brauchwarmwasser_Soll_Temperatur=convert(s plit(Data_Temperatur,StartPos,EndPos),0.0)*0.1;
                          /* Parsen von Waermequellen_Eintrittstemperatur */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Temperatur,$;$,7u16)-1u16;
                          WP_Temp_Waermequellen_Eintrittstemperatur=convert( split(Data_Temperatur,StartPos,EndPos),0.0)*0.1;
                          /* Parsen von Waermequellen_Austrittstemperatur */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Temperatur,$;$,8u16)-1u16;
                          WP_Temp_Waermequellen_Austrittstemperatur=convert( split(Data_Temperatur,StartPos,EndPos),0.0)*0.1;
                          /* Parsen von Mischkreis_1_Ist_Vorlauftemperatur */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Temperatur,$;$,9u16)-1u16;
                          WP_Temp_Mischkreis_1_Ist_Vorlauftemperatur=convert (split(Data_Temperatur,StartPos,EndPos),0.0)*0.1;
                          /* Parsen von Mischkreis_1_Soll_Vorlauftemperatur */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Temperatur,$;$,10u16)-1u16;
                          WP_Temp_Mischkreis_1_Soll_Vorlauftemperatur=conver t(split(Data_Temperatur,StartPos,EndPos),0.0)*0.1;
                          /* Parsen von Raumstation */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Temperatur,$;$,11u16)-1u16;
                          WP_Temp_Raumstation=convert(split(Data_Temperatur, StartPos,EndPos),0.0)*0.1;

                          write('1/6/6'c14,$line 295$c14);

                          } endif

                          // Einzelwerte zu den Wärmepumpeneingängen definieren
                          WP_Eingaenge_Abtau_Soledruck_Durchfluss=0b01
                          WP_Eingaenge_Sperrzeit_vom_EVU=0b01
                          WP_Eingaenge_Hochdruckpressostat=0b01
                          WP_Eingaenge_Motorschutz=0b01
                          WP_Eingaenge_Niederdruckpressostat=0b01
                          WP_Eingaenge_Anschluss_einer_Fremdstromanode=0b01

                          // Parsen der einzelnen Wärmepumpeneingänge
                          if change(Data_Eingaenge) and Data_Eingaenge!=$$ then {

                          write('1/6/6'c14,$line 310$c14);

                          /* Parsen von Abtau_Soledruck_Durchfluss */;
                          StartPos=0u16;
                          EndPos=find(Data_Eingaenge,$;$,0u16)-1u16;
                          WP_Eingaenge_Abtau_Soledruck_Durchfluss=convert(sp lit(Data_Eingaenge,StartPos,EndPos),0b01);
                          /* Parsen von Sperrzeit_vom_EVU */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Eingaenge,$;$,1u16)-1u16;
                          WP_Eingaenge_Sperrzeit_vom_EVU=convert(split(Data_ Eingaenge,StartPos,EndPos),0b01);
                          /* Parsen von Hochdruckpressostat */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Eingaenge,$;$,2u16)-1u16;
                          WP_Eingaenge_Hochdruckpressostat=convert(split(Dat a_Eingaenge,StartPos,EndPos),0b01);
                          /* Parsen von Motorschutz */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Eingaenge,$;$,3u16)-1u16;
                          WP_Eingaenge_Motorschutz=convert(split(Data_Eingae nge,StartPos,EndPos),0b01);
                          /* Parsen von Niederdruckpressostat */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Eingaenge,$;$,4u16)-1u16;
                          WP_Eingaenge_Niederdruckpressostat=convert(split(D ata_Eingaenge,StartPos,EndPos),0b01);
                          /* Parsen von Anschluss_einer_Fremdstromanode */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Eingaenge,$;$,5u16)-1u16;
                          WP_Eingaenge_Anschluss_einer_Fremdstromanode=conve rt(split(Data_Eingaenge,StartPos,EndPos),0b01);

                          write('1/6/6'c14,$line 337$c14);

                          } endif

                          // Einzelwerte zu den Wärmepumpenausgängen definieren
                          WP_Ausgaenge_Abtauventil=0b01
                          WP_Ausgaenge_Brauchwarmwasserumwaelzpumpe=0b01
                          WP_Ausgaenge_Fussbodenheizungsumwaelzpumpe=0b01
                          WP_Ausgaenge_Heizungsumwaelzpumpe=0b01
                          WP_Ausgaenge_Mischer_1_Auf=0b01
                          WP_Ausgaenge_Mischer_1_Zu=0b01
                          WP_Ausgaenge_Ventilation_des_Waermepumpengehaeuses =0b01
                          WP_Ausgaenge_Ventilator_Brunnen_oder_Soleumwaelzpu mpe=0b01
                          WP_Ausgaenge_Verdichter_1_in_Waermepumpe=0b01
                          WP_Ausgaenge_Verdichter_2_in_Waermepumpe=0b01
                          WP_Ausgaenge_Zusatzumwaelzpumpe_Zirkulationspumpe= 0b01
                          WP_Ausgaenge_Zweiter_Waermeerzeuger_1=0b01
                          WP_Ausgaenge_Zweiter_Waermeerzeuger_2_Sammelstoeru ng=0b01

                          // Parsen der einzelnen Wärmepumpeneausgänge
                          if change(Data_Ausgaenge) and Data_Ausgaenge!=$$ then {

                          write('1/6/6'c14,$line 359$c14);


                          /* Parsen von Abtauventil */;
                          StartPos=0u16;
                          EndPos=find(Data_Ausgaenge,$;$,0u16)-1u16;
                          WP_Ausgaenge_Abtauventil=convert(split(Data_Ausgae nge,StartPos,EndPos),0b01);
                          /* Parsen von Brauchwarmwasserumwaelzpumpe */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ausgaenge,$;$,1u16)-1u16;
                          WP_Ausgaenge_Brauchwarmwasserumwaelzpumpe=convert( split(Data_Ausgaenge,StartPos,EndPos),0b01);
                          /* Parsen von Fussbodenheizungsumwaelzpumpe */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ausgaenge,$;$,2u16)-1u16;
                          WP_Ausgaenge_Fussbodenheizungsumwaelzpumpe=convert (split(Data_Ausgaenge,StartPos,EndPos),0b01);
                          /* Parsen von Heizungsumwaelzpumpe */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ausgaenge,$;$,3u16)-1u16;
                          WP_Ausgaenge_Heizungsumwaelzpumpe=convert(split(Da ta_Ausgaenge,StartPos,EndPos),0b01);
                          /* Parsen von Mischer_1_Auf */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ausgaenge,$;$,4u16)-1u16;
                          WP_Ausgaenge_Mischer_1_Auf=convert(split(Data_Ausg aenge,StartPos,EndPos),0b01);
                          /* Parsen von Mischer_1_Zu */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ausgaenge,$;$,5u16)-1u16;
                          WP_Ausgaenge_Mischer_1_Zu=convert(split(Data_Ausga enge,StartPos,EndPos),0b01);
                          /* Parsen von Ventilation_des_Waermepumpengehaeuses */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ausgaenge,$;$,6u16)-1u16;
                          WP_Ausgaenge_Ventilation_des_Waermepumpengehaeuses =convert(split(Data_Ausgaenge,StartPos,EndPos),0b0 1);
                          /* Parsen von Ventilator_Brunnen_oder_Soleumwaelzpumpe */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ausgaenge,$;$,7u16)-1u16;
                          WP_Ausgaenge_Ventilator_Brunnen_oder_Soleumwaelzpu mpe=convert(split(Data_Ausgaenge,StartPos,EndPos), 0b01);
                          /* Parsen von Verdichter_1_in_Waermepumpe */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ausgaenge,$;$,8u16)-1u16;
                          WP_Ausgaenge_Verdichter_1_in_Waermepumpe=convert(s plit(Data_Ausgaenge,StartPos,EndPos),0b01);
                          /* Parsen von Verdichter_2_in_Waermepumpe */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ausgaenge,$;$,9u16)-1u16;
                          WP_Ausgaenge_Verdichter_2_in_Waermepumpe=convert(s plit(Data_Ausgaenge,StartPos,EndPos),0b01);
                          /* Parsen von Zusatzumwaelzpumpe_Zirkulationspumpe */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ausgaenge,$;$,10u16)-1u16;
                          WP_Ausgaenge_Zusatzumwaelzpumpe_Zirkulationspumpe= convert(split(Data_Ausgaenge,StartPos,EndPos),0b01 );
                          /* Parsen von Zweiter_Waermeerzeuger_1 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ausgaenge,$;$,11u16)-1u16;
                          WP_Ausgaenge_Zweiter_Waermeerzeuger_1=convert(spli t(Data_Ausgaenge,StartPos,EndPos),0b01);
                          /* Parsen von Zweiter_Waermeerzeuger_2_Sammelstoerung */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ausgaenge,$;$,12u16)-1u16;
                          WP_Ausgaenge_Zweiter_Waermeerzeuger_2_Sammelstoeru ng=convert(split(Data_Ausgaenge,StartPos,EndPos),0 b01);

                          write('1/6/6'c14,$line 415$c14);

                          } endif

                          // Einzelwerte zu den Ablaufzeiten definieren
                          WP_Ablaufzeiten_Waermepumpe=$$
                          WP_Ablaufzeiten_Zweiter_Waermeerzeuger_1=$$
                          WP_Ablaufzeiten_Zweiter_Waermeerzeuger_2=$$
                          WP_Ablaufzeiten_Netzeinschaltverzoegerung=$$
                          WP_Ablaufzeiten_Standzeit_Schaltspielsperre=$$
                          WP_Ablaufzeiten_Einschaltverzoegerung_Schaltspiels perre=$$
                          WP_Ablaufzeiten_Verdichter_Standzeit=$$
                          WP_Ablaufzeiten_Heizungsregler_Mehr_Zeit=$$
                          WP_Ablaufzeiten_Heizungsregler_Weniger_Zeit=$$
                          WP_Ablaufzeiten_Thermische_Desinfektion=$$
                          WP_Ablaufzeiten_Sperre_Brauchwarmwasser=$$
                          Ablaufstunde=$$
                          Ablaufminute=$$
                          Ablaufsekunde=$$

                          // Parsen der einzelnen Ablaufzeiten
                          if change(Data_Ablaufzeiten) and Data_Ablaufzeiten!=$$ then {

                          write('1/6/6'c14,$line 438$c14);

                          /* Parsen von Waermepumpe */;
                          /* Ablaufstunde */;
                          StartPos=0u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,0u16)-1u16;
                          Ablaufstunde=split(Data_Ablaufzeiten,StartPos,EndP os);
                          /* Ablaufminute */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,1u16)-1u16;
                          Ablaufminute=split(Data_Ablaufzeiten,StartPos,EndP os);
                          /* Ablaufsekunde */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,2u16)-1u16;
                          Ablaufsekunde=split(Data_Ablaufzeiten,StartPos,End Pos);
                          WP_Ablaufzeiten_Waermepumpe=Ablaufstunde+$:$+Ablau fminute+$:$+Ablaufsekunde;
                          /* Parsen von Zweiter_Waermeerzeuger_1 */;
                          /* Ablaufstunde */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,3u16)-1u16;
                          Ablaufstunde=split(Data_Ablaufzeiten,StartPos,EndP os);
                          /* Ablaufminute */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,4u16)-1u16;
                          Ablaufminute=split(Data_Ablaufzeiten,StartPos,EndP os);
                          /* Ablaufsekunde */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,5u16)-1u16;
                          Ablaufsekunde=split(Data_Ablaufzeiten,StartPos,End Pos);
                          WP_Ablaufzeiten_Zweiter_Waermeerzeuger_1=Ablaufstu nde+$:$+Ablaufminute+$:$+Ablaufsekunde;
                          /* Parsen von Zweiter_Waermeerzeuger_2 */;
                          /* Ablaufstunde */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,6u16)-1u16;
                          Ablaufstunde=split(Data_Ablaufzeiten,StartPos,EndP os);
                          /* Ablaufminute */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,7u16)-1u16;
                          Ablaufminute=split(Data_Ablaufzeiten,StartPos,EndP os);
                          /* Ablaufsekunde */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,8u16)-1u16;
                          Ablaufsekunde=split(Data_Ablaufzeiten,StartPos,End Pos);
                          WP_Ablaufzeiten_Zweiter_Waermeerzeuger_2=Ablaufstu nde+$:$+Ablaufminute+$:$+Ablaufsekunde;
                          /* Parsen von Netzeinschaltverzoegerung */;
                          /* Ablaufstunde */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,9u16)-1u16;
                          Ablaufstunde=split(Data_Ablaufzeiten,StartPos,EndP os);
                          WP_Ablaufzeiten_Netzeinschaltverzoegerung=Ablaufst unde;
                          /* Parsen von Standzeit_Schaltspielsperre */;
                          /* Ablaufstunde */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,10u16)-1u16;
                          Ablaufstunde=split(Data_Ablaufzeiten,StartPos,EndP os);
                          /* Ablaufminute */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,11u16)-1u16;
                          Ablaufminute=split(Data_Ablaufzeiten,StartPos,EndP os);
                          WP_Ablaufzeiten_Standzeit_Schaltspielsperre=Ablauf stunde+$:$+Ablaufminute;
                          /* Parsen von Einschaltverzoegerung_Schaltspielsperre */;
                          /* Ablaufstunde */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,12u16)-1u16;
                          Ablaufstunde=split(Data_Ablaufzeiten,StartPos,EndP os);
                          /* Ablaufminute */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,13u16)-1u16;
                          Ablaufminute=split(Data_Ablaufzeiten,StartPos,EndP os);
                          WP_Ablaufzeiten_Einschaltverzoegerung_Schaltspiels perre=Ablaufstunde+$:$+Ablaufminute;
                          /* Parsen von Verdichter_Standzeit */;
                          /* Ablaufstunde */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,14u16)-1u16;
                          Ablaufstunde=split(Data_Ablaufzeiten,StartPos,EndP os);
                          /* Ablaufminute */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,15u16)-1u16;
                          Ablaufminute=split(Data_Ablaufzeiten,StartPos,EndP os);
                          /* Ablaufsekunde */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,16u16)-1u16;
                          Ablaufsekunde=split(Data_Ablaufzeiten,StartPos,End Pos);
                          WP_Ablaufzeiten_Verdichter_Standzeit=Ablaufstunde+ $:$+Ablaufminute+$:$+Ablaufsekunde;
                          /* Parsen von Heizungsregler_Mehr_Zeit */;
                          /* Ablaufstunde */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,17u16)-1u16;
                          Ablaufstunde=split(Data_Ablaufzeiten,StartPos,EndP os);
                          /* Ablaufminute */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,18u16)-1u16;
                          Ablaufminute=split(Data_Ablaufzeiten,StartPos,EndP os);
                          /* Ablaufsekunde */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,19u16)-1u16;
                          Ablaufsekunde=split(Data_Ablaufzeiten,StartPos,End Pos);
                          WP_Ablaufzeiten_Heizungsregler_Mehr_Zeit=Ablaufstu nde+$:$+Ablaufminute+$:$+Ablaufsekunde;
                          /* Parsen von Heizungsregler_Weniger_Zeit */;
                          /* Ablaufstunde */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,20u16)-1u16;
                          Ablaufstunde=split(Data_Ablaufzeiten,StartPos,EndP os);
                          /* Ablaufminute */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,21u16)-1u16;
                          Ablaufminute=split(Data_Ablaufzeiten,StartPos,EndP os);
                          /* Ablaufsekunde */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,22u16)-1u16;
                          WP_Ablaufzeiten_Heizungsregler_Weniger_Zeit=Ablauf stunde+$:$+Ablaufminute+$:$+Ablaufsekunde;
                          /* Parsen von Thermische_Desinfektion */;
                          /* Ablaufstunde */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,23u16)-1u16;
                          Ablaufstunde=split(Data_Ablaufzeiten,StartPos,EndP os);
                          /* Ablaufminute */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,24u16)-1u16;
                          Ablaufminute=split(Data_Ablaufzeiten,StartPos,EndP os);
                          /* Ablaufsekunde */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,25u16)-1u16;
                          Ablaufsekunde=split(Data_Ablaufzeiten,StartPos,End Pos);
                          WP_Ablaufzeiten_Thermische_Desinfektion=Ablaufstun de+$:$+Ablaufminute+$:$+Ablaufsekunde;
                          /* Parsen von Sperre_Brauchwarmwasser */;
                          /* Ablaufstunde */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,26u16)-1u16;
                          Ablaufstunde=split(Data_Ablaufzeiten,StartPos,EndP os);
                          /* Ablaufminute */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,27u16)-1u16;
                          Ablaufminute=split(Data_Ablaufzeiten,StartPos,EndP os);
                          /* Ablaufsekunde */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Ablaufzeiten,$;$,28u16)-1u16;
                          Ablaufsekunde=split(Data_Ablaufzeiten,StartPos,End Pos);
                          WP_Ablaufzeiten_Sperre_Brauchwarmwasser=Ablaufstun de+$:$+Ablaufminute+$:$+Ablaufsekunde;

                          write('1/6/6'c14,$line 578$c14);

                          } endif

                          // Einzelwerte zu den Betriebstunden definieren
                          WP_BetrStd_Betriebsstunden_Verdichter_1=0u32
                          WP_BetrStd_Impulse_Verdichter_1=0u32
                          WP_BetrStd_Durchschnittliche_Laufzeit_Verdichter_1 =0u32
                          WP_BetrStd_Betriebsstunden_Verdichter_2=0u32
                          WP_BetrStd_Impulse_Verdichter_2=0u32
                          WP_BetrStd_Durchschnittliche_Laufzeit_Verdichter_2 =0u32
                          WP_BetrStd_Betriebsstunden_Zweiter_Waermeerzeuger_ 1=0u32
                          WP_BetrStd_Betriebsstunden_Zweiter_Waermeerzeuger_ 2=0u32
                          WP_BetrStd_Betriebsstunden_Waermepumpe=0u32

                          // Parsen der einzelnen Betriebstunden
                          if change(Data_Betriebsstunden) and Data_Betriebsstunden!=$$ then {

                          write('1/6/6'c14,$line 596$c14);

                          /* Parsen von Betriebsstunden_Verdichter_1 */;
                          StartPos=0u16;
                          EndPos=find(Data_Betriebsstunden,$;$,0u16)-1u16;
                          WP_BetrStd_Betriebsstunden_Verdichter_1=convert(sp lit(Data_Betriebsstunden,StartPos,EndPos),0u32)/3600u32;
                          /* Parsen von Impulse_Verdichter_1 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Betriebsstunden,$;$,1u16)-1u16;
                          WP_BetrStd_Impulse_Verdichter_1=convert(split(Data _Betriebsstunden,StartPos,EndPos),0u32)/3600u32;
                          /* Parsen von Durchschnittliche_Laufzeit_Verdichter */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Betriebsstunden,$;$,2u16)-1u16;
                          WP_BetrStd_Durchschnittliche_Laufzeit_Verdichter_1 =convert(split(Data_Betriebsstunden,StartPos,EndPo s),0u32)/3600u32;
                          /* Parsen von Betriebsstunden_Verdichter_2 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Betriebsstunden,$;$,3u16)-1u16;
                          WP_BetrStd_Betriebsstunden_Verdichter_2=convert(sp lit(Data_Betriebsstunden,StartPos,EndPos),0u32)/3600u32;
                          /* Parsen von Impulse_Verdichter_2 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Betriebsstunden,$;$,4u16)-1u16;
                          WP_BetrStd_Impulse_Verdichter_2=convert(split(Data _Betriebsstunden,StartPos,EndPos),0u32)/3600u32;
                          /* Parsen von Durchschnittliche_Laufzeit_Verdichter_2 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Betriebsstunden,$;$,5u16)-1u16;
                          WP_BetrStd_Durchschnittliche_Laufzeit_Verdichter_2 =convert(split(Data_Betriebsstunden,StartPos,EndPo s),0u32)/3600u32;
                          /* Parsen von Betriebsstunden_Zweiter_Waermeerzeuger_1 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Betriebsstunden,$;$,6u16)-1u16;
                          WP_BetrStd_Betriebsstunden_Zweiter_Waermeerzeuger_ 1=convert(split(Data_Betriebsstunden,StartPos,EndP os),0u32)/3600u32;
                          /* Parsen von Betriebsstunden_Zweiter_Waermeerzeuger_2 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Betriebsstunden,$;$,7u16)-1u16;
                          WP_BetrStd_Betriebsstunden_Zweiter_Waermeerzeuger_ 2=convert(split(Data_Betriebsstunden,StartPos,EndP os),0u32)/3600u32;
                          /* Parsen von Betriebsstunden_Waermepumpe */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Betriebsstunden,$;$,8u16)-1u16;
                          WP_BetrStd_Betriebsstunden_Waermepumpe=convert(spl it(Data_Betriebsstunden,StartPos,EndPos),0u32)/3600u32;

                          write('1/6/6'c14,$line 635$c14);

                          } endif

                          // Einzelwerte zu den Fehlern definieren
                          WP_Fehler_1_Code=$$
                          WP_Fehler_1_Datum=$$
                          WP_Fehler_1_Uhrzeit=$$
                          WP_Fehler_2_Code=$$
                          WP_Fehler_2_Datum=$$
                          WP_Fehler_2_Uhrzeit=$$
                          WP_Fehler_3_Code=$$
                          WP_Fehler_3_Datum=$$
                          WP_Fehler_3_Uhrzeit=$$
                          WP_Fehler_4_Code=$$
                          WP_Fehler_4_Datum=$$
                          WP_Fehler_4_Uhrzeit=$$
                          WP_Fehler_5_Code=$$
                          WP_Fehler_5_Datum=$$
                          WP_Fehler_5_Uhrzeit=$$
                          Fehlertag=$$
                          Fehlermonat=$$
                          Fehlerjahr=$$
                          Fehlerstunde=$$
                          Fehlerminute=$$
                          Jahresanpassung=0u16
                          Minutenanpassung=0u16

                          // Parsen der einzelnen Fehler
                          if change(Data_Fehler1) and Data_Fehler1!=$$ then {

                          write('1/6/6'c14,$line 666$c14);

                          /* Parsen von Fehler 1 */;
                          /* Parsen von WP_Fehler_1_Code */;
                          StartPos=0u16;
                          EndPos=find(Data_Fehler1,$;$,0u16)-1u16;
                          WP_Fehler_1_Code=split(Data_Fehler1,StartPos,EndPo s);
                          /* Parsen von Datum 1 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Fehler1,$;$,1u16)-1u16;
                          Fehlertag=split(Data_Fehler1,StartPos,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Fehler1,$;$,2u16)-1u16;
                          Fehlermonat=split(Data_Fehler1,StartPos,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Fehler1,$;$,3u16)-1u16;
                          Fehlerjahr=split(Data_Fehler1,StartPos,EndPos);
                          Jahresanpassung=convert(Fehlerjahr,0u16);
                          Jahresanpassung=2000u16+Jahresanpassung;
                          Fehlerjahr=convert(Jahresanpassung,$$);
                          WP_Fehler_1_Datum=Fehlertag+$.$+Fehlermonat+$.$+Fe hlerjahr;
                          /* Parsen von Uhrzeit 1 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Fehler1,$;$,4u16)-1u16;
                          Fehlerstunde=split(Data_Fehler1,StartPos,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Fehler1,$;$,5u16)-6u16;
                          Fehlerminute=split(Data_Fehler1,StartPos,EndPos);
                          Minutenanpassung=convert(Fehlerminute,0u16);
                          if Minutenanpassung<=9u16 then {
                          Fehlerminute=$0$+Fehlerminute
                          } endif;
                          WP_Fehler_1_Uhrzeit=Fehlerstunde+$:$+Fehlerminute;

                          write('1/6/6'c14,$line 700$c14);

                          } endif;

                          if change(Data_Fehler2) and Data_Fehler2!=$$ then {

                          write('1/6/6'c14,$line 706$c14);

                          /* Parsen von Fehler 2 */;
                          /* Parsen von WP_Fehler_2_Code */;
                          StartPos=0u16;
                          EndPos=find(Data_Fehler2,$;$,0u16)-1u16;
                          WP_Fehler_2_Code=split(Data_Fehler2,StartPos,EndPo s);
                          /* Parsen von Datum 2 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Fehler2,$;$,1u16)-1u16;
                          Fehlertag=split(Data_Fehler2,StartPos,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Fehler2,$;$,2u16)-1u16;
                          Fehlermonat=split(Data_Fehler2,StartPos,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Fehler2,$;$,3u16)-1u16;
                          Fehlerjahr=split(Data_Fehler2,StartPos,EndPos);
                          Jahresanpassung=convert(Fehlerjahr,0u16);
                          Jahresanpassung=2000u16+Jahresanpassung;
                          Fehlerjahr=convert(Jahresanpassung,$$);
                          WP_Fehler_2_Datum=Fehlertag+$.$+Fehlermonat+$.$+Fe hlerjahr;
                          /* Parsen von Uhrzeit 2 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Fehler2,$;$,4u16)-1u16;
                          Fehlerstunde=split(Data_Fehler2,StartPos,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Fehler2,$;$,5u16)-6u16;
                          Fehlerminute=split(Data_Fehler2,StartPos,EndPos);
                          Minutenanpassung=convert(Fehlerminute,0u16);
                          if Minutenanpassung<=9u16 then {
                          Fehlerminute=$0$+Fehlerminute
                          } endif;
                          WP_Fehler_2_Uhrzeit=Fehlerstunde+$:$+Fehlerminute;

                          write('1/6/6'c14,$line 740$c14);

                          } endif
                          if change(Data_Fehler3) and Data_Fehler3!=$$ then {

                          write('1/6/6'c14,$line 745$c14);

                          /* Parsen von Fehler 3 */;
                          /* Parsen von WP_Fehler_3_Code */;
                          StartPos=0u16;
                          EndPos=find(Data_Fehler3,$;$,0u16)-1u16;
                          WP_Fehler_3_Code=split(Data_Fehler3,StartPos,EndPo s);
                          /* Parsen von Datum 3 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Fehler3,$;$,1u16)-1u16;
                          Fehlertag=split(Data_Fehler3,StartPos,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Fehler3,$;$,2u16)-1u16;
                          Fehlermonat=split(Data_Fehler3,StartPos,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Fehler3,$;$,3u16)-1u16;
                          Fehlerjahr=split(Data_Fehler3,StartPos,EndPos);
                          Jahresanpassung=convert(Fehlerjahr,0u16);
                          Jahresanpassung=2000u16+Jahresanpassung;
                          Fehlerjahr=convert(Jahresanpassung,$$);
                          WP_Fehler_3_Datum=Fehlertag+$.$+Fehlermonat+$.$+Fe hlerjahr;
                          /* Parsen von Uhrzeit 3 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Fehler3,$;$,4u16)-1u16;
                          Fehlerstunde=split(Data_Fehler3,StartPos,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Fehler3,$;$,5u16)-6u16;
                          Fehlerminute=split(Data_Fehler3,StartPos,EndPos);
                          Minutenanpassung=convert(Fehlerminute,0u16);
                          if Minutenanpassung<=9u16 then {
                          Fehlerminute=$0$+Fehlerminute
                          } endif;
                          WP_Fehler_3_Uhrzeit=Fehlerstunde+$:$+Fehlerminute;

                          write('1/6/6'c14,$line 779$c14);

                          } endif
                          if change(Data_Fehler4) and Data_Fehler4!=$$ then {

                          write('1/6/6'c14,$line 784$c14);

                          /* Parsen von Fehler 4 */;
                          /* Parsen von WP_Fehler_4_Code */;
                          StartPos=0u16;
                          EndPos=find(Data_Fehler4,$;$,0u16)-1u16;
                          WP_Fehler_4_Code=split(Data_Fehler4,StartPos,EndPo s);
                          /* Parsen von Datum 4 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Fehler4,$;$,1u16)-1u16;
                          Fehlertag=split(Data_Fehler4,StartPos,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Fehler4,$;$,2u16)-1u16;
                          Fehlermonat=split(Data_Fehler4,StartPos,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Fehler4,$;$,3u16)-1u16;
                          Fehlerjahr=split(Data_Fehler4,StartPos,EndPos);
                          Jahresanpassung=convert(Fehlerjahr,0u16);
                          Jahresanpassung=2000u16+Jahresanpassung;
                          Fehlerjahr=convert(Jahresanpassung,$$);
                          WP_Fehler_4_Datum=Fehlertag+$.$+Fehlermonat+$.$+Fe hlerjahr;
                          /* Parsen von Uhrzeit 4 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Fehler4,$;$,4u16)-1u16;
                          Fehlerstunde=split(Data_Fehler4,StartPos,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Fehler4,$;$,5u16)-6u16;
                          Fehlerminute=split(Data_Fehler4,StartPos,EndPos);
                          Minutenanpassung=convert(Fehlerminute,0u16);
                          if Minutenanpassung<=9u16 then {
                          Fehlerminute=$0$+Fehlerminute
                          } endif;
                          WP_Fehler_4_Uhrzeit=Fehlerstunde+$:$+Fehlerminute;

                          write('1/6/6'c14,$line 818$c14);

                          } endif
                          if change(Data_Fehler5) and Data_Fehler5!=$$ then {

                          write('1/6/6'c14,$line 823$c14);

                          /* Parsen von Fehler 5 */;
                          /* Parsen von WP_Fehler_5_Code */;
                          StartPos=0u16;
                          EndPos=find(Data_Fehler5,$;$,0u16)-1u16;
                          WP_Fehler_5_Code=split(Data_Fehler5,StartPos,EndPo s);
                          /* Parsen von Datum 5 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Fehler5,$;$,1u16)-1u16;
                          Fehlertag=split(Data_Fehler5,StartPos,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Fehler5,$;$,2u16)-1u16;
                          Fehlermonat=split(Data_Fehler5,StartPos,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Fehler5,$;$,3u16)-1u16;
                          Fehlerjahr=split(Data_Fehler5,StartPos,EndPos);
                          Jahresanpassung=convert(Fehlerjahr,0u16);
                          Jahresanpassung=2000u16+Jahresanpassung;
                          Fehlerjahr=convert(Jahresanpassung,$$);
                          WP_Fehler_5_Datum=Fehlertag+$.$+Fehlermonat+$.$+Fe hlerjahr;
                          /* Parsen von Uhrzeit 5 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Fehler5,$;$,4u16)-1u16;
                          Fehlerstunde=split(Data_Fehler5,StartPos,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Fehler5,$;$,5u16)-6u16;
                          Fehlerminute=split(Data_Fehler5,StartPos,EndPos);
                          Minutenanpassung=convert(Fehlerminute,0u16);
                          if Minutenanpassung<=9u16 then {
                          Fehlerminute=$0$+Fehlerminute
                          } endif;
                          WP_Fehler_5_Uhrzeit=Fehlerstunde+$:$+Fehlerminute;

                          write('1/6/6'c14,$line 857$c14);

                          } endif

                          // Einzelwerte zu den Abschaltungen definieren
                          WP_Abschaltung_1_Code=$$
                          WP_Abschaltung_1_Datum=$$
                          WP_Abschaltung_1_Uhrzeit=$$
                          WP_Abschaltung_2_Code=$$
                          WP_Abschaltung_2_Datum=$$
                          WP_Abschaltung_2_Uhrzeit=$$
                          WP_Abschaltung_3_Code=$$
                          WP_Abschaltung_3_Datum=$$
                          WP_Abschaltung_3_Uhrzeit=$$
                          WP_Abschaltung_4_Code=$$
                          WP_Abschaltung_4_Datum=$$
                          WP_Abschaltung_4_Uhrzeit=$$
                          WP_Abschaltung_5_Code=$$
                          WP_Abschaltung_5_Datum=$$
                          WP_Abschaltung_5_Uhrzeit=$$
                          Abschaltungstag=$$
                          Abschaltungsmonat=$$
                          Abschaltungsjahr=$$
                          Abschaltungsstunde=$$
                          Abschaltungsminute=$$

                          // Parsen der einzelnen Abschaltungen
                          if change(Data_Abschaltungen1) and Data_Abschaltungen1!=$$ then {

                          write('1/6/6'c14,$line 886$c14);

                          /* Parsen von Abschaltung 1 */;
                          /* Parsen von WP_Abschaltung_1_Code */;
                          StartPos=0u16;
                          EndPos=find(Data_Abschaltungen1,$;$,0u16)-1u16;
                          WP_Abschaltung_1_Code=split(Data_Abschaltungen1,St artPos,EndPos);
                          /* Parsen von Datum 1 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Abschaltungen1,$;$,1u16)-1u16;
                          Abschaltungstag=split(Data_Abschaltungen1,StartPos ,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Abschaltungen1,$;$,2u16)-1u16;
                          Abschaltungsmonat=split(Data_Abschaltungen1,StartP os,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Abschaltungen1,$;$,3u16)-1u16;
                          Abschaltungsjahr=split(Data_Abschaltungen1,StartPo s,EndPos);
                          Jahresanpassung=convert(Abschaltungsjahr,0u16);
                          Jahresanpassung=2000u16+Jahresanpassung;
                          Abschaltungsjahr=convert(Jahresanpassung,$$);
                          WP_Abschaltung_1_Datum=Abschaltungstag+$.$+Abschal tungsmonat+$.$+Abschaltungsjahr;
                          /* Parsen von Uhrzeit 1 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Abschaltungen1,$;$,4u16)-1u16;
                          Abschaltungsstunde=split(Data_Abschaltungen1,Start Pos,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Abschaltungen1,$;$,5u16)-1u16;
                          Abschaltungsminute=split(Data_Abschaltungen1,Start Pos,EndPos);
                          Minutenanpassung=convert(Abschaltungsminute,0u16);
                          if Minutenanpassung<=9u16 then {
                          Abschaltungsminute=$0$+Abschaltungsminute
                          } endif;
                          WP_Abschaltung_1_Uhrzeit=Abschaltungsstunde+$:$+Ab schaltungsminute;

                          write('1/6/6'c14,$line 920$c14);

                          } endif
                          if change(Data_Abschaltungen2) and Data_Abschaltungen2!=$$ then {

                          write('1/6/6'c14,$line 925$c14);

                          /* Parsen von Abschaltung 2 */;
                          /* Parsen von WP_Abschaltung_2_Code */;
                          StartPos=0u16;
                          EndPos=find(Data_Abschaltungen2,$;$,0u16)-1u16;
                          WP_Abschaltung_2_Code=split(Data_Abschaltungen2,St artPos,EndPos);
                          /* Parsen von Datum 2 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Abschaltungen2,$;$,1u16)-1u16;
                          Abschaltungstag=split(Data_Abschaltungen2,StartPos ,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Abschaltungen2,$;$,2u16)-1u16;
                          Abschaltungsmonat=split(Data_Abschaltungen2,StartP os,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Abschaltungen2,$;$,3u16)-1u16;
                          Abschaltungsjahr=split(Data_Abschaltungen2,StartPo s,EndPos);
                          Jahresanpassung=convert(Abschaltungsjahr,0u16);
                          Jahresanpassung=2000u16+Jahresanpassung;
                          Abschaltungsjahr=convert(Jahresanpassung,$$);
                          WP_Abschaltung_2_Datum=Abschaltungstag+$.$+Abschal tungsmonat+$.$+Abschaltungsjahr;
                          /* Parsen von Uhrzeit 2 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Abschaltungen2,$;$,4u16)-1u16;
                          Abschaltungsstunde=split(Data_Abschaltungen2,Start Pos,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Abschaltungen2,$;$,5u16)-1u16;
                          Abschaltungsminute=split(Data_Abschaltungen2,Start Pos,EndPos);
                          Minutenanpassung=convert(Abschaltungsminute,0u16);
                          if Minutenanpassung<=9u16 then {
                          Abschaltungsminute=$0$+Abschaltungsminute
                          } endif;
                          WP_Abschaltung_2_Uhrzeit=Abschaltungsstunde+$:$+Ab schaltungsminute;

                          write('1/6/6'c14,$line 959$c14);

                          } endif
                          if change(Data_Abschaltungen3) and Data_Abschaltungen3!=$$ then {

                          write('1/6/6'c14,$line 964$c14);

                          /* Parsen von Abschaltung 3 */;
                          /* Parsen von WP_Abschaltung_3_Code */;
                          StartPos=0u16;
                          EndPos=find(Data_Abschaltungen3,$;$,0u16)-1u16;
                          WP_Abschaltung_3_Code=split(Data_Abschaltungen3,St artPos,EndPos);
                          /* Parsen von Datum 3 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Abschaltungen3,$;$,1u16)-1u16;
                          Abschaltungstag=split(Data_Abschaltungen3,StartPos ,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Abschaltungen3,$;$,2u16)-1u16;
                          Abschaltungsmonat=split(Data_Abschaltungen3,StartP os,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Abschaltungen3,$;$,3u16)-1u16;
                          Abschaltungsjahr=split(Data_Abschaltungen3,StartPo s,EndPos);
                          Jahresanpassung=convert(Abschaltungsjahr,0u16);
                          Jahresanpassung=2000u16+Jahresanpassung;
                          Abschaltungsjahr=convert(Jahresanpassung,$$);
                          WP_Abschaltung_3_Datum=Abschaltungstag+$.$+Abschal tungsmonat+$.$+Abschaltungsjahr;
                          /* Parsen von Uhrzeit 3 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Abschaltungen3,$;$,4u16)-1u16;
                          Abschaltungsstunde=split(Data_Abschaltungen3,Start Pos,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Abschaltungen3,$;$,5u16)-1u16;
                          Abschaltungsminute=split(Data_Abschaltungen3,Start Pos,EndPos);
                          Minutenanpassung=convert(Abschaltungsminute,0u16);
                          if Minutenanpassung<=9u16 then {
                          Abschaltungsminute=$0$+Abschaltungsminute
                          } endif;
                          WP_Abschaltung_3_Uhrzeit=Abschaltungsstunde+$:$+Ab schaltungsminute;

                          write('1/6/6'c14,$line 998$c14);

                          } endif
                          if change(Data_Abschaltungen4) and Data_Abschaltungen4!=$$ then {

                          write('1/6/6'c14,$line 1003$c14);

                          /* Parsen von Abschaltung 4 */;
                          /* Parsen von WP_Abschaltung_4_Code */;
                          StartPos=0u16;
                          EndPos=find(Data_Abschaltungen4,$;$,0u16)-1u16;
                          WP_Abschaltung_4_Code=split(Data_Abschaltungen4,St artPos,EndPos);
                          /* Parsen von Datum 4 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Abschaltungen4,$;$,1u16)-1u16;
                          Abschaltungstag=split(Data_Abschaltungen4,StartPos ,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Abschaltungen4,$;$,2u16)-1u16;
                          Abschaltungsmonat=split(Data_Abschaltungen4,StartP os,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Abschaltungen4,$;$,3u16)-1u16;
                          Abschaltungsjahr=split(Data_Abschaltungen4,StartPo s,EndPos);
                          Jahresanpassung=convert(Abschaltungsjahr,0u16);
                          Jahresanpassung=2000u16+Jahresanpassung;
                          Abschaltungsjahr=convert(Jahresanpassung,$$);
                          WP_Abschaltung_4_Datum=Abschaltungstag+$.$+Abschal tungsmonat+$.$+Abschaltungsjahr;
                          /* Parsen von Uhrzeit 4 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Abschaltungen4,$;$,4u16)-1u16;
                          Abschaltungsstunde=split(Data_Abschaltungen4,Start Pos,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Abschaltungen4,$;$,5u16)-1u16;
                          Abschaltungsminute=split(Data_Abschaltungen4,Start Pos,EndPos);
                          Minutenanpassung=convert(Abschaltungsminute,0u16);
                          if Minutenanpassung<=9u16 then {
                          Abschaltungsminute=$0$+Abschaltungsminute
                          } endif;
                          WP_Abschaltung_4_Uhrzeit=Abschaltungsstunde+$:$+Ab schaltungsminute;

                          write('1/6/6'c14,$line 1037$c14);

                          } endif
                          if change(Data_Abschaltungen5) and Data_Abschaltungen5!=$$ then {

                          write('1/6/6'c14,$line 1042$c14);

                          /* Parsen von Abschaltung 5 */;
                          /* Parsen von WP_Abschaltung_5_Code */;
                          StartPos=0u16;
                          EndPos=find(Data_Abschaltungen5,$;$,0u16)-1u16;
                          WP_Abschaltung_5_Code=split(Data_Abschaltungen5,St artPos,EndPos);
                          /* Parsen von Datum 5 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Abschaltungen5,$;$,1u16)-1u16;
                          Abschaltungstag=split(Data_Abschaltungen5,StartPos ,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Abschaltungen5,$;$,2u16)-1u16;
                          Abschaltungsmonat=split(Data_Abschaltungen5,StartP os,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Abschaltungen5,$;$,3u16)-1u16;
                          Abschaltungsjahr=split(Data_Abschaltungen5,StartPo s,EndPos);
                          Jahresanpassung=convert(Abschaltungsjahr,0u16);
                          Jahresanpassung=2000u16+Jahresanpassung;
                          Abschaltungsjahr=convert(Jahresanpassung,$$);
                          WP_Abschaltung_5_Datum=Abschaltungstag+$.$+Abschal tungsmonat+$.$+Abschaltungsjahr;
                          /* Parsen von Uhrzeit 5 */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Abschaltungen5,$;$,4u16)-1u16;
                          Abschaltungsstunde=split(Data_Abschaltungen5,Start Pos,EndPos);
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Abschaltungen5,$;$,5u16)-6u16;
                          Abschaltungsminute=split(Data_Abschaltungen5,Start Pos,EndPos);
                          Minutenanpassung=convert(Abschaltungsminute,0u16);
                          if Minutenanpassung<=9u16 then {
                          Abschaltungsminute=$0$+Abschaltungsminute
                          } endif;
                          WP_Abschaltung_5_Uhrzeit=Abschaltungsstunde+$:$+Ab schaltungsminute;

                          write('1/6/6'c14,$line 1076$c14);

                          } endif

                          // Einzelwerte zum Anlagenstatus definieren
                          WP_Anlagenstatus_Waermepumpentyp=$$
                          WP_Anlagenstatus_Software_Version=$$
                          WP_Anlagenstatus_Bivalenzstufe=0b01
                          WP_Anlagenstatus_Aktueller_Betriebszustand=0b01
                          WP_Anlagenstatus_Startdatum=$$
                          WP_Anlagenstatus_Startuhrzeit=$$
                          WP_Anlagenstatus_Compact=0b01
                          WP_Anlagenstatus_Comfort=0b01
                          StartTag=$$
                          StartMonat=$$
                          StartJahr=$$
                          StartStunde=$$
                          StartMinute=$$
                          StartSekunde=$$
                          Compact=$$
                          Comfort=$$

                          // Parsen der einzelnen Werte des Anlagenstatus
                          if change(Data_Anlagenstatus) and Data_Anlagenstatus!=$$ then {

                          write('1/6/6'c14,$line 1101$c14);

                          /* Parsen von Waermepumpentyp */;
                          StartPos=0u16;
                          EndPos=find(Data_Anlagenstatus,$;$,0u16)-1u16;
                          WP_Anlagenstatus_Waermepumpentyp=split(Data_Anlage nstatus,StartPos,EndPos);
                          /* Parsen von Software_Version */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Anlagenstatus,$;$,1u16)-1u16;
                          WP_Anlagenstatus_Software_Version=split(Data_Anlag enstatus,StartPos,EndPos);
                          /* Parsen von Bivalenzstufe */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Anlagenstatus,$;$,2u16)-1u16;
                          WP_Anlagenstatus_Bivalenzstufe=convert(split(Data_ Anlagenstatus,StartPos,EndPos),0b01);
                          /* Parsen von Aktueller_Betriebszustand */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Anlagenstatus,$;$,3u16)-1u16;
                          WP_Anlagenstatus_Aktueller_Betriebszustand=convert (split(Data_Anlagenstatus,StartPos,EndPos),0b01);
                          /* Parsen von Einschaltzeitpunkt (Datum, Uhrzeit) */;
                          /* Tag */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Anlagenstatus,$;$,4u16)-1u16;
                          StartTag=split(Data_Anlagenstatus,StartPos,EndPos) ;
                          /* Monat */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Anlagenstatus,$;$,5u16)-1u16;
                          StartMonat=split(Data_Anlagenstatus,StartPos,EndPo s);
                          /* Jahr */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Anlagenstatus,$;$,6u16)-1u16;
                          StartJahr=split(Data_Anlagenstatus,StartPos,EndPos );
                          Jahresanpassung=convert(StartJahr,0u16);
                          Jahresanpassung=2000u16+Jahresanpassung;
                          StartJahr=convert(Jahresanpassung,$$);
                          WP_Anlagenstatus_Startdatum=StartTag+$.$+StartMona t+$.$+StartJahr;
                          /* Stunde */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Anlagenstatus,$;$,7u16)-1u16;
                          StartStunde=split(Data_Anlagenstatus,StartPos,EndP os);
                          /* Minute */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Anlagenstatus,$;$,8u16)-1u16;
                          StartMinute=split(Data_Anlagenstatus,StartPos,EndP os);
                          /* Sekunde */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Anlagenstatus,$,$,0u16)-1u16;
                          StartSekunde=split(Data_Anlagenstatus,StartPos,End Pos);
                          WP_Anlagenstatus_Startuhrzeit=StartStunde+$:$+Star tMinute+$:$+StartSekunde;
                          /* Parsen von Wärmepumpenausstattung */;
                          /* Compact-Version */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Anlagenstatus,$,$,1u16)-1u16;
                          Compact=split(Data_Anlagenstatus,StartPos,EndPos);
                          WP_Anlagenstatus_Compact=convert(Compact,0b01);
                          /* Comfort-Platine */;
                          StartPos=EndPos+2u16;
                          EndPos=StartPos+1u16;
                          Comfort=split(Data_Anlagenstatus,StartPos,EndPos);
                          WP_Anlagenstatus_Comfort=convert(Comfort,0b01);

                          write('1/6/6'c14,$line 1161$c14);

                          } endif

                          // Einzelwerte der Comfort-Platine definieren
                          WP_Comfort_Mischkreis2_Vorlauftemperatur=0.0
                          WP_Comfort_Temperatur_Solarkollektor=0.0
                          WP_Comfort_Temperatur_Solarspeicher=0.0
                          WP_Comfort_Temperatur_externeEnergiequelle=0.0

                          // Parsen der einzelnen Werte der Comfort-Platine
                          if change(Data_Comfortplatine) and Data_Comfortplatine!=$$ then {

                          write('1/6/6'c14,$line 1174$c14);

                          /* Parsen von Mischkreis2_Vorlauftemperatur */;
                          StartPos=0u16;
                          EndPos=find(Data_Comfortplatine,$;$,0u16)-1u16;
                          WP_Comfort_Mischkreis2_Vorlauftemperatur=convert(s plit(Data_Comfortplatine,StartPos,EndPos),0.0)*0.1 ;
                          /* Parsen von Temperatur_Solarkollektor */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Comfortplatine,$;$,1u16)-1u16;
                          WP_Comfort_Temperatur_Solarkollektor=convert(split (Data_Comfortplatine,StartPos,EndPos),0.0)*0.1;
                          /* Parsen von Temperatur_Solarspeicher */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Comfortplatine,$;$,2u16)-1u16;
                          WP_Comfort_Temperatur_Solarspeicher=convert(split( Data_Comfortplatine,StartPos,EndPos),0.0)*0.1;
                          /* Parsen von Temperatur_externeEnergiequelle */;
                          StartPos=EndPos+2u16;
                          EndPos=find(Data_Comfortplatine,$;$,3u16)-1u16;
                          WP_Comfort_Temperatur_externeEnergiequelle=convert (split(Data_Comfortplatine,StartPos,EndPos),0.0)*0 .1;

                          write('1/6/6'c14,$line 1193$c14);

                          } endif
                          :end
                          [/highlight]

                          Das Resultat findet sich hier
                          HTML-Code:
                          % 2014-01-25 22:36:40 | Sender: EibPC | GA: "Zeit-15/1/0" | Wert: Samstag 22:36:40 | Typ: Uhrzeit |  Schreiben
                          % 2014-01-25 22:36:41 | Sender: EibPC | GA: "Zeit-15/1/0" | Wert: Samstag 22:36:41 | Typ: Uhrzeit |  Schreiben
                          % 2014-01-25 22:36:42 | Sender: EibPC | GA: "Zeit-15/1/0" | Wert: Samstag 22:36:42 | Typ: Uhrzeit |  Schreiben
                          % 2014-01-25 22:36:43 | Sender: EibPC | GA: "Zeit-15/1/0" | Wert: Samstag 22:36:43 | Typ: Uhrzeit |  Schreiben
                          % 2014-01-25 22:36:44 | Sender: EibPC | GA: "Zeit-15/1/0" | Wert: Samstag 22:36:44 | Typ: Uhrzeit |  Schreiben
                          % 2014-01-25 22:36:45 | Sender: EibPC | GA: "Zeit-15/1/0" | Wert: Samstag 22:36:45 | Typ: Uhrzeit |  Schreiben
                          % 2014-01-25 22:36:46 | Sender: EibPC | GA: "Zeit-15/1/0" | Wert: Samstag 22:36:46 | Typ: Uhrzeit |  Schreiben
                          % 2014-01-25 22:36:47 | Sender: EibPC | GA: "Zeit-15/1/0" | Wert: Samstag 22:36:47 | Typ: Uhrzeit |  Schreiben
                          % 2014-01-25 22:36:48 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 67 | Typ: Text |  Schreiben
                          % 2014-01-25 22:36:48 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 83 | Typ: Text |  Schreiben
                          % 2014-01-25 22:36:48 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 87 | Typ: Text |  Schreiben
                          % 2014-01-25 22:36:48 | Sender: EibPC | GA: "Zeit-15/1/0" | Wert: Samstag 22:36:48 | Typ: Uhrzeit |  Schreiben
                          % 2014-01-25 22:36:48 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 83 | Typ: Text |  Schreiben
                          % 2014-01-25 22:36:48 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 87 | Typ: Text |  Schreiben
                          % 2014-01-25 22:36:48 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 83 | Typ: Text |  Schreiben
                          % 2014-01-25 22:36:48 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 87 | Typ: Text |  Schreiben
                          % 2014-01-25 22:36:49 | Sender: EibPC | GA: "Zeit-15/1/0" | Wert: Samstag 22:36:49 | Typ: Uhrzeit |  Schreiben
                          % 2014-01-25 22:36:50 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 75 | Typ: Text |  Schreiben
                          % 2014-01-25 22:36:50 | Sender: EibPC | GA: "Zeit-15/1/0" | Wert: Samstag 22:36:50 | Typ: Uhrzeit |  Schreiben
                          % 2014-01-25 22:36:50 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 124 | Typ: Text |  Schreiben
                          % 2014-01-25 22:36:50 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: 385;350;376;47 | Typ: Text |  Schreiben
                          % 2014-01-25 22:36:50 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 205 | Typ: Text |  Schreiben
                          
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 243 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 295 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 310 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 337 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 359 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 415 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 438 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 578 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 596 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 635 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 666 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 700 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 706 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 740 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 745 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 779 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 784 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 818 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 823 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 857 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 886 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 920 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 925 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 959 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 964 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 998 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 1003 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 1037 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 1042 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 1076 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 1101 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: line 1161 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "LCD_Beleuchtung_BadOG-1/6/7" | Wert: EIN | Typ: Binärwert |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Text_Bad_OG-1/6/6" | Wert: -11.00 / 43.40 | Typ: Text |  Schreiben
                          % 2014-01-25 22:37:10 | Sender: EibPC | GA: "Zeit-15/1/0" | Wert: Samstag 22:37:10 | Typ: Uhrzeit |  Schreiben
                          % 2014-01-25 22:37:11 | Sender: EibPC | GA: "Zeit-15/1/0" | Wert: Samstag 22:37:11 | Typ: Uhrzeit |  Schreiben
                          % 2014-01-25 22:37:12 | Sender: EibPC | GA: "Zeit-15/1/0" | Wert: Samstag 22:37:12 | Typ: Uhrzeit |  Schreiben
                          % 2014-01-25 22:37:13 | Sender: EibPC | GA: "Zeit-15/1/0" | Wert: Samstag 22:37:13 | Typ: Uhrzeit |  Schreiben
                          Es exisitert trotz Minimalprogramm eine Verarbeitungslücke von 20s zwischen 22:36:50 und 22:37:10.
                          Keine Ahnung was der EibPC da gerade tut, aber eine Schleife im Makro o.ä. existiert nicht!

                          Hilfe!

                          Schöne Grüße
                          Matthias

                          Kommentar


                            #88
                            Zitat von Matthias Beitrag anzeigen
                            Für mich sieht das nach einem Bug in der Firmware aus!
                            Naja, das kommentiere ich nicht.
                            Das Programm - so wie es ist - liest die Rs232 Daten ein, parst die Daten in eine Hauptschleife, splittet Strings, zerstückelt die Daten um dann weitere Verarbeitungsstrings zu generieren - das über mehrere tausend Anweisungen in einem Rutsch. Das kann zu Problemen führen.
                            Am besten die Verarbeitung etwas entzerren
                            Ersetze mal die verschiedenen Anweisungen
                            [highlight=epc]
                            if change(Data_Temperatur) and Data_Temperatur!=$$ then ...
                            if change(Data_Ablaufzeiten) and Data_Ablaufzeiten!=$$ then ...
                            [/highlight]
                            [highlight=epc]
                            if delay(change(Data_Temperatur),250u64) and Data_Temperatur!=$$ then ...
                            if delay(change(Data_Ablaufzeiten),500u64) and Data_Ablaufzeiten!=$$ then ...

                            [/highlight]
                            und das nun für jeden der Bereiche, sodass zwischen jeder Unterverarbeitung ein paar ms Ruhe ist. GGf. ist das auch nur ein Bereich, der da die Probleme verursacht.
                            Ist das Verhalten immer so oder nur manchmal?
                            offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                            Enertex Produkte kaufen

                            Kommentar


                              #89
                              Zitat von enertegus Beitrag anzeigen
                              und das nun für jeden der Bereiche, sodass zwischen jeder Unterverarbeitung ein paar ms Ruhe ist. GGf. ist das auch nur ein Bereich, der da die Probleme verursacht.
                              Ist das Verhalten immer so oder nur manchmal?
                              Hallo Michael,

                              das Verhalten ist immmer so. Konstant und permanent 20s Verzögerung wenn die Abfrage per RS232 ausgeführt wird.

                              Das mit dem Delay kann ich versuchen.

                              Aber wenn man die Debug-Meldungen anschaut, so verstehe ich nicht wie es zu dieser Verzögerung kommt.
                              Das ergibt keinen Sinn. Es wird nicht irgendwas hundert mal in einer Schleife aufgerufen oder ähnliches.
                              Die Verzögerung entsteht zwischen Zeile 205 und 243 im Makro. Ein neuer Verarbeitungszyklus wurde 19s nicht durchgeführt (keine Zeit gesendet).
                              Es wurde auch sonst nichts weiter das Makro betreffend ausgeführt - nach jedem "if" folgt ja sofort erst mal eine Debug-Meldung. Aber nichts nach Zeile 205, wo der Buffer ja bereits verarbeitet wurde!?

                              Was passiert nun in der Zwischenzeit?
                              Also nachdem der Buffer verarbeitet (und change(Data_Temperatur) wahr wird)?
                              In meinen Augen müsste es sofort mit der Verarbeitung weiter gehen, denn in meinem Log lasse ich den Inhalt von "Data_Temperatur" ausgeben. Das ist die Zeile im Log vor der "line 205".
                              Als Nächstes müsste dann ja sofort die Verarbeitung bei Zeile 243 weiter gehen.
                              Tut es aber nicht!
                              Irgendwas muss den EibPC blockieren. Für mich, als jemand der die Internas nicht kennt, entsteht der Eindruck als wenn etwas in der Firmware, was für die RS232 Kommunikation verantwortlich ist, nicht so asynchron läuft wie es sollte. Und daher der Verweis auf die Firmware, auch wenn Du das nicht so gerne hörst (würde ich ja an Deiner Stelle auch nicht )

                              Was blockiert den EibPC? Können wir das irgendwie anders tracen/debuggen? Stelle mich gern für tiefere Fehlersuche zur Verfügung..

                              Grüße
                              Matthias

                              Kommentar


                                #90
                                Zitat von Matthias Beitrag anzeigen
                                Also nachdem der Buffer verarbeitet (und change(Data_Temperatur) wahr wird)?
                                So wie ich den Code verstehe, kommt ein größeres Datenpaket in den Eingangspuffer. Das wird nun aufgetröselt in z.B. 10 Unterpaketen und diese dann wieder in 10..20 Strings verarbeitet. Da diese auf change() reagieren, sind die quasi alle gleichzeitig zu verarbeiten.
                                Die Debugmethode mit dem Schreiben auf dem Bus ist da etwas unvollkommen. Wenn die Verarbeitung im Gange ist, schreibt der nur mal in die Warteschlange. Daher kommen die Telegramme auch nicht unmittelbar raus, sondern geballt.
                                Die RS232 ist da denke ich nicht Schuld, sondern das Vorgehen bei der Verarbeitung. Teste einfach mal. Sollte ja schnell zu machen sein.
                                offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                                Enertex Produkte kaufen

                                Kommentar

                                Lädt...
                                X