Zeichen zwischenspeichern



  • kann mir jemand einen Tip geben, wie man folgendes Problem angehen kann:

    Die Methode OnCommunication wird immer aufgerufen, wenn ein Zeichen im Buffer der seriellen Schnittstelle gefunden wird. Zur Demonstration habe ich dieses Zeichen mal in einem Dialogbasierenden Programm anzeigen lassen - mit Erfolg.

    Nun will ich aber auch Strings fester Länge zwischenspeichern. Deshalb müsste irgendwie eine globales char array vereinbart werden, an dem ich dann mit OnCommunication etwas daranhänge.

    Leider habe ich keine Erfahrung wie man so etwas in Visuell C++ mit Klassen und Methoden angeht. Dennoch kenne ich mich mit objektorientiert Programmierung etwas aus, weis was Klassen, Methode und Objekte sind ...

    LONG CKupDlg::OnCommunication(WPARAM ch, LPARAM port) {	// gfa
    	UpdateData(TRUE);
    	CString string;
    	string += (char)ch;
    	m_Receive = string;
    	UpdateData(FALSE);
    	return 0;
    }
    

    Wäre echt schön wenn mir jemand einen Tipp geben könnte!



  • du willst also, dass die Zeichen, die ankommen, nacheinander gereiht werden, und einen String ergeben? Dazu könntest Du z.b. einen Stringstream verwenden.

    #include <sstream>
    #include <iostream>
    
    std::ostringstream oss; // Deklaration eines stringstreams
    //(...)
    

    Deine Methode:

    oss << eingelesenes Zeichen; // Zeichen anfügen
    

    z.b... aber es geht höchst wahrscheinlich besser...

    zum Umwandeln des Streams in einen String bzw. CString:

    String bla = oss.str();
    CString bla = oss.str().c_str();
    


  • da ich ja nicht nur die Daten ausgeben will, sondern auch bearbeiten will.

    Ich stelle mir das ungefähr so vor:

    die Methode OnCommunication wird automatisch immer aufgerufen, wenn ein neues Zeichen im Buffer ist.
    Dann muss ich zuerst mal prüfen, ob es das Startzeichen ist. Wenn ja, Flag "Übertragung aktiv" setzten.
    Sollange die Übertragung akiv ist, ein einen Stringbufferschreiben.

    Wenn 100 Zeichen drin stehen, ist Übertragung fertig, d.h. zur Kontrolle Endezeichen überprüfen. Wenn vorhanden war Übertragung erfolgreich. Somit kann Flag "Übertragung aktiv" löschen und etwas mit den Daten machen. Also z.B. separieren und Messwerte auswerten.

    Da Übertragung Störungen haben kann, muss ein Timeout realisiert werden. Wie das nun wieder geht, weis ich auch noch nicht, aber vielleicht hat jemand eine Idee?


Anmelden zum Antworten