[vz-dev] Zeitstampfer - was: Re: Fwd: watchcat.c und Hardwareansteuerung
Jens Wilmer
volkszaehler at jenswilmer.de
Wed May 5 13:04:02 CEST 2010
Hallo zusammen,
Am 05.05.2010 07:46, schrieb Justin Otherguy:
>>> Ich finde es sehr schick, eine möglichst fein aufgelöste Darstellung zu haben - vielleicht sollte man das aber auch nicht überbewerten. Im Anhang zu Folien zum DFN-Workshop sind Graphen mit unterschiedlicher zeitlicher Auflösung zum Vergleich abgebildet. Wenn man sich das anschaut wird klar, dass 15 Minuten fast schon ausreichen; die reale Aussagekraft steigt m.E. damit nicht mehr besonders durch eine höhere Auflösung. Wenn man also 1 oder 5 Minuten wählt, sollte das wunderbar sein.
>>>
>>>
>> Für nicht Zweierpotenz Sekunden Intervalle würden auch im Interrupt Code
>> einige extrem schnell ausgeführte binäre Verundungen durch sehr langsame
>> Divisionen ersetzt.
>>
> können wir hier nicht einen Timer laufen lassen und dann jeweils die Zählerstände auslesen?
>
Da müsste man mal schauen, ob im Ethersex noch ein Timer frei ist. Der
würde wieder eine Interruptroutine brauchen, die die Daten sammelnd
wegschreibt. Dann müsste der Timer noch mit der Uhr Synchronisiert
werden, Aus den Timerdaten müsste der Zeitstempel berechnet werden (Je
nachdem ob es Zweierpotenzen von Sekunden sind nicht so aufwändig oder
recht aufwändig, aber nicht so relevant, da es nicht im Interrupt
läuft). Durch die Synchronisation auf die Zeit hat das Zeitintervall
schon mal eine Ungenauigkeit von einer Sekunde. Ich glaube nicht, dass
die Timer-Variante einen Vorteil bringt.
>> Ein Nachteil ist der höhere Speicherverbrauch. Bei der
>> Einzelimpulsvariante kann sich ein 644 64 Pufferspeicherplätze leisten.
>>
> damit wir vom gleichen reden:
> wie groß würdest Du den Puffer machen?
>
So groß, wie Platz zur Verfügung steht. (Anzahl der Speicherplätze ist
wieder einer Zweierpotenz)
> Kann es sein, dass wir nicht vom gleichen sprechen?
>
> Meine Vorstellung ist die, dass wir für das gewählte Intervall die _Anzahl_ der Impulse _zählen_
> Die Details (zu welchem Zeitpunkt kamen die einzelnen Impulse) würde ich dabei runter fallen lassen - diese halte ich auch für verzichtbar.
>
Bei dem Puffer für die "Einzelimpulsvariante" handelt es sich um einem
Puffer in dem pro Eintrag der Zeitstempel und der Pin steht, an dem das
Ereignis eingetreten ist. Da die Pufferinhalte nicht unbedingt zu der
Zeit versendet werden, zu der sie auftreten, halte ich den Zeitstempel
für nicht verzichtbar, außer wenn Du nur grob die Anzahl der Impulse pro
Tag zählen möchtest (Pro Stunde könnte auch noch recht genau sein, wenn
die "Zwangstrennung" nicht gerade zum Stundenübergang stattfindet.)
> Lass uns zuerst mal klären, ob wir hier vom Gleichen reden.
>
> Ich verstehe Dich so, dass Du pro Impuls auch den Zeitpunkt speichern würdest, zu dem er eingetroffen ist.
>
Generell: Jain, im Falle der Einzelimpulsvariante Ja, im Falle der "High
Volume" Variante fast schon nein.
Die Highvolume Variante berechnet die Pufferort anhand der Zeit und
summiert dort die Impulse.
In der Highvolume Variante besteht ein Puffereintrag aus einem Zähler
pro überwachtem Pin.
Als Beispiel sei hier mal ein ein Puffer mit vier Einträgen ein am
Anfang der Unixzeit gegeben.
In der nullten Sekunde kommt ein Impuls an Pin 1 an, dann wird im
nullten Pufferplatz der Zähler für Pin 1 um eins erhöht. Kommt noch ein
Impuls in der nullten Sekunde an, wird der Zähler um noch mal um eins
erhöht. Kommt dann in Sekunde drei ein Impuls an Pin 2, wird im
Pufferspeicherplatz drei der Zähler für Pin 2 um eins erhöht. In Sekunde
vier ist dann wieder Pufferspeicherplatz 0 an der Reihe, in Sekunde fünf
Pufferspeicherplatz 1 und so weiter.
Setzt man die Genauigkeit auf 4 Sekunden hoch, landen Sekunde 0-3,
16-19, 32-35... im Pufferspeicherplatz 0, Sekunde 4-7, 20-23, 36-39...
in Pufferspeicherplatz 1, Sekunde 8-11, 24-27, 40-43... in
Pufferspeicherplatz 2, Sekunde 12-15, 28-31, 44-47... in
Pufferspeicherplatz 3.
Die Routine in der Hauptschleife geht jetzt die Pufferplätze durch und
überprüft, ob in in einem der nicht aktuellen Plätze (In Sekunde 0
werden die Pufferspeicherplätze 1, 2 und 3 geprüft, in einer Sekunde,
die die Pufferspeicherplatz 2 gehört die Plätze 0, 1 und 3 ...) etwas
von null verschiedenes steht und das dann in ein Paket verpackt und
gesendet. Dabei wird der Zeitstempel auf die erste Sekunde des letzten
Zeitintervalls gesetzt, für das der Pufferspeicherplatz zuständig war.
Hier stehen die Zeitstempel nicht wirklich im Puffer, haben aber etwas
damit zu tun.
Dadurch ergibt sich auch die merkwürdige Pufferzeit: Bei Einzelimpulsen
werden "Pufferspeicherplätze" Impulse gepuffert, bei der Sammlung werden
"Pufferspeicherplätze" Zeitintervalle gepuffert (Genau genommen sogar
-1). Wenn diese Zeit überschritten wird, gehen die Impulse aber nicht
ganz verloren, sondern werden sozusagen dem nächsten passenden
Zeitintervall aufgeschlagen. Dadurch fehlt bei einem größeren
betrachteten Intervall nichts und die Daten stimmen wieder, bei genauer
Betrachtung sind dafür gleich mehrere Intervalle "falsch" sowohl die
Intervalle in denen die Impulse "fehlen" als auch die Intervalle, denen
sie zugeschlagen wurden.
Ich hoffe, ich diese Erklärung hilft ein wenig weiter.
Bis bald,
Jens Wilmer
More information about the volkszaehler-dev
mailing list