C# & Mono, SerialPort: DataReceived-Event wird nicht ausgelöst

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hi,

    ich wollte heute auf die Schnelle ein kleines C#-Programm auf dem Raspberry laufen lassen.
    Dieses soll lediglich die über einen USB-RS232-Adapter empfangenen Zeichen in der Konsole darstellen.

    Auf meiner Windowsmaschine habe ich dafür das DataReceived-Event verwendet. Allerdings wird dieses auf dem Raspberry nicht ausgelöst. Rufe ich den Eingangspuffer des Adapters zyklisch, also ohne Event, ab, so kann ich die Zeichen einlesen. Der Adapter funktioniert also.

    Hat jemand einen Tipp für mich?

    Danke
    matt

  • C# & Mono, SerialPort: DataReceived-Event wird nicht ausgelöst? Schau mal ob du hier fündig wirst!

  • Hallo matt

    hast Du ein Beispiel wie Du das mit der zyklischen Abfrage machst? Das Beispiel das bei Mono dabei ist funktioniert bei mir leider nicht.

    Verstehe auch nicht, wieso das DataReceive Event nicht implementiert ist.

    mws

  • Hallo mws,

    da ich schon länger nicht mehr mit Mono auf dem Raspberry Pi arbeite kann ich dir nur etwas Pseudocode liefern.

    Für die zyklische Abfrage habe ich einen Timer verwendet (System.Timers). Er kann ähnlich wie das Ticken einer Uhr betrachtet werden, die zeitliche Dauer zwischen den Ticks ist aber variabel und anstelle eines akustischen Ticks wird ein Event ausgelöst (Elapsed).

    In der Event-Methode (wird diese Methode so bezeichnet?) wird geprüft, ob an der seriellen Schnittstelle Daten vorliegen. Dafür wird geprüft, ob die BytesToRead größer 0 sind. Ist das der Fall, können die Daten beliebig eingelesen werden und an andere Methoden übergeben werden oder in Eigenschaften geschrieben werden.

    Ich hoffe das hilft dir etwas.

    Gruss
    matt

  • Hallo matt,

    danke für die schnelle Antwort. So ungefähr kann ich mir schon was darunter vorstellen. Aber wie übergibt man die Daten an einen anderen Thread? Und warum ist der Timer variabel?

    Außerdem hab ich das Problem, das ich es noch nie geschafft habe Daten vom ser. Port zu empfangen. Irgendwie kann ich machen was ich will, es tut isch einfach nichts.

    Ich hab dazu mal meinen Arduino (der einen Roboterarm steuert) angesprochen. Wenn man z.B. ein "?\r" sendet gibt er eine Liste mit den möglichen Befehlen und deren Parametern zurück. In Putty klappt das auch sehr gut. Anschließend habe ich eine Endlosschleife gestartet die lauscht ob der Port was zurück liefert aber da kommt nie etwas. Der Befehl kommt aber beim Arduino an, denn wenn ich einen "MOV" Befehl sende bewegt sich der entsprechende Servo.

    Womit programmierst Du denn jetzt? C# ist zwar eine sehr schöne Sprache aber ich schätze so ganz das Wahre ist sie für den PI wohl doch nicht, es gibt einfach zu viele Beschränkungen unter Mono wie mir scheint.

    mws

    Einmal editiert, zuletzt von mws (30. September 2014 um 08:32)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!