Hallo,
ich versuche meinen Stromverbrauch über IPS zu erfassen. Dazu habe ich den Impulsausgang eines digitalen Stromzählers (800 Impulse/kWh) mit dem Digital-Eingang 1 des Velleman USB Boards verbunden. An diesem Eingang werden die Impulse auch vom Board gezählt und können über die Funktion VelleUSB_ReadCounter ausgelesen werden.
Im Startup-Script lese ich diesen Counter aus und speichere ihn in einer Variablen.
In IPS kann man dem Eingang eine Boolean-Variable zuweisen. Diese triggert einen Script, der die Counter-Variable bei jedem Impuls um eins hochzählt und die Boolean-Variable wieder auf "false" setzt. Insgesamt würde ich erwarten, dass der Zähler des USB-Boards und der vom Script bediente Zähler synchron laufen. Wenn ich allerdings nach ein paar Minuten die beiden Zähler vergleiche, tauchen da recht grosse Differenzen auf (IPS-Zähler ist deutlich niedriger).
Wenn ich mich nun mit dem Rechner vor den Zähler setze (der zeigt seine Impulse über eine LED an) und im Debugfenster verfolge, wie oft der Script getriggert wird, kann man recht deutlich sehen, dass IPS nur "gelegentlich" die Boolean-Variable korrekt ansteuert, obwohl nur alle 5-7 Sekunden ein Impuls kommt. Der Zähler des USB-Boards zählt hingegen alle Impulse korrekt mit.
Ich muss also davon ausgehen, dass die Strecke Stromzähler->USB-Board ok ist, denn der Zähler auf dem USB-Board und der Stromzähler laufen synchron. Die Übertragung vom USB-Board zum PC ist auch ok, denn die Velleman-Software zeigt die hereinkommenden Impulse an und die laufen ebenfalls synchron mit der LED des Stromzählers.
Bleibt noch IPS. Dort habe ich das Interface auf "Trigger High" gestellt. Die Boolean-Variable wird auch wie erwartet (wenn IPS es denn wahrnimmt) gesetzt, bzw. aktualisiert. Beobachtet man das Variablenfenster und die Stromzähler-LED, fällt ebenfalls auf, dass die Boolean-Variable NICHT synchron mit der LED läuft, sondern den einen oder anderen Impuls nicht mitbekommt.
Da nicht allzu viele Impulse kommen, resultieren die Differenzen auch nicht aus irgendwelchen Überläufen (ca. alle 6 Sekunden ein Impuls = 10 Impulse/Minute = 600 Impulse/Stunde).
Im Startup-Script wird die Counter-Variable mit dem aktuellen Zählerstand des USB-Boards initialisiert :
PHP-Code:
SetValueInteger("AZ_IO_Counter", VelleUSB_ReadCounter(12345, 1));
Der OnUpdate-Trigger startet dann den Script zum Hochzählen (die Trigger-Variable ist Boolean und heisst "AZ_IO":
PHP-Code:
SetValueInteger($IPS_VARIABLE."_Counter", GetValueInteger($IPS_VARIABLE."_Counter") + 1);
Eigentlich recht trivial - wenn nur AZ_IO bei jedem Impuls bedient werden würde <seufz>.
Habe ich etwas übersehen oder hat das Velleman-Modul in IPS da tatsächlich ein Problem ?
Grüsse
Uwe