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.aspxDiese 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...