Ankündigung

Einklappen
Keine Ankündigung bisher.

In der Tiefe: Validierungskonzept

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

    #91
    Also ganz ehrlich, das ist eigentlich IMHO noch nix halbes und nix ganzes.

    Warum wollt ihr nicht systemstart() nutzen? Ich denke weil ihr nicht wißt, ob nun alle Telegramme die ihr für die Logik braucht auch eingetroffen sind.

    Das führt mich zu der Frage, ob es nicht sinnvoll ist eine Funktion valid( GA ) zu erstellen die dann EIN zurückgibt, sobald diese GA erstmalig vom Bus geliefert wurde. Natürlich müßte das Validierungsschema erweitert werden, das der Code der im then { ... } endif steht immer ausgeführt wird.

    So würde dann der Code

    Code:
    if valid( GAWasserstand ) then {
       if GAWasserstand < 100% then write( GAPumpe, EIN ) endif;
       if GAWasserstand = 100% then write( GAPumpe, AUS) endif
    } endif
    dazu führen, das erst dann was mit der Pumpe geschaltet wird, wenn auch klar ist, wie der Wasserstand wirklich ist.

    Zusätzlich könnte man auch mit setinvalid( GA) eine Funktion einführen, die das Gültigkeitsbit zurücksetzt (zum debuggen zum Beispiel)

    Nur meine 2 cent ...

    Gruß,
    Bernd

    Kommentar


      #92
      Zitat von Uwe! Beitrag anzeigen
      Also ich parametriere (wo und wie auch immer) 20 Sek. und dann legt die Kiste erst 20 Sek. nach Systemstart() mit dem allem los, was nicht ausdrücklich als
      Code:
      if systemstart() then ....
      definiert ist.

      So hab ich jedenfalls Matthias verstanden.

      Meine Idee war es nun eben nicht irgend wo nur eine Zahl (die 20 Sek.) hinterlegen zu können, sondern während der Systemstarttätigkeiten selbst mit Logik den Schalter umlegen zu können. Das kann dann der eine trotzdem einfach mit einer festen Zeit machen, der andere übrprüft, ob bestimmte Antworten eingetroffen sind und der dritte lässt sich ganz was anderes einfallen (vielleicht einen Taster, den er manuell bedient)
      Systemstart ist doch genau während dem allerersten Schleifendurchlauf auf EINS, beim zweiten, also schon 1 ms später, ist systemstart() wieder auf AUS. Nach meine Verständniss wird also in einer Abfrage
      if systemstart() then .... endif
      der Then-Zweig genau ein einziges mal durchlaufen. Wann willst Du denn da die Bedingung "endsystemstart()=EIN" setzten?

      Oder ist Dein Ansatz, das systemstart() solange EIN bleibt, bis alle read()-Anweisungen im then.zweig eine Antwort empfangen haben?
      Gruss Pio

      Kommentar


        #93
        Zitat von anlo007 Beitrag anzeigen
        Das wäre mir eine große Hilfe, denn es würde meine Probleme beim Systemstart vollständig lösen!
        Hab ich doch vorgeschlagen:

        [EibPC=0u64] oder meinetwegen [Systemstart]
        bla
        blubb

        wird genau einmal beim Systemstart abgearbeitet, so wie ein
        if systemstart then ... endif

        [EibPC=1000u64]
        wird eine Sekunde nach systemstart regelmässig abgearbeitet.
        Gruss Pio

        Kommentar


          #94
          @bernd:
          Für das Thema der bisher 'ungültigen' GAs stimme ich zu. Hier sollte unabhängig von dem Wunsch zum Systemstartproblem etwas getan werden.

          Wenn man das valid() einfach als AND anfügt, kann ja auch das Validierungsschema bleiben, wird halt alles etwas länger und unübersichtlicher, grr.

          Beim Startup-Bereich oder anderer Lösungen geht es aber auch um Probleme, wie der fehlenden Zeit oder anderer Themen, die man einfach machen will, bevor die restliche Logik anfängt.

          Nur den systemstart() in einem Flag zu speichern, das ich nach einer gewissen Zeit wieder lösche, könnte ich jetzt schon machen und werde ich evtl. weiterhin machen, weil eben ein Teil der Logik möglichst schnell lauffähig sein soll. Andererseits ist es ziemlich egal, ob der eibPC jetzt oder erst 3 Minuten später wieder läuft, wichtig ist, dass der mir nicht die Rollos runter fährt, weil er meint es sei der 1. Jan und da ist es um 17:00 schon dunkel.
          BR
          Marc

          Kommentar


            #95
            Zitat von bmx Beitrag anzeigen
            Code:
            if valid( GAWasserstand ) then {
               if GAWasserstand < 100% then write( GAPumpe, EIN ) endif;
               if GAWasserstand = 100% then write( GAPumpe, AUS) endif
            } endif
            Damit wären wir dann wieder bei der Lösung, eine Art if zu haben, dessen Bedingung nicht dem Validierungsschema unterliegt (sondern als eine Art Flag in jedem Durchlauf ausgewertet wird) und dessen then-Zweig wiederum nicht komplett auf invalid gesetzt wird sondern wie Code außerhalb ganz "normal" dem Validierungsschema unterliegt.
            Dann könnte jeder seine eigenen "Bereiche" schaffen und freigeben oder sperren wie er will.
            Das wurde aber schon mal angesprochen und von Enertex seinerzeit abgelehnt. Aber vielleicht kommt es ja doch noch einmal, so wie auch das eval()...

            Ich würde es begrüßen und diese Diskussion hier wäre zuende.
            Tessi

            Kommentar


              #96
              Zitat von anlo007 Beitrag anzeigen
              ..und mit der Zeit erst mal arbeiten kann, bis der EibPC oder das wiregate wieder die genaue Zeit empfangen hat.
              Sorry, das muss ich jetzt mal kurz einwerfen: Das Wiregate hat eine battriegepufferte RTC und da läuft ein ntp - in richtig! Also die drift ist bekannt etc.pp.
              Falsche/kaputte Uhren lösen bei mir - egal in welchem Verbindungszustand - ab ca. 50ms Abweichung starke allergische Schockreaktionen aus
              Sollte also mal halbwegs passen solange es ab und an (einmalig für ein paar Stunden&alle paar Wochen danach - sollte für die von mir geforderte Präzision von 50ms reichen) ins Netz kommt..

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

              Kommentar


                #97
                wobei auch eine perfekte RTC im EibPC nur eines der vielen Probleme beim Startup lösen würde.
                ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

                Kommentar


                  #98
                  Zitat von pio Beitrag anzeigen
                  Nach meine Verständniss wird also in einer Abfrage
                  if systemstart() then .... endif
                  der Then-Zweig genau ein einziges mal durchlaufen. Wann willst Du denn da die Bedingung "endsystemstart()=EIN" setzten?
                  Das ist schon richtig, aber ich kann "if systemstart()....endif" ja beliebig oft verwenden. Muss halt alles was am Anfang gemacht werden soll in ein "if systemstart()....endif" einpacken. Eine eigene Sektion [Systemstart] wäre auch aus meiner Sicht übersichtlicher, aber da sträubt sich Michael (noch)

                  Zitat von pio Beitrag anzeigen
                  Oder ist Dein Ansatz, das systemstart() solange EIN bleibt, bis alle read()-Anweisungen im then.zweig eine Antwort empfangen haben?
                  nicht "bis alle Antworten eingetroffen sind" (weil das ggf. amal auch nie passiert), sondern bis ich mit entsprechender logik den Systemstart als beendet erkläre. Dafür war mein "EndSystemstart()" gedacht.
                  ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

                  Kommentar


                    #99
                    Zitat von makki Beitrag anzeigen
                    Sorry, das muss ich jetzt mal kurz einwerfen: Das Wiregate hat eine battriegepufferte RTC und da läuft ein ntp - in richtig! Also die drift ist bekannt etc.pp.
                    Das Problem mit den Uhrneustart stellt sich für 99% der Anwender nicht, da der EibPC beim Boot sich mit dem ntp breits neu synchronisiert hat, bis er wieder "online" ist. Für die meisten hier gehts doch um das Abbild der Gruppenadressen im Zustandsspeicher. Und es geht darum, dieses Abbild geziehlt oder irgendwie gesteuert einzulesen bevor die Verarbeitung beginnt.
                    Daher mal noch ein Vorschlag: Will man unbedingt eine eigene []-Sektion, reicht es aus

                    [ReadStartup]
                    GA1
                    GA2


                    zu definieren und der EibPC führt diese Reads aus, wartet eine parametrierbare Zeit aufs Eintreffen und legt dann las.
                    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                    Enertex Produkte kaufen

                    Kommentar


                      Grundsätzlich:


                      Zitat von enertegus Beitrag anzeigen
                      , wartet eine parametrierbare Zeit aufs Eintreffen und legt dann las.
                      Genau da bin ich halt der Meinung dass man dem Anwender die Flexibilität lassen sollte, nicht nur zeitabhängig zu entscheiden, wann der EibPC "los legt"

                      Aber Dein Vorschlag wäre auf jeden Fall eine erhebliche Verbesserung zum aktuellen Stand!
                      ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

                      Kommentar


                        Zitat von Uwe! Beitrag anzeigen
                        wobei auch eine perfekte RTC im EibPC nur eines der vielen Probleme beim Startup lösen würde.
                        Ne perfekte RTC gibt's nicht. Die laufen alle mehr oder weniger krum Aber das bringt alles nichts: Der EibPC hat keine RTC und braucht eben beim Start eine Internetverbindung zum Uhrenabgleich oder ein KNX-Gerät zum Abfragen.
                        Firma: Enertex Bayern GmbH, Ebermannstädter Straße 8, 91301 Forchheim
                        Amazon: KNXnet/IP Router
                        , KNXnet/IP Interface

                        Kommentar


                          fehlt uns vielleicht noch so was wie "answer(GA)" mit dem man abfragen kann, ob zu einer bestimmten GA seit dem letzten read() ein Antworttelegramm eingetroffen ist?
                          ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

                          Kommentar


                            Zitat von makki Beitrag anzeigen
                            Falsche/kaputte Uhren lösen bei mir - egal in welchem Verbindungszustand - ab ca. 50ms Abweichung starke allergische Schockreaktionen aus
                            Makki
                            Makki, zieh mal aufs Land, bei den dortigen Internet-Verhältnissen bist du am Ende froh, wenn die Uhr auf eine Minute genau geht..........

                            Außerdem kommt es dort auch nicht auf 5 Minuten an.
                            Der schöne Niederrhein läßt Grüssen

                            Andreas


                            Alter Hof mit neuer Technik

                            Kommentar


                              Zitat von salixer Beitrag anzeigen
                              Ne perfekte RTC gibt's nicht. Die laufen alle mehr oder weniger krum.
                              Eben! Drum meinte ich auch, dass sich die Diskussion darüber nicht lohnt. Denn selbt wenn er eine perfekte hätte, würde das da eigentliche Problem nicht lösen.
                              ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

                              Kommentar


                                Zitat von Uwe! Beitrag anzeigen
                                fehlt uns vielleicht noch so was wie "answer(GA)" mit dem man abfragen kann, ob zu einer bestimmten GA seit dem letzten read() ein Antworttelegramm eingetroffen ist?
                                Man kann ja auch als letztes einen Temperaturwert abfragen mit if after (systemstart(), 20000) und diesen auf <>0 kontrollieren, dann weiß man das die letzte Abfrage beantwortet ist und damit den Startbereich verlassen. omit entweder Zeitlich gesteuert oder über eine definierte Abfrage.
                                Der schöne Niederrhein läßt Grüssen

                                Andreas


                                Alter Hof mit neuer Technik

                                Kommentar

                                Lädt...
                                X