Hallo,
eigentlich müsste ich den Inhalt dieses Posts besser in 5 bis 6 separate Threads aufteilen, aber dann geht der Zusammenhang verloren und das wahre "Ausmaß" meines "Unmuts" würde evtl. nicht deutlich werden
Ich beschäftige mich bei meinem KNX-Testaufbau erst seit kurzem mit dem EibPC (v3.001). Bei der Implementierung einer ersten Funktionalität, stoße ich aber gleich auf mehrere, nicht enden wollende Probleme.
Ich möchte mit dem EibPC einen 1-wire Temperaturwert per Wiregate IP-Extender erfassen. Dafür gibt es "eine" Makrobibliothek EnertexOneWire.lib und das Makro OWextender. Soweit so gut, aber dann geht es auch schon los.
In der Bibliothek gibt es zwei EnertexOneWire-Dateien, EnertexOneWire.lib und EnertexOneWire2.lib. Für mich bedeutet die 2 eine neuere (weil zweite) Version. Laut CVS-Daten im Header handelt es sich bei dieser Datei aber um Revison 1.3, im Gegensatz zu 1.4 bei der anderen Datei, also in Wahrheit um die ältere Version. Die manuell gepflegte Versionsangabe im Header ist allerdings mit v1.016 bei beiden Dateien identisch. Wer soll da durchsehen?
Ich hab jetzt schon an mehreren Stellen mit bekommen, dass es Enertex nicht so mit Versionsnummern hat, aber hier sollte eine bessere Lösung gefunden werden. Zumal es wohl seit EibPC Version 3 auch Makrobibliotheken gibt, die ausschließlich für die aktuelle oder die ältere Version geeignet sind.
Nachdem ich die "korrekte" Makrobibliothek erfolgreich im EibStudio (v3.003) hinzugefügt und mittels Makro-Dialog die erforderlichen Daten eingegeben habe, wird folgende Zeile im Anwendungsprogramm erzeugt:
Abgesehen davon, dass im Dialog bei dem Beispiel des Parameters Startabfrage mit cycle(60.0) das falsche Trennzeichen (Punkt statt Komma) angegeben ist, was bei entsprechender Verwendung zu einem ersten Compilerfehler führt, meldet dieser auch noch den bereits bekannten aber bisher noch nicht korrigierten Fehler, dass die Sensor-ID zu lang ist, was mir aber auch erst durch die Antwort zum verlinkten Kommentar klar wurde, nicht durch die Fehlermeldung an sich.
Da die Sensor-ID anscheinend(*) auch ohne den Punkt angegeben werden kann, was bzgl. Syntax-Hervorhebung sogar besser aussieht, da die 28 nun nicht mehr blau sondern schwarz wie auch der Rest der ID dargestellt wird, kann ich diesen Fehler schon mal umgehen. Wenn ich die Änderung allerdings per Makro-Dialog vornehme, wird beim Parameter Startabfrage aus dem urspünglich eingetragenen Wert cycle(0,10) ein cycle {0} {10}, was mit OK auch genau so übernommen wird und natürlich gleich zum nächsten Compilerfehler führt.
(*) Dass der Punkt in der Sensor-ID nicht notwendig ist, zeigt mir der Beispielaufruf im Browser:
URL:
http://192.168.100.10/cgi-bin/owget?...00/temperature
Antwort:
2840B6AA040000/temperature
22.3125
Irgendwann ist auch die letzte meinerseits unverschuldete Ursache für Compilerfehler behoben und ich kann das Anwendungsprogramm, welches im Zyklus von 10 Sekunden die Temperatur abfragt, auf den EibPC laden und starten. Nun erhalte ich bei jeder ungeraden inkl. der ersten Abfrage ein invalid telegr in der Debug-Ausgabe und sonst den erwarteten Temperaturwert (siehe Konsolenauschnitt unten). Ich habe mit verschiedenen Temperaturauflösungen (temperature9 bis temperature12) und unterschiedlichen Zykluszeiten getestet und kann die Ursache folgendermaßen einschränken:
Die Temperatur wird nur dann korrekt ausgewertet, wenn die Antwort aus dem Cache des Wiregate IP-Extenders (IPE) geliefert wird.
Dazu noch folgende ausführliche Erklärung:
Die Konvertierung des Temperaturwertes eines 1-wire Temperatursensors dauert bei maximaler Auflösung ca. 700ms. Genau diese Zeit dauert es auch im Browser bis die Antwort erscheint, wenn man die oben genannte URL aufruft. Der IPE cacht jedoch eine Sensorabfrage für 10s, wodurch die folgenden Anfragen sofort und ohne Verzögerung beantwortet werden. Erst ca. 10,7s nach der ersten Anfrage führt eine erneute Konvertierung wieder zu einer Verzögerung der Antwort.
Meine verschiedenen Tests und auch mein Beispiel mit einer Zykluszeit von 10s zeigen, dass jeweils die ungecachte Antwort ein "invalid telegr" zur Folge hat. Wenn ich bei meinem Beispiel parallel im Browser den Temperaturwert immer kurz vor dem EibPC abfrage, wodurch dieser immer den gecachten Wert erhält, habe ich kein einziges "invalid telegr" mehr. Im Gegesatz dazu, habe ich bei einer Zykluszeit > 10s und ohne parallele Abfrage per Browser nur noch "invalid telegr" Antworten in der Debug-Ausgabe.
Da im Browser IMMER ein Temperaturwert geliefert wird, kann das Problem nur am EibPC liegen und dort eigentlich nur mit der größeren zeitlichen Differenz zwischen sendtcp und readtcp zusammen hängen. Andererseits hat es bei meinen Tests nichts gebracht, die Auflösung/Genauigkeit auf temperature9 zu setzen. Das Verhalten ist identisch mit dem bei temperature12.
Kann jedmand dieses Verhalten nachvollziehen, bestätigen, erklären oder gar beheben? Dann bitte!
Wer es geschafft hat bis hierhin durchzuhalten (Respekt), dem möchte ich abschließend noch folgende Frage stellen:
Wird das bei anderen Makros genauso ablaufen oder habe ich gleich im ersten Versuch das mit Abstand schlimmste Beispiel erwischt?
Grüße
Erik
eigentlich müsste ich den Inhalt dieses Posts besser in 5 bis 6 separate Threads aufteilen, aber dann geht der Zusammenhang verloren und das wahre "Ausmaß" meines "Unmuts" würde evtl. nicht deutlich werden

