Ankündigung

Einklappen
Keine Ankündigung bisher.

Temperaturmessung über HA7E "stürzt ab"

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

    Temperaturmessung über HA7E "stürzt ab"

    Hallo zusammen,

    ich habe seit einigen Tagen das Problem, dass mein One Wire Bus immer abstürzt. Zur Konstellation: ich betreibe den Bus am HA7E Busmaster am EibPC. Die Leitung (1 Strang) ist ca. 15m lang. Daran hängen bei etwa 10m Länge 3 One Wire Temp.Fühler mit dem jeweiligen Anschlußkabel und am Ende der Leitung weitere 2.

    Phänomen ist so, beim Start des EibPC die Sensoren alle nach und nach "hochfahren" und den korrekten Wert liefern. Nach einiger Zeit bleiben sie dann quasi stehen und die vorher gemessenen Werte ändern sich nicht mehr.

    Ich habe aktuell keine Idee wie ich an das Problem herangehen kann. Hoffentlich kann mir jemand helfen.

    Beste Grüße
    Nils

    #2
    Zitat von Reason555 Beitrag anzeigen
    Phänomen ist so, beim Start des EibPC die Sensoren alle nach und nach "hochfahren" und den korrekten Wert liefern. Nach einiger Zeit bleiben sie dann quasi stehen und die vorher gemessenen Werte ändern sich nicht mehr.
    Hast Du schon mal
    https://knx-user-forum.de/192081-post18.html
    gelesen und probiert?
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #3
      Gelesen ja aber probiert nicht da der Fehler sich doch anders anhörte. Aber der Tip aus Deinem Beitrag die Zeit von 120000 auf 240000 zu setzen hat offenbar geholfen (es läuft zumindest schon seit 3 Std.)

      Danke und Gruß
      Nils

      Kommentar


        #4
        Zitat von Reason555 Beitrag anzeigen
        Gelesen ja aber probiert nicht da der Fehler sich doch anders anhörte. Aber der Tip aus Deinem Beitrag die Zeit von 120000 auf 240000 zu setzen hat offenbar geholfen (es läuft zumindest schon seit 3 Std.)
        Wir haben das nun auch in den neuen Makros so geändert. Wenn jemand nochmals Probleme bekommt, kann er auch auf 360000 erhöhen.
        Theoretisch wäre auch der Zufall mal ungünstig so möglich, dass die Zeiten alle beieinander liegen...dann halt nochmals starten.
        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
        Enertex Produkte kaufen

        Kommentar


          #5
          Hallo zusammen,

          ich war ein paar Tage weg und hab daher erst am WE die Änderungen eingespielt (Wert auf 360000 gesetzt). Jetzt läuft der 1Wire Bus so etwa 10 Std. bis er wieder stehenbleibt. Hat noch jemand eine Idee was ich noch versuchen könnte?

          Gruß Nils

          Kommentar


            #6
            Zitat von Reason555 Beitrag anzeigen
            Hallo zusammen,
            ich war ein paar Tage weg und hab daher erst am WE die Änderungen eingespielt (Wert auf 360000 gesetzt). Jetzt läuft der 1Wire Bus so etwa 10 Std. bis er wieder stehenbleibt. Hat noch jemand eine Idee was ich noch versuchen könnte?
            Bleiben da alle Sensoren stehen?
            Theoretisch könnte es sein, dass der Zufallswert zufällig schlecht verteilt wird. Anbei mal das Makro, mit dem man die Zeitverteilung "händisch" vornehmen kann. Ich würde da aber auch mal schauen, ob es ein bestimmter Sensor ist, der nimmer mag.
            Code:
            //Family Code 10, DS18B20 Family Code 28
            :begin TemperatureSync(NameD, ROMID,Sync,Second)
            :info $Liest zyklisch die Temperatur eines Sensors(DS18S20 oder DS18B20) am OneWire aus und speichert die Temperatur in der Variable NameD_Temperature als f16 Wert. Das Makro HA7E muss eingebunden sein.$\\
                $Name des Sensors$\\
                $ROM-ID des Sensors$\\
                $Ein Startimpuls zum Auslesen$
                $Eine Verzögerung in Sekunden nach dem Ausleseimpuls$ 
            :shortinfo $Liest zyklisch die Temperatur eines Sensors$
            //Default-Value(e.g. important for webcharts)
            NameD_TemperatureRead=100.0f16
            NameD_Temperature=100.0f16
            NameD_Message=$$
            NameD_Len=0u16
            NameD_Buffer=$$
            NameD_rawdata=$$
            NameD_CR = 0f16
            NameD_CP = 0f16
            NameD_DS18S20 = OFF
            NameD_DS18B20 = OFF
            //Debug-Address
            
            //Sequence to read temperature
            if after(Sync,Second^000u64)  then {
                HA_Queue=HA_Queue + $R$ + HA_Split;
                HA_Queue=HA_Queue + $A$ + ROMID + HA_Split;
                HA_Queue=HA_Queue + $W0144$ + HA_Split;
                HA_Queue=HA_Queue + $R$ + HA_Split;
                HA_Queue=HA_Queue + $A$ + ROMID + HA_Split;
                HA_Queue=HA_Queue + $W0ABEFFFFFFFFFFFFFFFFFF$ + HA_Split;
                HA_Next=!HA_Next
            } endif
            
            //DS18B20 or DS18S20?
            if split(ROMID,14u16,15u16) == $10$ then NameD_DS18S20 = ON endif
            if split(ROMID,14u16,15u16) == $28$ then NameD_DS18B20 = ON endif
            
            //News from this sensor
            if event(readrs232(NameD_rawdata,NameD_Len)) and (ROMID==HA_Device)  then {
                NameD_Buffer=split(NameD_rawdata,0u16,NameD_Len);
                NameD_rawdata=split(NameD_rawdata,NameD_Len+1u16,EOS);
                /*Is it the Scratchpad?*/;
                if split(NameD_Buffer,0u16,1u16) == $BE$ then {
                    /* Hier werden ungültige Daten abgefangen*/;
                    if (size(NameD_Buffer)>=14u16) and split(NameD_Buffer,2u16,10u16) != $FFFFFFFFF$ then {
                        NameD_TemperatureRead = convert(convert($0x$+split(NameD_Buffer,4u16,5u16) + split(NameD_Buffer,2u16,3u16),0s16),0f16) / 2.0;
                        #ifdef DEBUG
                        if HA_Debug then {
                            write('9/9/9'c14,$TR:$c14 + convert(NameD_TemperatureRead,$$c14))
                        } endif;
                        #endif 
                        /*DS18S20?*/;
                        if NameD_TemperatureRead >= -55f16 and NameD_TemperatureRead <= 125f16 and NameD_DS18S20 then {
                            NameD_CR = convert(convert($0x$ + split(NameD_Buffer,14u16,15u16),0s16),0f16);
                            NameD_CP = convert(convert($0x$ + split(NameD_Buffer,16u16,17u16),0s16),0f16);
                            NameD_Temperature = NameD_TemperatureRead - 0.25 + (NameD_CP - NameD_CR) / NameD_CP
                        } endif;
                        /*DS18B20?*/;
                        if NameD_TemperatureRead > -440f16 and NameD_TemperatureRead < 1000f16 and NameD_DS18B20 then {
                            NameD_Temperature = NameD_TemperatureRead / 8.0
                        } endif
                    } endif
                } endif;
                #ifdef DEBUG
                if HA_Debug then {
                    write('9/9/9'c14,convert($R:$ + NameD_Buffer,$$c14));
                    write('9/9/9'c14,convert(Minute,$$c14)+$:T:$c14 + convert(NameD_Temperature,$$c14))
                } endif;
                #endif 
                NameD_Len = 0u16
            } endif
            
            :end
            
            :begin TemperatureGASync(NameD, ROMID,GA,Sync,Second)
            :info $Liest zyklisch die Temperatur eines Sensors(DS18S20 oder DS18B20) am OneWire aus und speichert die Temperatur in der Variable NameD_Temperature als f16 Wert und schickt den Wert sobald er sich ändert auf die angegebene Gruppenadresse. Das Makro HA7E muss eingebunden sein.$\\
                $Name des Sensors$\\
                $ROM-ID des Sensors$\\
                $Gruppenadresse, auf die der Wert geschickt werden soll(Datentyp f16)$\\
                $Ein Startimpuls zum Auslesen$
                $Eine Verzögerung in Sekunden nach dem Ausleseimpuls$ 
            :shortinfo $Liest zyklisch die Temperatur eines Sensors und sendet sie an eine Gruppenadresse$
            //Default-Value(e.g. important for webcharts)
            NameD_TemperatureRead=100.0f16
            NameD_Temperature=100.0f16
            NameD_Message=$$
            NameD_Len=0u16
            NameD_Buffer=$$
            NameD_rawdata=$$
            NameD_CR = 0f16
            NameD_CP = 0f16
            NameD_DS18S20 = OFF
            NameD_DS18B20 = OFF
            
            //Sequence to read temperature
            if after(Sync,Second^000u64)  then {
                HA_Queue=HA_Queue + $R$ + HA_Split;
                HA_Queue=HA_Queue + $A$ + ROMID + HA_Split;
                HA_Queue=HA_Queue + $W0144$ + HA_Split;
                HA_Queue=HA_Queue + $R$ + HA_Split;
                HA_Queue=HA_Queue + $A$ + ROMID + HA_Split;
                HA_Queue=HA_Queue + $W0ABEFFFFFFFFFFFFFFFFFF$ + HA_Split;
                HA_Next=!HA_Next
                
            } endif
            
            //DS18B20 or DS18S20?
            if split(ROMID,14u16,15u16) == $10$ then NameD_DS18S20 = ON endif
            if split(ROMID,14u16,15u16) == $28$ then NameD_DS18B20 = ON endif
            
            //News from this sensor
            if event(readrs232(NameD_rawdata,NameD_Len)) and (ROMID==HA_Device)  then {
                NameD_Buffer=split(NameD_rawdata,0u16,NameD_Len);
                NameD_rawdata=split(NameD_rawdata,NameD_Len+1u16,EOS);
                /*Is it the Scratchpad?*/;
                if split(NameD_Buffer,0u16,1u16) == $BE$ then {
                    /* Hier werden ungültige Daten abgefangen*/;
                    if (size(NameD_Buffer)>=14u16) and split(NameD_Buffer,2u16,10u16) != $FFFFFFFFF$ then {
                        NameD_TemperatureRead = convert(convert($0x$+split(NameD_Buffer,4u16,5u16) + split(NameD_Buffer,2u16,3u16),0s16),0f16) / 2.0;
                        #ifdef DEBUG
                        if HA_Debug then {
                            write('9/9/9'c14,$TR:$c14 + convert(NameD_TemperatureRead,$$c14))
                        } endif;
                        #endif 
                        /*DS18S20?*/;
                        if NameD_TemperatureRead >= -55f16 and NameD_TemperatureRead <= 125f16 and NameD_DS18S20 then {
                            NameD_CR = convert(convert($0x$ + split(NameD_Buffer,14u16,15u16),0s16),0f16);
                            NameD_CP = convert(convert($0x$ + split(NameD_Buffer,16u16,17u16),0s16),0f16);
                            NameD_Temperature = NameD_TemperatureRead - 0.25 + (NameD_CP - NameD_CR) / NameD_CP
                        } endif;
                        /*DS18B20?*/;
                        if NameD_TemperatureRead > -440f16 and NameD_TemperatureRead < 1000f16 and NameD_DS18B20 then {
                            NameD_Temperature = NameD_TemperatureRead / 8.0
                        } endif
                    } endif
                } endif;
                #ifdef DEBUG
                if HA_Debug then {
                    write('9/9/9'c14,convert($R:$ + NameD_Buffer,$$c14));
                    write('9/9/9'c14,convert(Minute,$$c14)+$:T:$c14 + convert(NameD_Temperature,$$c14))
                } endif;
                #endif 
                NameD_Len = 0u16
            } endif
            
            if change(NameD_Temperature) then write(GA,NameD_Temperature) endif
            :end
            und damit
            [highlight=epc]
            // Richtige Daten hier eintragen
            TemperatureGASync(NameD1, ROMID1,'1/2/3'f16,Sync,0 )
            TemperatureGASync(NameD2, ROMID2,'1/2/3'f16,Sync,20)
            TemperatureGASync(NameD3, ROMID3,'1/2/3'f16,Sync,40)
            TemperatureGASync(NameD4, ROMID4,'1/2/3'f16,Sync,50)
            // ... usw...
            Sync=AUS
            // Sync alle 5 Minuten!
            if cycle(2,30) then { Sync=!Sync } endif
            [/highlight]
            Getestet hab ich das noch nicht, aber sollte so gehen...
            offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
            Enertex Produkte kaufen

            Kommentar


              #7
              Hallo Nils,

              ich habe das Verhalten gestern auch zum ersten Mal gehabt. Meine 13 Sensoren liefen allerdings bei mir ca. 4-5 Tage nonstop ohne zwischenzeitlichen EibPC Neustart.

              Gestern enthielten dann alle meine 13 Temperatur-Charts auf dem Webserver auf einmal nur noch eine Daueranzeige bei 85°.

              Nach einem Neustart laufen die Sensoren wieder rund.

              Viele Grüße

              Michael

              Kommentar


                #8
                85 °C ist eigentlich der Power-On-Reset Wert der DS18B20 und ein Hinweis auf schlechte Verdrahtung oder falsche Ansteuerung durch den Busmaster.

                Mithin eher nicht ein Fehler des eibPC oder der Makros.

                lg

                Stefan

                Kommentar


                  #9
                  Hallo Stefan,

                  die Verkabelung ist aber eine relativ statische Komponente.

                  Wenn die Sensoren über mehrere Tage problemlos laufen, sich plötzlich komplett aufhängen und nach einem EibPC Neustart wieder problemlos laufen, kann ich nicht an ein grundlegendes Problem in der Verkabelung glauben.

                  Ich habe jetzt endlich mein externes RS232 Interface am Netbook Lauffähig und werde beim nächsten Aufhänger einmal versuchen mit einem RS232 Sniffer die Kommunikation mitzuschreiben.

                  Viele Grüße

                  Michael

                  Kommentar


                    #10
                    Ups, ich habe noch einmal im Screenshot nachgeschaut,
                    die Sensoren zeigten nicht plötzlich dauerhaft 85°C, sondern 100°C.

                    Viele Grüße

                    Michael

                    Kommentar


                      #11
                      Meine Meinung noch: das sind zu 99% Verdrahtungsfehler, Kontaktprobleme, zu lang/weit, keine geschirmte Leitung, keine verdrillten Adern verwendet, parasitär aber VDD nicht auf GND gelegt (am Sensor!).. Irgend sowas..

                      Makki
                      EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                      -> Bitte KEINE PNs!

                      Kommentar


                        #12
                        Vielleicht, jedoch folgen meine Eckdaten offensichtlich den hier verbreiteten "Spielregeln".

                        - Gesamtlänge der zwei Leitungsstränge ca. 110m
                        - 13x DS18S20 Sensoren
                        - an den Sensoren wurden kurze Drähte angelötet und durch Wago Klemmen mit der EIB Leitung verbunden (Nutzung der ws/ge Adern der EIB Leitung)
                        - Sensoranschluß 1&3 an ws (GND) und 2 an ge (Data), also parasitärer Betrieb

                        Hat den jemand den HA7E im Langzeitbetrieb und überhaupt keine Probleme mit Sensoren, welche temporär keine Daten liefern?

                        Mit temporär meine ich hier den Zeitraum zwischen zwei Restarts.

                        Kommentar


                          #13
                          Naja, ich glaub ich war der erste mit einem HA7E hier und den gibts immernoch. Fakt ist, der 1-Wire fliegt halt mal ab (85°), das bügelt man in SW aus;
                          Diese Beschreibung klingt mir eher nach einem simplen Verdrahtungsproblem (der 1-Wire funktioniert auch mit 2BM im geschlossenen Ring noch, aber eben nur noch ein bisschen/meistens..)
                          Wir hatten schon soviele obskure Sonderfälle, die zu sporadischen Ausfällen führen, das ich sie kaum aufzählen kann: Sensoren (IC's) nackig in den Estrich geworfen, elektrisch leitende Wärmeleitpaste zwischen den Anschlusspins, ungeeignete Adern in dafür ungeeigneten Klemmen uvm..

                          Makki
                          EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                          -> Bitte KEINE PNs!

                          Kommentar


                            #14
                            Zitat von Jambala Beitrag anzeigen

                            Nach einem Neustart laufen die Sensoren wieder rund.
                            Ich werde da mal nachschauen, dass wir die Initialisierung des Adapters nach solchen Fällen einfach im Makro neu machen, ein Neustart des Programms ist m.e. keine Lösung.
                            offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                            Enertex Produkte kaufen

                            Kommentar


                              #15
                              Also bei meiner Installation werden sobald der Fehler auftritt keine 100° oder 85° gesendet sondern gar kein Wert mehr. Verdrahtung schließe ich bei mir auch aus, da es wie gesagt nur 15m mit 5 Sensoren sind. Als Kabel verwende ich dieses graue Telefonkabel, keine Ahnung wie das heist. Kann es ein Problem sein dass ich an den Sensoren ein zu langes Kabel habe? Ich habe die fertig konfektionierten und da ist die Gummileitung ja um die 3m lang.

                              Ich werde wohl jetzt mal nach und nach einzelne Sensoren abklemmen und sehen ob es dann besser wird, ist nur eine umständliche Sache die ich mir gerne erspart hätte.

                              Beste Grüße
                              Nils

                              Kommentar

                              Lädt...
                              X