Jump to content

Recommended Posts

Geschrieben

Hallo Community,

 

Folgendes Problem: Ich habe gestern meinen Red Brick erhalten und wollte mal eine ganz einfache Anwendung zum testen schreiben, das einfach die aktuelle Uhrzeit auf dem 20x4 LCD-Display anzeigt.

 

Das ganze funktioniert auch, allerdings nur wenn ich das ganze über meinem Rechner und nur mit dem Master Brick laufen lasse. Sobald ich es auf den Red Brick Hochlade, wird das Programm zwar ausgeführt, das Display reagiert allerdings nicht.

 

Kann es sein das der Brick Deamon auf dem Red Brick dem Display eine andere UID zugewiesen hat als der Master Brick? und wenn ja: wie kann ich jetzt die einzelnen UID Schlüssel auslesen?

 

Sobald der Red Brick im Verbund ist, zeigt mir der Brick Viewer lediglich den Red Brick an, jedoch keine der angeschlossenen Bricklets. Ist das so gewollt?

 

Die Reihenfolge ist folgendermaßen: (Von unten nach oben)

Red Brick -> Ethernet Extension -> Master Brick

 

Falls es Relevant sein sollte, hier mal der Code:

using System;
using Tinkerforge;

namespace AktuelleUhrzeit
{
    class Program
    {
        const string HOST = "localhost";
        const int PORT = 4223;
        const string UID = "ofR";

        static IPConnection verbindung = new IPConnection();
        static BrickletLCD20x4 lcd = new BrickletLCD20x4(UID, verbindung);

        static void Main(string[] args)
        {
            verbindung.Connect(HOST, PORT);

            lcd.ClearDisplay();
            lcd.BacklightOn();

            while (true)
            {
                lcd.WriteLine(1, 6, DateTime.Now.ToLongTimeString());
                Console.Clear();
                Console.WriteLine(DateTime.Now.ToLongTimeString());
                System.Threading.Thread.Sleep(1000);
            }
        }
    }
}

 

MfG

Geschrieben

Ich hab es gerade selbst ausprobiert und das mono auf dem RED Brick scheint nicht die korrekte Runtime zu wählen.

 

Hier ist der Error (mono selbst stürzt ab):

