Serielle Daten einlesen und ausgeben



  • hi.

    ich hab mir von dem artikel: http://www.codeguru.com/Cpp/I-N/network/serialcommunications/article.php/c2503/ die header und source datei geholt und will eigentlich nur eine zahl einlesen und über eine message box ausgeben. der code sieht ungefähr so aus:

    if (serial.Open(3, 9600))
    {
    	 char* lpBuffer = new char[500];
    
    	 int nBytesRead = serial.ReadData(lpBuffer, 500);
    	 AfxMessageBox(lpBuffer);
    	 delete []lpBuffer;
    }
    else
    	 AfxMessageBox("Failed to open port!");
    

    bei mir kommt jedoch nur schrott raus und frag mich ob ich lpBuffer noch konvertieren muss. komme alleine leider nichtmehr weiter.

    danke im voraus



  • Hast Du mal geschaut was in "nBytesRead" drin steht?
    Ich Empfehle:
    http://www.codeproject.com/system/serial.asp



  • ja natürlich ists in nBytesRead drin, ich war etwas verwirrt. aber ich bekomm immer einen assertion failure wenn ich nBytesRead in einer AfxmessageBox(nBytesRead) ausgeben will. dein link schaut recht gut aus aber bräuchte ja nicht so etwas komplexes aber werds mir mal anschaun



  • Glaub mir: Du brauchst sowas komplexes.
    Das ansprechen der seriellen Schnittstelle hört sich zwar einfach an, ist es aber nicht.
    Und wenn ich "reinschauen" meinte, dann meinte ich im debugger :p



  • Milchmann schrieb:

    ja natürlich ists in nBytesRead drin, ich war etwas verwirrt. aber ich bekomm immer einen assertion failure wenn ich nBytesRead in einer AfxmessageBox(nBytesRead) ausgeben will. dein link schaut recht gut aus aber bräuchte ja nicht so etwas komplexes aber werds mir mal anschaun

    Also in <nBytesRead> steht drin, wieviele Bytes du empfangen hast. steht da schon mal 0, dann haste nix empfangen. Ansonsten kannst du z.b. die Bytes so auslesen...

    CString sInput;
    for(int i=0; i<nBytesRead; i++){
     sInput = sInput + lpBuffer[i];
    }
    
    AfxMessageBox(sInput);
    

    Aber halt! Das Anzeigen der Daten funktioniert dann auch nur, wenn du druckbares ASCII-Zeichen gesendet hast! Nix Steuerzeichen oder so.
    Alles klar? sollte nicht allzu schlimm sein, zumal die Anleitung dort bei der Klasse ganz i.O. ist.

    Ahh noch was: Bist du sicher, dass du auch Daten versendest? Du kannst ja z.b. zwei Windows Hyperterminalprogramme starten und daten zwischen zwei COMports senden.



  • Jochen Kalmbach schrieb:

    Ich Empfehle:
    http://www.codeproject.com/system/serial.asp

    hab mir das angeschaut und gefällt mir eigentlich recht gut. habe auch ein bisschen rumprobiert aber schaff es nicht mein programm zum laufen zu kriegen. bin mir unschlüßig welche header datein jetzt zu verwenden sind und allgmein kommen bei mir dann beim erstellen der seriellen klasse mit "CSerial .." fehler wie diese:

    serial1Doc.obj : error LNK2019: unresolved external symbol "public: __thiscall CSerial::CSerial(void)" (??0CSerial@@QAE@XZ) referenced in function _E1serial1Doc.obj:errorLNK2019:unresolvedexternalsymbol"public:virtual__thiscallCSerial:: CSerial(void)"(??1CSerial@@UAE@XZ)referencedinfunction_E1 serial1Doc.obj : error LNK2019: unresolved external symbol "public: virtual \_\_thiscall CSerial::~CSerial(void)" (??1CSerial@@UAE@XZ) referenced in function \_E2
    Debug/serial1.exe : fatal error LNK1120: 2 unresolved externals

    hat schon jemand mit SDI programmen und der seriellen klasse gearbeitet und kann mir weiterhelfen ?

    danke für die hilfe



  • Du musst natürlich noch die CPP-Dateien in Dein Projekt aufnehmen...



  • ach gott entschuldigung wie peinlich. hatte nicht alle source files in mein projekt geladen und die header datein nicht angepasst an mein MFC programm.

    danke


Anmelden zum Antworten