Jump to content

Verbindung zu GPS Bricklet stürzt immer ab


akafpv

Recommended Posts

Ich habe eine einfache Java Applikation geschrieben, mit der ich die Höhe aus meinem GPS Bricklet auslesen möchte. Dies funktioniert soweit auch sehr gut, jedoch immer nach der gleichen Anzahl Messungen (231 Messungen), unterbricht die Verbindung und ich erhalte folgende Exception:

 

com.tinkerforge.TimeoutException: Did not receive response in time for function ID 3

 

Die Bricks sind per USB Kabel an meinem Computer angeschlossen, alle anderen Bricklets funktionieren einwandfrei mit der Software. Habe auch schon den Reset versucht auf dem GPS Bricklet sowie dem Masterbrick.

 

Woran könnte das liegen? Brauche sehr dringend Hilfe!!

Link zu diesem Kommentar
Share on other sites

  • 3 weeks later...

ich habe dasselbe Phänomen in unterschiedlichsten Kombinationen

(Anbindung USB, PoE, WLAN, unterschiedliche Bricklets, Bricklet am Master oder an anderen Bricks...)

Verwendet werden die PHP Bindings. Die Erhöhung des

IPConnection::setTimeout(float $seconds)

hat offenbar keinen Effekt.

Es ist echt ärgerlich, weil es relativ häufig auftritt. Oft bringt echt nur ein PowerOff des Stacks etwas.

Link zu diesem Kommentar
Share on other sites

Vielleicht habe ich ein mögliche Ursache gefunden.

In den PHP Bindings von IpConnection

Device->sendrequest steht:

if ($this->receivedResponse == NULL) {
                throw new TimeoutException("Did not receive response in time for function ID $functionID");
            }

ich habe den Vergleichsoperator auf

===

ausgebessert - weil sonst auch ein Ergebnis von "0" als "NULL" interpretiert wird (und vor allem das Ende des Timeouts nicht abgewartet wird bis zur obige Fehlermeldung!)

Vielleicht kann man einer der Experten meine Änderung auf Sinnhaftigkeit prüfen. Danke :-)

Seither läuft es weeesentlich stabiler

Link zu diesem Kommentar
Share on other sites

ja, ist PHP spezifisch - das stimmt.

Tatsache ist, dass der Fehler "did not response in time" geworfen wird, bevor der Timeout abgelaufen ist. Darum glaube ich nach wie vor, dass ein Resultat zurückkommt, dieses aber falsch interpretiert wird (eventuell weil leeres Array)

        $o = [];
        if ($o == null) { // Ergebnis ist TRUE };
        if (empty($o)) { // Ergebnis ist TRUE };

 

Link zu diesem Kommentar
Share on other sites

Kann ich nicht nachvollziehen. Ich nehme z.B. das Accelerometer Simple Example und führe es aus mit einer unbekannten UID, um einen Timeout beim Aufruf des Getters zu provozieren. Der Timeout passiert nach 2,5 Sekunden, genau wie erwartet.

 

Wie sieht dein PHP Script aus, bei dem der Timeout zu früh ausgelöst wird?

 

Im Code wird receivedResponse entweder auf NULL oder auf ein Array mit 2 Elementen gesetzt, niemals ein leeres Array.

Link zu diesem Kommentar
Share on other sites

hallo, leider kann man es eben nicht nachvollziehen.

Beispiel:: Wenn ich die Funktion

BrickletSegmentDisplay4x7::getSegments()

jede Sekunde aufrufe (z.b. um den Doppelpunkt im Sekundentakt zu togglen), dann geht das oft viele Stunden ohne Probleme, aber irgendwann kommt dieser lästige Fehler "did not respond in time" (aber nicht erst nach dem Timeout).

Ich werde mal einen Versuchsaufbau machen und maximales Debugging einbauen, dann kann ich genaue Telemetriedaten liefern...

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...