Ich beschäftige mich bei meinem KNX-Testaufbau erst seit kurzem mit dem EibPC (v3.001). Bei der Implementierung einer ersten Funktionalität, stoße ich aber gleich auf mehrere, nicht enden wollende Probleme.
Ich möchte mit dem EibPC einen 1-wire Temperaturwert per Wiregate IP-Extender erfassen. Dafür gibt es "eine" Makrobibliothek EnertexOneWire.lib und das Makro OWextender. Soweit so gut, aber dann geht es auch schon los.
In der Bibliothek gibt es zwei EnertexOneWire-Dateien, EnertexOneWire.lib und EnertexOneWire2.lib. Für mich bedeutet die 2 eine neuere (weil zweite) Version. Laut CVS-Daten im Header handelt es sich bei dieser Datei aber um Revison 1.3, im Gegensatz zu 1.4 bei der anderen Datei, also in Wahrheit um die ältere Version. Die manuell gepflegte Versionsangabe im Header ist allerdings mit v1.016 bei beiden Dateien identisch. Wer soll da durchsehen?

Ich hab jetzt schon an mehreren Stellen mit bekommen, dass es Enertex nicht so mit Versionsnummern hat, aber hier sollte eine bessere Lösung gefunden werden. Zumal es wohl seit EibPC Version 3 auch Makrobibliotheken gibt, die ausschließlich für die aktuelle oder die ältere Version geeignet sind.
Nachdem ich die "korrekte" Makrobibliothek erfolgreich im EibStudio (v3.003) hinzugefügt und mittels Makro-Dialog die erforderlichen Daten eingegeben habe, wird folgende Zeile im Anwendungsprogramm erzeugt:
Code:
OWextender(Temp1,192.168.100.10,28.40B6AA040000,temperature, cycle(0,10))
Da die Sensor-ID anscheinend(*) auch ohne den Punkt angegeben werden kann, was bzgl. Syntax-Hervorhebung sogar besser aussieht, da die 28 nun nicht mehr blau sondern schwarz wie auch der Rest der ID dargestellt wird, kann ich diesen Fehler schon mal umgehen. Wenn ich die Änderung allerdings per Makro-Dialog vornehme, wird beim Parameter Startabfrage aus dem urspünglich eingetragenen Wert cycle(0,10) ein cycle {0} {10}, was mit OK auch genau so übernommen wird und natürlich gleich zum nächsten Compilerfehler führt.
(*) Dass der Punkt in der Sensor-ID nicht notwendig ist, zeigt mir der Beispielaufruf im Browser:
URL:
http://192.168.100.10/cgi-bin/owget?...00/temperature
Antwort:
2840B6AA040000/temperature
22.3125
Irgendwann ist auch die letzte meinerseits unverschuldete Ursache für Compilerfehler behoben und ich kann das Anwendungsprogramm, welches im Zyklus von 10 Sekunden die Temperatur abfragt, auf den EibPC laden und starten. Nun erhalte ich bei jeder ungeraden inkl. der ersten Abfrage ein invalid telegr in der Debug-Ausgabe und sonst den erwarteten Temperaturwert (siehe Konsolenauschnitt unten). Ich habe mit verschiedenen Temperaturauflösungen (temperature9 bis temperature12) und unterschiedlichen Zykluszeiten getestet und kann die Ursache folgendermaßen einschränken:
Die Temperatur wird nur dann korrekt ausgewertet, wenn die Antwort aus dem Cache des Wiregate IP-Extenders (IPE) geliefert wird.
Dazu noch folgende ausführliche Erklärung:
Die Konvertierung des Temperaturwertes eines 1-wire Temperatursensors dauert bei maximaler Auflösung ca. 700ms. Genau diese Zeit dauert es auch im Browser bis die Antwort erscheint, wenn man die oben genannte URL aufruft. Der IPE cacht jedoch eine Sensorabfrage für 10s, wodurch die folgenden Anfragen sofort und ohne Verzögerung beantwortet werden. Erst ca. 10,7s nach der ersten Anfrage führt eine erneute Konvertierung wieder zu einer Verzögerung der Antwort.
Meine verschiedenen Tests und auch mein Beispiel mit einer Zykluszeit von 10s zeigen, dass jeweils die ungecachte Antwort ein "invalid telegr" zur Folge hat. Wenn ich bei meinem Beispiel parallel im Browser den Temperaturwert immer kurz vor dem EibPC abfrage, wodurch dieser immer den gecachten Wert erhält, habe ich kein einziges "invalid telegr" mehr. Im Gegesatz dazu, habe ich bei einer Zykluszeit > 10s und ohne parallele Abfrage per Browser nur noch "invalid telegr" Antworten in der Debug-Ausgabe.
Da im Browser IMMER ein Temperaturwert geliefert wird, kann das Problem nur am EibPC liegen und dort eigentlich nur mit der größeren zeitlichen Differenz zwischen sendtcp und readtcp zusammen hängen. Andererseits hat es bei meinen Tests nichts gebracht, die Auflösung/Genauigkeit auf temperature9 zu setzen. Das Verhalten ist identisch mit dem bei temperature12.
Kann jedmand dieses Verhalten nachvollziehen, bestätigen, erklären oder gar beheben? Dann bitte!
Code:
EibParser wurde ohne Fehler beendet. (c) 2008-2014 Enertex Bayern GmbH www.enertex.de % Zusammenstellen der Projektdaten: % Testboard.esf, programm_owtest.epc, EnertexOneWire.lib % Projektdaten erfolgreich zum EibPC übertragen. % D:/Dev/KNX/EibStudio/EibstudioData/nconf -k 192.168.100.30 % D:/Dev/KNX/EibStudio/EibstudioData/nconf -c "D:/Dev/KNX/EibStudio/EibstudioData/tmpConf.txt" 192.168.100.30 % Datenübertragung beendet. % Programm wird neu gestartet. % Startvorgang beendet. EibPC befindet sich ab jetzt in regulaerem Betriebsmodus. (Ereignisschleife) % 2014-02-22 13:32:39 | Sender: EibPC | GA: '1/1/1'c14 | Wert: send: 2840B6AA | Typ: Text | Schreiben % 2014-02-22 13:32:39 | Sender: EibPC | GA: '1/1/1'c14 | Wert: read: 2840B6AA | Typ: Text | Schreiben % 2014-02-22 13:32:39 | Sender: EibPC | GA: '1/1/1'c14 | Wert: invalid telegr | Typ: Text | Schreiben % 2014-02-22 13:32:49 | Sender: EibPC | GA: '1/1/1'c14 | Wert: send: 2840B6AA | Typ: Text | Schreiben % 2014-02-22 13:32:49 | Sender: EibPC | GA: '1/1/1'c14 | Wert: read: 2840B6AA | Typ: Text | Schreiben % 2014-02-22 13:32:49 | Sender: EibPC | GA: '1/1/1'c14 | Wert: DevStart: 96 | Typ: Text | Schreiben % 2014-02-22 13:32:49 | Sender: EibPC | GA: '1/1/1'c14 | Wert: M-size: 143 | Typ: Text | Schreiben % 2014-02-22 13:32:49 | Sender: EibPC | GA: '1/1/1'c14 | Wert: result: 96 | Typ: Text | Schreiben % 2014-02-22 13:32:49 | Sender: EibPC | GA: '1/1/1'c14 | Wert: pos: 128 | Typ: Text | Schreiben % 2014-02-22 13:32:49 | Sender: EibPC | GA: '1/1/1'c14 | Wert: vout: 22.68 | Typ: Text | Schreiben % 2014-02-22 13:32:49 | Sender: EibPC | GA: '1/1/1'c14 | Wert: size: 5 | Typ: Text | Schreiben % 2014-02-22 13:32:49 | Sender: EibPC | GA: '1/1/1'c14 | Wert: v: 22.68 | Typ: Text | Schreiben % 2014-02-22 13:32:59 | Sender: EibPC | GA: '1/1/1'c14 | Wert: send: 2840B6AA | Typ: Text | Schreiben % 2014-02-22 13:32:59 | Sender: EibPC | GA: '1/1/1'c14 | Wert: read: 2840B6AA | Typ: Text | Schreiben % 2014-02-22 13:32:59 | Sender: EibPC | GA: '1/1/1'c14 | Wert: invalid telegr | Typ: Text | Schreiben % 2014-02-22 13:33:09 | Sender: EibPC | GA: '1/1/1'c14 | Wert: send: 2840B6AA | Typ: Text | Schreiben % 2014-02-22 13:33:09 | Sender: EibPC | GA: '1/1/1'c14 | Wert: read: 2840B6AA | Typ: Text | Schreiben % 2014-02-22 13:33:09 | Sender: EibPC | GA: '1/1/1'c14 | Wert: DevStart: 96 | Typ: Text | Schreiben % 2014-02-22 13:33:09 | Sender: EibPC | GA: '1/1/1'c14 | Wert: M-size: 141 | Typ: Text | Schreiben % 2014-02-22 13:33:09 | Sender: EibPC | GA: '1/1/1'c14 | Wert: result: 96 | Typ: Text | Schreiben % 2014-02-22 13:33:09 | Sender: EibPC | GA: '1/1/1'c14 | Wert: pos: 128 | Typ: Text | Schreiben % 2014-02-22 13:33:09 | Sender: EibPC | GA: '1/1/1'c14 | Wert: vout: 22.76 | Typ: Text | Schreiben % 2014-02-22 13:33:09 | Sender: EibPC | GA: '1/1/1'c14 | Wert: size: 5 | Typ: Text | Schreiben % 2014-02-22 13:33:09 | Sender: EibPC | GA: '1/1/1'c14 | Wert: v: 22.76 | Typ: Text | Schreiben % 2014-02-22 13:33:19 | Sender: EibPC | GA: '1/1/1'c14 | Wert: send: 2840B6AA | Typ: Text | Schreiben % 2014-02-22 13:33:19 | Sender: EibPC | GA: '1/1/1'c14 | Wert: read: 2840B6AA | Typ: Text | Schreiben % 2014-02-22 13:33:19 | Sender: EibPC | GA: '1/1/1'c14 | Wert: invalid telegr | Typ: Text | Schreiben % 2014-02-22 13:33:29 | Sender: EibPC | GA: '1/1/1'c14 | Wert: send: 2840B6AA | Typ: Text | Schreiben % 2014-02-22 13:33:29 | Sender: EibPC | GA: '1/1/1'c14 | Wert: read: 2840B6AA | Typ: Text | Schreiben % 2014-02-22 13:33:29 | Sender: EibPC | GA: '1/1/1'c14 | Wert: DevStart: 96 | Typ: Text | Schreiben % 2014-02-22 13:33:29 | Sender: EibPC | GA: '1/1/1'c14 | Wert: M-size: 141 | Typ: Text | Schreiben % 2014-02-22 13:33:29 | Sender: EibPC | GA: '1/1/1'c14 | Wert: result: 96 | Typ: Text | Schreiben % 2014-02-22 13:33:29 | Sender: EibPC | GA: '1/1/1'c14 | Wert: pos: 128 | Typ: Text | Schreiben % 2014-02-22 13:33:29 | Sender: EibPC | GA: '1/1/1'c14 | Wert: vout: 22.76 | Typ: Text | Schreiben % 2014-02-22 13:33:29 | Sender: EibPC | GA: '1/1/1'c14 | Wert: size: 5 | Typ: Text | Schreiben % 2014-02-22 13:33:29 | Sender: EibPC | GA: '1/1/1'c14 | Wert: v: 22.76 | Typ: Text | Schreiben %
Wird das bei anderen Makros genauso ablaufen oder habe ich gleich im ersten Versuch das mit Abstand schlimmste Beispiel erwischt?

Grüße
Erik
Kommentar