Serielle Schnittstelle ansprechen



  • Hallo,
    ich bin Anfänger in der C++ Programmierung, und müsste für ein Projekt über die Serielle Schnittstelle ein paar Werte senden. Ich brauche keine großartigen Protokollfunktionen vorerst würde es mir reichen wenn ich z.B. das machen könnte:

    Send(10);

    Und eine dezimale 10 gesendet wird.

    Ich hoffe mir kann da jemand weiterhelfen. Ich benutze Visual Studio C++. Das ganze soll vorerst eine Konsolen Anwendung werden.

    Viele Grüße



  • Unter Windows kannst du dafür die WinAPI-Funktionen CreateFile, WriteFile, CloseHandle benutzen.
    z.B.

    // nur schematisch
    char portstring[10];
    sprintf(portstring,"COM%d",comport);
    
    comporthandle=CreateFile(portstring,GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
    
    WriteFile(comporthandle,buffer,anzahlbytes,&anzwritten,NULL);
    
    CloseHandle(comporthandle);
    


  • Das erinnert mich nur leider mehr an C als C++. Ich wollte eigentlich versuchen mein erworbenes Wissen über OOP etc. bei dem Projekt umzusetzen. Eine einfach zu handhabende Klasse gibt es für die Serielle Schnittelle nicht, oder?



  • Ich habe jetzt diese Klasse gefunden (ganz unten). Nur leider bringt diese beim compilieren 2 Errors:

    error C2664: 'CreateFileW': Konvertierung des Parameters 1 von 'char [15]' in 'LPCWSTR' nicht möglich

    error C2039: 'm_error': Ist kein Element von 'CSERIELL'



  • OK, dann probiere mal eine dieser Klassen:
    http://www.codeguru.com/cpp/i-n/network/serialcommunications/article.php/c2503/
    http://www.codeproject.com/KB/system/serial.aspx

    Diese wrappen dann die WInAPI-Aufrufe...

    P.S: Der erste Fehler bei dir deutet auf das Problem UNICODE bei den Projektoptionen hin.



  • Das mit dem UNICODE habe ich auch gelesen wie stelle ich das denn ein? Ich habe wie gesagt Visual Studio 2008.



  • Das hab eich auch noch gefunden. Ich denke das gehe ich mal durch, um die ganze Portgeschichte zu verstehen:

    http://www.devmentor.ch/teaching/additional/00I/Semester5/Abend6/Abend6.pdf



  • Also ich habe jetzt mal diese Library getestet: http://www.codeproject.com/KB/system/serial.aspx

    mit dem Code:

    #include <iostream>
    #include <tchar.h>
    #include <windows.h>
    #include "serialport.h"
    
    using namespace std;
    
    int main()
    {
    	CSerial serial;
    
    	serial.Open(_T("COM1"));
    	serial.Setup(CSerial::EBaud9600,CSerial::EData8,CSerial::EParNone,CSerial::EStop1);
        serial.SetupHandshaking(CSerial::EHandshakeHardware);
    	serial.Write("Hello world");
    	serial.Close();
    	return 0;
    }
    

    Leider kommt auf dem anderen PC nichts an. Das Programm scheint auch irgendwo zu hängen, da das Konsolenfenster nicht zu geht.



  • dann geh doch mal mit dem debugger rein und schau wo es hängen bleibt. Sollte ja nicht so schwer sein 🙂
    Ich vermute mal irgendwo zwischen setup und handshake...


Log in to reply