2014-12-20T20:51:25.821556+0100
-------------------------------------------------------------------------------
Missing method .ctor in assembly /usr/lib/Tinkerforge.dll, type System.Runtime.Versioning.TargetFrameworkAttribute
Can't find custom attr constructor image: /usr/lib/Tinkerforge.dll mtoken: 0x0a00005a
* Assertion at class.c:5597, condition `!mono_loader_get_last_error ()' not met

Stacktrace:

  at <unknown> <0xffffffff>
  at AktuelleUhrzeit.Program..cctor () <0x0001b>
  at (wrapper runtime-invoke) object.runtime_invoke_void (object,intptr,intptr,intptr) <0xffffffff>

 

Um das zu fixen kannst du bei deinem hochgeladenem Programm unter "C# Configuration" -> "Mono Options" folgendes hinzufügen:

--runtime=v4.0

dann funktioniert es.

 

Wir müssen irgendeine Last-Minute Änderung gemacht haben die das hervorruft, als ich das letzte mal Mono getestet hatte gab es das Problem nicht :o.

 

 

Edit: Wir können in der nächsten Brick Viewer Version die runtime einfach auswählbar machen und v4.0 als default setzen (was nahezu immer korrekt sein wird).

 

Edit 2: Falls sich hier jemand mit mono genauer auskennt: Gehe ich richtig in der Annahme das dies ein Bug in der aktuell auf dem RED Brick installierten Mono Version ist und das sich das Problem in Luft auflöst wenn wir das updaten?

Geschrieben

Also zumindest scheint das Programm jetzt zu laufen. Jedenfalls wird auf dem Terminal die Uhrzeit ausgegeben.

 

Nur das LCD Reagiert nach wie vor nicht. scheinbar hab ich die falsche UID :( Ist die UID von dem Bricklet die gleiche wie sie im Brick Viewer angezeigt wird?

 

MfG

Geschrieben

Hab grad mal in den Logs nachgeschaut, und es scheint ein Problem zu geben:

 

Unhandled Exception:

Tinkerforge.NotConnectedException: Exception of type 'Tinkerforge.NotConnectedException' was thrown.

  at Tinkerforge.IPConnection.SendRequest (System.Byte[] request) [0x00000] in <filename unknown>:0

  at Tinkerforge.Device.SendRequest (System.Byte[] request) [0x00000] in <filename unknown>:0

  at Tinkerforge.BrickletLCD20x4.WriteLine (Byte line, Byte position, System.String text) [0x00000] in <filename unknown>:0

  at AktuelleUhrzeit.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0

[ERROR] FATAL UNHANDLED EXCEPTION: Tinkerforge.NotConnectedException: Exception of type 'Tinkerforge.NotConnectedException' was thrown.

  at Tinkerforge.IPConnection.SendRequest (System.Byte[] request) [0x00000] in <filename unknown>:0

  at Tinkerforge.Device.SendRequest (System.Byte[] request) [0x00000] in <filename unknown>:0

  at Tinkerforge.BrickletLCD20x4.WriteLine (Byte line, Byte position, System.String text) [0x00000] in <filename unknown>:0

  at AktuelleUhrzeit.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0

 

Interpretiere ich das jetzt richtig das er die Tinkerforge dll nicht richtig findet?

Geschrieben

Ja. Aber wie bereits erwähnt bekommt das Display keine Anweisung. Im Log wird auch kein Fehler oder ähnliches ausgegeben. Ich bin wirklich ratlos :o

 

Edit:

ich habe gerade diesen Thread gelesen: http://www.tinkerunity.org/forum/index.php/topic,2698.0.html

 

Ich habe das selbe Problem. Sobald das RFID Bricklet abgezogen ist, läuft alles, auch mein Programm. Woran kann das liegen?

 

Edit2:

Und noch etwas. Weißt zufällig jemand wie ich auf das Deutsche Zeitformat umstelle? Es wird mir nämlich im Englischen Format angezeigt...

Geschrieben

Vielen Dank. Hat funktioniert. Hatte bereits die Vermutung das es an der Kultur Einstellung liegt. Scheinbar muss man das bei Mono angeben. Beim Normalen .NET Framework ist so eine explizite Angabe nicht notwendig.

Geschrieben

Der Unterschied ist, das die Default-Sprache auf dem RED Brick Englisch ist, während die Default-Sprache auf deinem PC Deutsch ist. Wenn du eine "Englische Windows Version" auf deinem PC installierst wird die Datumsausgabe auch Standardmäßig englisch sein ;D.

 

Hat also in dem Sinne nichts mit Mono zu tun.

Geschrieben

Wir haben das Problem jetzt verstanden, es tritt auf wenn die Tinkerforge.dll mit CLR 4.0 gebaut ist, die .exe die auf das RED Brick geladen wird aber mit CLR 2.0.

 

Die Lösung ist ganz einfach, wir bauen die Tinkerforge.dll wieder mit CLR 2.0. Andersherum gibt es dieses Problem nämlich nicht. Das ist dann im nächsten Image gefixt (welches wir heute noch releasen).

Geschrieben

Sicher das es daran liegt? Ich habe nämlich die .exe die ich Hochlade auf das Zielframework 4.5.1 übersetzt.

 

Aber wenn es dann dennoch funktioniert schreib ich das Projekt auf Basis von 2.0. Normal Benötige ich keine Funktionen > 2.0.

 

MfG

Geschrieben

Nein, du musst nichts auf 2.0 umstellen. Die aktuelle Tinkerforge.dll sollte mit .exe in CLR 2.0 und CLR 4.0 funktionieren.

 

Zum testen kannst du die Tinkerforge.dll aus diesem zip

http://download.tinkerforge.com/bindings/csharp/tinkerforge_csharp_bindings_2_1_5.zip einfach neben deiner .exe auf das RED Brick hochladen (und das --runtime=v4.0 wieder entfernen). Es sollte dann gehen.

 

Um das Systemweit zu haben musst du die alte .dll in /usr/tinkerforge/bindings/csharp/ überschreiben.

Geschrieben

Den besagten Parameter hab ich schon länger nicht mehr drin. Das hat auch vorher schon ohne funktioniert, aber halt nur wenn das RFID Bricklet nicht im Verbund war :o

 

Deshalb dachte ich war vielleicht wirklich nur der Fehler in der Firmware schuld das es anfangs bei mir nicht funktioniert hat...

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...