Ankündigung

Einklappen
Keine Ankündigung bisher.

interne Systemzeiten / if .. then .. endif ohne Anweisung

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

    [Featurewunsch] interne Systemzeiten / if .. then .. endif ohne Anweisung

    z.B. könnte man die Steilheit einer Temperaturänderung zum Einschalten der Zirkulationspumpe verwenden. Natürlich soll nicht jeder flatternde Temperatursensor die Zirku starten.

    Auf dem PC in C# habe ich es so gelöst, dass die Zeitdifferenz zwischen einem Messwert und dem übernächsten Messwert herangezogen wird, um die Steilheit des Temperaturanstiegs in K/min zu berechnen. (Direkt hinter dem Warmwasserabgang des Speichers). Funktioniert super.

    Ich sehe den EibPC als locker leistungsfähig genug, eine komplette Heizungssteuerung zu realisieren. Zum Regeln benötigt man da aber manchmal die Steilheit von Temperaturänderungen:
    Auf dem EibPC kann man jedoch leider keine kleineren Zeiten, als Sekunden abgreifen.

    Deshalb der Featurewunsch:
    Das unterliegende Linux gibt es sicher her, die µ-sekunden seit Systemstart zu übergeben. µs wird wohl niemand brauchen, aber es wäre schon schön, die seit Systemstart vergangene Zeitspanne z.B. in Milli- oder Hundertstelsekunden abfragen zu können.


    Ich bastel' es mir gerade mühsam über eine
    [highlight=epc]
    /*--------------- Sekunden seit Einschalten des EibPC --------*/
    :begin RuntimeTenthSeconds()
    :info $Gibt die seit Start des EibPC abgelaufenen Zehntelsekunden wieder$
    EibPCTotalTenthSeconds = 0u64
    EibPCTotalSeconds = 0u64
    EibPCTenthSeconds = 0u64
    InverseMilliSeconds = 0u64
    DoNothing = 0u08

    if (delayc(change(second()),999u64,InverseMilliSecond s)) then {
    DoNothing = 0u08;
    } endif
    if (change(InverseMilliSeconds/100u64)) and (InverseMilliSeconds > 0u64) then {
    EibPCTenthSeconds = mod(9u64 - ((InverseMilliSeconds) / 100u64),10u64);
    EibPCTotalTenthSeconds = EibPCTotalTenthSeconds + EibPCTenthSeconds;
    } endif
    if (change(second())) then {
    EibPCTotalSeconds = EibPCTotalSeconds + 1u64;
    EibPCTotalTenthSeconds = EibPCTotalSeconds * 10u64;
    } endif

    :return EibPCTotalTenthSeconds
    :end
    [/highlight]
    zusammen, vermutlich nicht unbedingt ressourcenschonend...

    Ach ja, der Parser mag es scheinbar nicht, wenn zwischen then und endif keine Befehlszeile liegt, deshalb die blödsinnige Zueisung auf DoNothing:

    [highlight=epc]
    /*--------------- Sekunden seit Einschalten des EibPC --------*/
    :begin RuntimeTenthSeconds()
    :info $Gibt die seit Start des EibPC abgelaufenen Zehntelsekunden wieder$
    ....
    DoNothing = 0u08

    if (delayc(change(second()),999u64,InverseMilliSecond s)) then {
    DoNothing = 0u08;
    } endif
    .........
    :end
    [/highlight]

    Featurewunsch:
    entweder
    • zwischen then .. endif (else) auch "keine" Anweisung akzeptieren
    • oder eine "Nullfunktion" bereitstellen

    Manchmal kommt man ja auch in die Verlegenheit, im "else-Zweig" schon etwas ansteuern zu können und die Komponenten für den "then-Zweig" werden erst noch geliefert, dann kann man den Code schon schön vorbereiten...

    #2
    Zitat von klaus_kraemer Beitrag anzeigen
    Auf dem EibPC kann man jedoch leider keine kleineren Zeiten, als Sekunden abgreifen.
    ich würde das so lösen (vgl. auch im Handbuch zum Thema Zykluszeit).
    [highlight=epc]
    MilliSeconds=0u64
    if (delayc(systemstart(),99999999999999u64,MilliSecon ds)) then {
    sun();
    } endif
    [/highlight]
    sun() macht übrigens nichts, also quasi eine "Nullfunktion".
    Nun kann man jedenfalls mit MilliSeconds die Zeit seit systemstart vermessen. Für deine Aufgabe (Messung einer Zeitspanne) kann man das aber auch direkt so lösen
    [highlight=epc]
    Start=9999999999999999u64
    Zeit=0u64
    if (delayc(MeineAufgabe==EIN ,Start,Zeit)) then {
    sun();
    } endif
    Dauer=0u64
    if MeineAufgabe==0 then Dauer=Start-Zeit=0u64; Zeit=0u64 endif
    [/highlight]
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #3
      Nachdem Du aus Bayern bist, bekommst Du es sicher nicht in den falschen Hals:

      A Hund bist' scho!

      Danke für diese wesentlich einfachere Lösung!

      Kommentar

      Lädt...
      X