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
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...
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.


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...
Kommentar