[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