fingerkuppe Posted May 4, 2012 at 10:15 PM Share Posted May 4, 2012 at 10:15 PM Hallo zusammen, ich versuche, die Tinkerforge Bricks und Bricklets via High-Level-API mit Hilfe des Embarcadero RAD Studio XE (Nachfolger des Borland C++-Builders) zu programmieren. Leider gelingt mir das nicht so recht. Ich habe das Projekt mit ipconnection und dem zu jedem Brick/Bricklet gehörendem Codeteil übersetzen können. Die Codebestandteile "Create ip connection to brickd" sowie "Create device object" aus den Beispielen funktionieren. Der Teil "Add device to ip connection" schlägt jedoch fehl. Ich habe das mit mehreren unterschiedlichen Bricklets sowie dem Master Brick ausprobiert. Die Tests der Bricks/Bricklets mit dem Brickviewer funktionieren. Ich habe die Befürchtung, dass es mit dem Einbinden der Library ws2_32.lib zu tun hat, welche bei den API Bindings in der Tinkerforge Dokumentation beschrieben ist. Ich muss leider zugeben, dass ich keine Ahnung habe, wie ich dem RAD Studio XE die Nutzung dieser Library beibringen kann. Hat vielleicht jemand eine Idee? Es wäre schade, wenn ich meine Bricklets nicht programmieren könnte. Vielen Dank vorab. Viele Grüße Fingerkuppe Quote Link to comment Share on other sites More sharing options...
photron Posted May 5, 2012 at 10:03 AM Share Posted May 5, 2012 at 10:03 AM Ich verstehe nicht ganz was du mit fehlschlagen meinst. Es hört sich so an als könntest du dein Programm kompilieren und starten und das Problem tritt dann beim Ausführen des Programms auf. Wenn das so ist, dann ist nicht die ws2_32.lib das Problem. Denn wenn die nicht richtig eingebunden wäre dann würde der Compiler (eigentlich der Linker) einen Fehler melden beim Kompilieren. "Add Device" kann ein E_TIMEOUT (-1) zurückgeben, wenn kein Device mit der passenden UID antwortet. Meinst du dass mit "fehlschlagen"? #define UID "aySDPZAhvvd" // Change to your UID // Create device object Master master; master_create(&master, UID); Die UID die du beim Aufruf der create Funktion übergibst muss exakt die sein die der Brick Viewer für den entsprechenden Brick anzeigt. Vielleicht hast du da einen Tippfehler oder die UID aus dem Beispielcode nicht durch die deines Bricks ersetzt? Quote Link to comment Share on other sites More sharing options...
fingerkuppe Posted May 5, 2012 at 10:33 AM Author Share Posted May 5, 2012 at 10:33 AM Hallo photron, die UID habe ich direkt aus dem Brickviewer kopiert und schon im Vorfeld mehrfach überprüft. Der Verdacht, dass es etwas mit der ws2_32.lib zu tun haben könnte, kommt daher, dass in den Angaben zu Tinkerforge API für Visual Studio angemerkt ist, dass man diese Lib explizit einbinden muss. Zum einen kann ich das Programm auch ohne die explizite Angabe der Library übersetzen, zum anderen habe ich bis jetzt keine Möglichkeit gefunden, dem Linker die Verwendung der ws2_32.lib mit auf den Weg zu geben. Übrigens habe ich es sowohl mit einer reinen Konsolenanwendung als auch mit einer VCL-Formularanwendung probiert. Dafür, dass es sich um ein Problem beim Übersetzen/Linken handelt spricht auch, dass ich es mit diversen Bricks und den zugehörigen Programmen und Beispielen probiert habe und die Verbindung nicht hergestellt werden kann: Could not connect to Brick. Viele Grüße Fingerkuppe Quote Link to comment Share on other sites More sharing options...
photron Posted May 5, 2012 at 04:30 PM Share Posted May 5, 2012 at 04:30 PM Okay ich habe mir die Embarcadero RAD Studio XE2 Trial Version installiert. Ich musste ein paar Änderungen am Code vornehmen damit er mit dem Borland Compiler funktioniert. Was hast du getan um den Compiler Fehler wegen PACKED zu beheben? Das eigentliche Problem ist, dass im Moment der Code für Borland Compiler kein Packing für structs aktiviert. Wenn ich das so lasse dann schlägt auch bei mir das add_device fehl. Ich behebe das gerade. Ich denke das wird die Ursache deines Problem sein. Quote Link to comment Share on other sites More sharing options...
photron Posted May 5, 2012 at 05:02 PM Share Posted May 5, 2012 at 05:02 PM Es sollte reichen wenn du _MSC_VER im gesamten Code durch __BORLANDC__ ersetzt. Dann wird das Struct Packing auch für Borland richtig gesetzt und add_device sollte funktionieren. Quote Link to comment Share on other sites More sharing options...
fingerkuppe Posted May 5, 2012 at 05:43 PM Author Share Posted May 5, 2012 at 05:43 PM Hallo photron, vielen Dank für den Tipp. Es funktioniert. Damit kann ich schon mal Konsolen-Anwendungen gemäß der mitgelieferten Beispiele übersetzen. Der heutige Abend ist gerettet. Mal schauen, was ich nun mit den Bricklets anstellen kann. Das Ziel ist übrigens am Ende eine regelmäßige Messung der Bodenfeuchte unterhalb des Estrichs an mehreren unterschiedlichen Stellen, da ich Probleme mit einem undichten Keller habe. Vielen Dank nochmal Fingerkuppe Quote Link to comment Share on other sites More sharing options...
photron Posted May 8, 2012 at 08:32 AM Share Posted May 8, 2012 at 08:32 AM Das Problem ist jetzt auch in Version 1.0.5 der C Bindings behoben. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.