Warten, bis Daten von der seriellen Schnittstelle komplett übertragen wurden

  • VB6

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von MatthiasKraemer.

    Warten, bis Daten von der seriellen Schnittstelle komplett übertragen wurden

    Hallo alle zusammen,
    ich habe folgendes Problem: Ich empfange Daten über die serielle Schnittstelle.
    Am Anfang wird immer ein kompletter Text geschickt, der 474 Zeichen lang ist.
    Anschließend kommen im Anstand von einigen Minuten immer drei Zeilen Text mit insgesamt 109 Zeichen Text.
    Den empfangenen Text schreibe ich sequentiell in ein Textfeld.

    Ich verwende hierzu das MSCOMM-Control. Die Datenübertragung an sich klappt einwandfrei.
    Jetzt möchte ich gerne Zählen, wie oft Daten übertragen wurden. Hierzu habe ich eine For Next Schleife an die
    entsprechende Stelle gesetzt. Sobald ich die Schleife einbaue, wird auf einmal beim ersten Durchganz
    nicht mehr der komplette übertragen. Es werden dann aus irgendeinem Grund nur noch ein paar wenige
    Zeichen in dem Textfeld angezeigt.

    Hat jemand eine Idee, woran das liegen kann?

    Viele Grüße und ein schönes Wochenende,

    Matthias
    Das wäre doch ein idealer Grund, auf .NET umzusteigen. :thumbsup:
    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!
    Mit einer For...Next würde ich nicht zählen. Eine Zählvariable, welche bei jedem CR hochgesetzt wird wäre eine Möglichkeit.

    mit .NET hat das nichts zu tun. Aber den Code braucht man schon, um vernünftig helfen zu können.
    Gruß
    Peterfido

    Keine Unterstützung per PN!

    Hier ist der Code :-)

    Hallo,
    mein aktueller Code sieht folgendermaßen aus :


    Visual Basic-Quellcode

    1. Sub HandleInput(InBuff As String)
    2. Dim Empfangene_Daten As String
    3. Dim Druckeinstellung As String
    4. Dim INIFile As String
    5. 'Verarbeitung des empfangenen Textes. Dieser wird zunächst in das Textfeld "Text1" geschrieben
    6. Text1.SelStart = Len(Text1.Text)
    7. Text1.SelText = InBuff
    8. Datatransfer_Counter = Datatransfer_Counter + 1 'Mit jedem über die Schnittstelle übertragenen Datensatz
    9. 'den Zähler um 1 erhöhen
    10. If Datatransfer_Counter = 1 Then
    11. frm_Dialog_Check_Data.Show
    12. Else
    13. MsgBox "Eben wurde die Inprozesskontrolle Nr. " & Datatransfer_Counter - 1 & " an den Rechner übertragen!"
    14. End If
    15. 'Gesamten empfangenen Text in eine Textdatei schreiben
    16. Empfangene_Daten = InBuff
    17. Open App.Path + "\" & App.EXEName & ".txt" For Append As #1
    18. Print #1, Empfangene_Daten;
    19. Close #1
    20. 'Information zur Druckeinstellung aus Ini-Datei auslesen
    21. 'Es wird abgefragt, ob direkt gedruckt werden soll, oder
    22. 'der Druck erst nach Betätigung des Druck-Buttons erfolgen soll
    23. INIFile = App.Path & "\" & App.EXEName & ".ini"
    24. Druckeinstellung = GetIniString("Druckeinstellung", "Direktdruck", "Nein", INIFile)
    25. If Druckeinstellung = "ja" Then
    26. Dokument_Drucken (Empfangene_Daten)
    27. End If
    28. End Sub


    Mit der Variable "Inbuff" übergebe ich die empfangenen Daten an die Subroutine. Nach dem ersten Sendevorgang sollen
    die Daten manuell am Bildschirm überprüft werden. Deshalb zähle ich mit der Variablen "Datatransfer_Counter".
    Genau hier scheint das Problem zu liegen. Die Messagebox erscheint sofort, wenn der Counter auf 1 steht.
    Allerdings ist da noch gar nicht der komplette Text an die Textbox übertragen. Es werden nur die ersten paar Zeilen angezeigt.
    Wenn ich den Code zum Zählen auskommentiere, funktioniert alles einwandfrei.
    Also diesen Part hier meine ich:

    ' Datatransfer_Counter = Datatransfer_Counter + 1 'Mit jedem über die Schnittstelle übertragenen Datensatz
    ' 'den Zähler um 1 erhöhen
    '
    ' If Datatransfer_Counter = 1 Then
    ' frm_Dialog_Check_Data.Show
    '
    ' Else
    ' MsgBox "Eben wurde die Inprozesskontrolle Nr. " & Datatransfer_Counter - 1 & " an den Rechner übertragen!"
    ' End If

    Man sieht auch beim Füllen der Textbox, dass das relativ langsam geht. Das heißt, man sieht, dass der empfangene Text Zeile für Zeile
    innerhalb von ca. 1 Sekunde in die Textbox geschrieben wird. Ich übertrage den folgenden Text bei ersten Durchgang:


    * MC12 V1.11B *

    11/03/11 10:50 START DATENSP.
    BEDIENER 11
    CHARGENNR. 146031
    ARB.MODUS INDIVIDUELL

    GLOBAL START

    DOSIERPUMPE-NR. 1
    PUMPENTYP PD12I
    VOLUMEN (ml) 10.300
    SCHLAUCH (mm) 3.2
    GESCHW. (UPM) 300
    DREHZAHLANP. 100
    RUECKSAUGUNG 1
    CHARGENGROESSE 1
    PAUSE (sek) 1.0
    SP.GEW. (g/ml) 1.029
    FUELLUNGEN 5011
    GES. VOL. (L) 51.613
    VERZOEG. 1 (sek) 0.0
    VERZOEG. 2 (sek) 0.0
    VERZOEG. 3 (sek) 0.0



    Anschließend werden dann jedes mal nur noch drei Zeilen übertragen, bis der gesamte Prozess zu Ende ist.
    Ich hoffe, dass mit diesen Informationen jemand was anfangen kann.