Jump to content

wieder IO-16V2 Interrupts


Recommended Posts

Hallo und guten Morgen...

ich bin leider hier der Stammkunde! 😀 Ich hoffe, das nimmt mir niemand ĂŒbel... Durch die intensive Nutzung von Tinkerforge-Baugruppen kommen selbstverstĂ€ndlich viele Fragen auf...

Ich habe hier herumgelesen, dass es bei der Verwendung der Interrupte am IO-16V2 mitunter zu 'Verklemmungen' kommt. Ich habe meine Applikation nun schon mit Eurer Hilfe recht weit voranbringen können. Jetzt bin ich beim IO-16V2 und habe auch ein seltsames Problem.

Ich habe Kanal 0 bereits mit einem EdgeCounter erfolgreich in Betrieb und wollte nun parallel den Kanal 1 mit einem Interrupt nutzen. Das schlÀgt fehl. Erst einmal ganz ohne Fehler.

Ich habe dann den RED Brick neu gestartet und alle laufenden Programme (nodejs) beendet. 

Danach habe ich das Beispiel Download (ExampleInterrupt.js) fĂŒr meine Umgebung lauffĂ€hig (Pfade/Ports etc..) gemacht. Jedoch liefert das Example auch keine Daten und keine Fehler.

Ich habe dann mein node.js Script mit denselben Parametern konfiguriert, jedoch funktioniert das nicht und wirft auch keinen Error.

Ich habe dann den Konfigurationsaufruf io.setInputValueCallbackConfiguration(1, 1000, false) so modifiziert, dass er einen ErrorCallback verwendet. Das ist zwar nicht explizit dokumentiert, aber sieht so aus...

io.setInputValueCallbackConfiguration(1, 1000, false, 
	() => {
		Logger.log('setInputValueCallbackConfiguration OK');
	},
	(err) => {
		Logger.log('setInputValueCallbackConfiguration ERROR', err);
	}
);

Dieser Aufruf wirft einen Fehler 31.

Nun steht bei diesem Callback in der Doku nichts davon, dass er einen Fehler Werfen kann und welchen. Ich gehe davon aus, dass es der allg. Fehler

IPConnection.ERROR_TIMEOUT = 31

ist. (Eine detaillierte Dokumentation wĂ€re hier sehr hilfreich! - auch die vom RED Brick steht seit 2015 auf 'nicht vollstĂ€ndig' - aber das nur am Rande... 😀)

Was lÀuft hier falsch? Warum funktioniert dasselbe Script mit einem EdgeCounter sehr wohl und das mit dem Interrupt nicht?

Wo muss ich weiter suchen? Gibt es noch diese bounce_time? Hat es was damit zu tun? Wo sollte man die bounce_time setzen?

Beste GrĂŒĂŸe vom
Theo!

PS: Ich hatte nicht erwÀhnt, dass am BrickViewer alle PegelÀnderungen prima zu sehen sind. Der Interrupt wird halt nur nicht getriggert. Konfiguriert ist: io.setConfiguration(1, 'i', true);

bearbeitet von theobald
Link zu diesem Kommentar
Share on other sites

Moin,

Kannst du ein vollstÀndiges Beispiel posten bei dem das Problem auftritt? Ich habe gerade versucht das hier nachzustellen aber es funktioniert.

Hast du neben dem Aufruf der Callback-Konfigurationsfunktion das Callback auch mit z.B.

io.on(Tinkerforge.BrickletIO16V2.CALLBACK_INPUT_VALUE,
    // Callback function for input value callback
    function (channel, changed, value) {
        console.log('Channel: ' + channel);
        console.log('Changed: ' + changed);
        console.log('Value: ' + value);
        console.log();
    }
);

registriert? Sonst schickt das Bricklet zwar Callbacks, sie werden aber von den Bindings ignoriert.

Sind die Firmwares aktuell?

