So, hier nun also auch das Makro für den eigentlichen Zähler.
Da die Erfassung der Betriebs-Stunden bzw. -Minuten langfristig erfolgen soll, wird der Wert im Flash gesichert gegen Stromausfall und Neustart.
Dazu noch eine Frage an die Flash-Experten: Würde es die Hardware mehr oder weniger belasten, wenn ich alle (bis zu 350=1400/4) Zähler in 1 gemeinsamen Speicherplatz (per stringcast/stringset) setzen würde statt in jeweils einen eigenen Speicherplatz? Der 1 gemeinsame würde dann ja recht häufig neu geschrieben.
[highlight=epc]
// Betriebsstundenzaehler
// @date 15.01.2014
// @version 1
// @author JensM
:begin Betriebsminutenzaehler(Name, InStatus, OutMinutenGA, Speicherplatz)
:info $Liefert die Minuten (u32), die ein Verbraucher eingeschaltet ist. Damit der Wert beim Stromausfall/Neustart nicht verloren geht, wird er im Flash gespeichert.$ \\
$Name des Makros (muss eindeutig sein)$\\
$Status des Verbrauchers. Wenn dieser EIN ist, läuft der Zaehler. (b01, GA oder Variable)$\\
$Gruppenadresse, auf die das Makro die Laufzeit des Verbrauchers in Minuten schreibt (u32, GA)$\\
$ID für einen Speicherplatz im Flash (u16, muss konstant und eindeutig sein)$
:shortinfo $Zähler für Betriebsminuten$
// Wert mit 0 initialisieren
Name_Minuten = 0u32;
// Wert jede Minute hochzaehlen
if cycle(01,00) and InStatus then Name_Minuten = Name_Minuten + 1u32 endif;
// GA und Flash aktualisieren, wenn der Verbraucher ausgeschaltet wird (oder bei Betrieb einmal stündlich)
if InStatus==AUS or (mtime(59,00) and InStatus==EIN) then {
writeflash(Name_Minuten, Speicherplatz);
write(OutMinutenGA, Name_Minuten);
} endif;
// Beim Systemstart Wert aus dem Flash lesen (und auf die GA schreiben)
if systemstart() then {
readflash(Name_Minuten, Speicherplatz);
write(OutMinutenGA, Name_Minuten);
} endif;
:end
[/highlight]
Da die Erfassung der Betriebs-Stunden bzw. -Minuten langfristig erfolgen soll, wird der Wert im Flash gesichert gegen Stromausfall und Neustart.
Dazu noch eine Frage an die Flash-Experten: Würde es die Hardware mehr oder weniger belasten, wenn ich alle (bis zu 350=1400/4) Zähler in 1 gemeinsamen Speicherplatz (per stringcast/stringset) setzen würde statt in jeweils einen eigenen Speicherplatz? Der 1 gemeinsame würde dann ja recht häufig neu geschrieben.
[highlight=epc]
// Betriebsstundenzaehler
// @date 15.01.2014
// @version 1
// @author JensM
:begin Betriebsminutenzaehler(Name, InStatus, OutMinutenGA, Speicherplatz)
:info $Liefert die Minuten (u32), die ein Verbraucher eingeschaltet ist. Damit der Wert beim Stromausfall/Neustart nicht verloren geht, wird er im Flash gespeichert.$ \\
$Name des Makros (muss eindeutig sein)$\\
$Status des Verbrauchers. Wenn dieser EIN ist, läuft der Zaehler. (b01, GA oder Variable)$\\
$Gruppenadresse, auf die das Makro die Laufzeit des Verbrauchers in Minuten schreibt (u32, GA)$\\
$ID für einen Speicherplatz im Flash (u16, muss konstant und eindeutig sein)$
:shortinfo $Zähler für Betriebsminuten$
// Wert mit 0 initialisieren
Name_Minuten = 0u32;
// Wert jede Minute hochzaehlen
if cycle(01,00) and InStatus then Name_Minuten = Name_Minuten + 1u32 endif;
// GA und Flash aktualisieren, wenn der Verbraucher ausgeschaltet wird (oder bei Betrieb einmal stündlich)
if InStatus==AUS or (mtime(59,00) and InStatus==EIN) then {
writeflash(Name_Minuten, Speicherplatz);
write(OutMinutenGA, Name_Minuten);
} endif;
// Beim Systemstart Wert aus dem Flash lesen (und auf die GA schreiben)
if systemstart() then {
readflash(Name_Minuten, Speicherplatz);
write(OutMinutenGA, Name_Minuten);
} endif;
:end
[/highlight]
Kommentar