RS232 Warten auf Receive Thread

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    RS232 Warten auf Receive Thread

    Hallo,
    ich habe eine Klasse geschrieben die über die RS323 Schnittstelle mit einem externen System kommuniziert.
    Es wird ein Befehl abgeschickt, das externe System schickt 17 Bytes zurück, die mit dem ReceiveEreignis (SerialPort.ReceivedBytesThreshold = 17) in einen Bytepuffer geschrieben werden. Funktioniert auch so weit.
    Nur wenn ich von einem Testformular den Befehl abschicke, und im Anschluss den Bytepuffer lesen will, wartet der Haupthread nicht bis der Code im ReceiveEreignis den Puffer beschrieben hat, sondern rauscht durch und sieht einen leeren Puffer.
    Also:
    Sende Befehl
    ---- hier sollte er warten bis der Puffer besetzt ist ---
    Lese Puffer.
    Wie bekommt man das hin?
    Ich habe es schon mit SyncLock versucht, hatte aber keinen Erfolg.
    Weiss jemand wie das geht?
    Danke, Friedrich
    Ja, das ist sicher eine Möglichkeit, aber die Situation ist etwas komplexer:
    Das Subsystem (Roboterkontroller) kennt zwei Modi, die über die Schnittstelle ausgewählt werden:
    -direktes Durchreichen der Befehle den seriell angebundenen Servos (gibt Rückmeldung über Serialport wenn eingeschaltet)
    -Befehle gehen zum Kontroller (gibt leider KEINE Rückmeldung!)
    -In beiden Modi kann der Kontroller auch spontan Nachrichten absetzen (Sensorgrenzwerte, Auswertung der Infrarot Fernbedienung).
    Die Steuerschleife müsste also im Rs232-Thread liegen, damit alles vernünftig synchron läuft.
    @FriedV:: Das ist eine Frage der Organisation des Ablaufes.
    Pack z.B. alle Aktionen in ein Feld, indiziere das aktuelle Feld.
    Sende, was zu senden ist, und im DataReceive-Event überprüfst Du die Validität der empfangenen Daten und erhöhst den Index bzw. machst Fehlerhandling.
    Alles Event-gesteuert, nix mehr mit linearem Ablauf. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!