Der Error-Callback der setInputValueCallbackConfiguration-Funktion ist soweit ich das sehe hier:

https://www.tinkerforge.com/de/doc/Software/Bricklets/IO16V2_Bricklet_JavaScript.html#BrickletIO16V2.setInputValueCallbackConfiguration

erwĂ€hnt. Die allgemeine API-Beschreibung auf derselben Seite (die zugegebenermaßen leicht ĂŒbersehen werden kann, weil die Beispiele so lang sind) listet auch den Fehlercode auf den du da bekommst.

Den debounce gibt es nur bei dem FlankenzÀhler soweit ich das ad-hoc sehe.

Gruß,
Erik

Link zu diesem Kommentar
Share on other sites

Ja! Danke fĂŒr die Antwort. Hier kommt mein Code...

<!DOCTYPE html>
<html>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <head>
        <title>Tinkerforge | JavaScript Example</title>
    </head>
    <body>
        <div style="text-align:center;">
            <h1>IO-16 Bricklet 2.0 Interrupt Example</h1>
            <p>
                <input value="192.168.5.42" id="host" type="text" size="20">:
                <input value="4280" id="port" type="text" size="5">,
                <input value="2fYVua" id="uid" type="text" size="5">
                <input value="Start Example" id="start" type="button" onclick="startExample();">
            </p>
            <p>
                <textarea readonly id="text" cols="80" rows="24" style="resize:none;"
                          >Press "Start Example" to begin ...</textarea>
            </p>
        </div>
        <script src="./js/tinkerforge/Tinkerforge.js" type='text/javascript'></script>
        <script type='text/javascript'>
            var ipcon;
            var textArea = document.getElementById("text");
            function startExample() {
                textArea.value = "";
                var HOST = document.getElementById("host").value;
                var PORT = parseInt(document.getElementById("port").value);
                var UID = document.getElementById("uid").value;
                if(ipcon !== undefined) {
                    ipcon.disconnect();
                }
                ipcon = new Tinkerforge.IPConnection(); // Create IP connection
                var io = new Tinkerforge.BrickletIO16V2(UID, ipcon); // Create device object
                ipcon.connect(HOST, PORT,
                    function(error) {
                        textArea.value += 'Error: ' + error + '\n';
                    }
                ); // Connect to brickd
                // Don't use device before ipcon is connected
                //                
                ipcon.on(Tinkerforge.IPConnection.CALLBACK_CONNECTED,
                    function (connectReason) {
                        // Set period for input value (channel 4) callback to 0.5s (500ms)
// theobald
ipcon.authenticate(
  "9Pttfnn9zh00i0uCQvNnnUedd",
  (ok) => { textArea.value += 'auth OK\n'; },
  (err) => { textArea.value +=  'auth ERR' + err + '\n'; }
);
// theobald end
                  
// geÀndert auf chanel 1 also A1-GND                  
                        io.setInputValueCallbackConfiguration(1, 500, false);
                    }
                );

                // Register input value callback
                io.on(Tinkerforge.BrickletIO16V2.CALLBACK_INPUT_VALUE,
                    // Callback function for input value callback
                    function (channel, changed, value) {
                        textArea.value += 'Channel: ' + channel + '\n';
                        textArea.value += 'Changed: ' + changed + '\n';
                        textArea.value += 'Value: ' + value + '\n';
                        textArea.value += '\n';
                        textArea.scrollTop = textArea.scrollHeight;
                    }
                );
            }
        </script>
    </body>
</html>

Zudem habe ich gerade bemerkt, dass ĂŒber das Websocket in der Developer Konsole von FF Daten alle 500ms fließen. Nur die kommen offs im Browser nicht an?? Das sieht so aus:

grafik.thumb.png.14909499da8aadda4edb1ac550beb01f.png

Firmware ist v.2.0.2.

OK! Danke benzĂŒglich des Fehlercodes...

GrĂŒĂŸe
Theo

 

bearbeitet von theobald
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...