Serielle Schnittstelle zeigt nur 8 Zeichen



  • Wenn Du schon eine Komponente programmierst, dann sollte sie auch orthografisch korrekte Funktionsnamen haben:

    Memo1->Lines->Add(SerialPort1->ReceivedText());



  • @F98: Wenn du schon schlau daherredest, solltest du auch die richtigen Wörter benutzen... 😉 ...grammatikalisch...naja...

    Ich verstehe auch nicht was Junix will... 😞



  • Eberhard schrieb:

    [...]Wenn ich jetzt im ausgelösten Ereignis die Daten in ein Memo-Feld o.ä. reintue, gibt er mir immer nur 8 Zeichen aus. die nächsten Zeichen kommen dann in der nächsten Zeile.

    Ich übersetz mal
    TMemo::Lines::Add nach deutsch:
    TMemo::Zeilen::Hinzufügen

    klingelts jetzt?

    -junix



  • Aber er fügt doch EINE Variable mit mehr als 8 Zeichen ein??? Lines::Add() erklärt doch nicht den Zeilenwechsel nach 8 Zeilen?? Oder wie?

    Ist da ein '\n' dabei?

    @F98: Geht doch! 😃 Leider kann ich nicht editieren...



  • @Eberhard
    Benutzt du die Win Api aufrufe zur Kommunikation mit dem Com Port
    CreateFile()
    und dann ReadFile()?

    Wenn ja, wann rufst du ReadFile auf? evtl. Interuptgesteuert /Zeichengesteuert?

    Was sagt denn da der Rückgabewert?

    @Plemplem
    ist nicht gesagt, wenn er im echtbetrieb so schnell liest, das nur 8 Zeichen im Puffer stehen, dann fügt jedes Add eine neue Zeile ein.



  • @SilentSurfer

    genau ich benutze die API Aufrufe Das Lesen geschieht interruptgesteuert mit ReadFile. Wenn ich mir die Variable im Debugger anschaue steht auch der ganze Text drin.

    @junix

    wie gesagt, ich hab auch schon mit dem Edit Feld und Text und dem Memofeld und Text experimentiert, aber da hat sich gar nichts verändert



  • Jetzt brauchts doch noch ein paar informationen,
    ReadFile gibt dir im dritten (oder vierten) Parameter die Anzahl der gelesenen Bytes, hast du den Wert mal im Echtbetrieb überprüft?

    Wie sieht dein DCB aus? Was setzt du in der CommMask? Auf was spricht dein Interrupt beim Lesen an, und dazu passend, wie sieht so eine Bytefolge aus, die du empfangen willst?

    Ein wenig Source wäre jetzt vielleicht ganz hilfreich.



  • Die Dinge werd ich heute Abend mal prüfen. Im Moment hab ich keine Zeit mehr...



  • Ich habs jetzt!!! 😋

    Das Problem war, daß die Zeichen bei der Schnittstelle langsamer angekommen sind, als die Komponente sie im Puffer ausgelesen hat. Nach 8 Zeichen war der Puffer leer und er hat das Ergebnis zurückgeliefert. Unmittelbar danach sind die nächsten Zeichen angekommen und das ganze ging von vorne los.

    Ich hab ihn jetzt nach jedem gelesenen Zeichen kurz "schlafen geschickt" und jetzt liest er das ganze problemlos ein.

    Vielen Dank an alle die sich mit beteiligt haben



  • Eberhard schrieb:

    Ich hab ihn jetzt nach jedem gelesenen Zeichen kurz "schlafen geschickt" und jetzt liest er das ganze problemlos ein.

    Meines Erachtens eine eher unsaubere Methode... Besser wäre es hier zwischen Anzeige und COM-Port einen Protokoll-Codec zu implementieren, der die einzelnen Protokollframes einliest und erst dann zurückliefert...

    -junix


Anmelden zum Antworten