rs232 schnittstelle mit c++ auslesen
-
Hallo Leute,
ich wollte bei einer rs232 Schnittstelle die Handshakeleitungen CTS und DSR auslesen, da dort Impulse übertragen werden, die ich zählen will.
Gibt es eine einfache Methode,wie dies in C++ realisiert werden kann?
-
Die RS232 kannst du nicht mit Standard-C++ ansprechen. Du musst bestriebssystemspezifische Funktionen verwenden (unter Windows gäbe es z.B. CreateFile, ReadFile, WriteFile).
EDIT: Sorry, hab das mit den Steuerleitungen überlesen. Ich denke, das wirst du unter Windows auch nicht so einfach hinkriegen.
-
Benutze doch folgende Serial Library: http://www.codeproject.com/KB/system/serial.aspx
CTS und DSR kannst Du damit meines Wissens auch abfragen.
Simon
-
Falls Du mit Windows arbeitest, so schaue Dir mal GetCommModemStatus an.
-
Hi.
ich habe das mal mit getcommmodemstatus probiert nur bekomme ich immer ein invalid_handle zurück. getlast error besagt den error mit der nummer 2.
Hier mal ein bisschen Code, was mache ich den falsch?´#include<iostream> #include <stdio.h> #include <string> #include<windows.h> #include<conio.h> #include<dos.h> using namespace std; int main() { HANDLE hCom; DWORD COMStatus; int count=0; double length; hCom= CreateFile((LPCWSTR)"COM1", GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); while(count<10) { if(hCom!=INVALID_HANDLE_VALUE) { GetCommModemStatus(hCom,&COMStatus); if(COMStatus & MS_CTS_ON) count++; } else cout<<GetLastError(); } CloseHandle(hCom); return 0; }
-
clubber schrieb:
Hi.
ich habe das mal mit getcommmodemstatus probiert nur bekomme ich immer ein invalid_handle zurück. getlast error besagt den error mit der nummer 2.
Hier mal ein bisschen Code, was mache ich den falsch?Empfehlung:
1.) Nachschauen was Errorcode == 2 bedeutet -> Es bedeutet: 'file not found'
2.) Überlegen warum nicht -> "COM1" bzw. der 1. Parameter bei Create ist irgendwie falsch
3.) Überlegen was (LPCWSTR)"COM1" eigentlich tut -> ist identisch mit reinterpret_cast< const wchar_t* >( "COM1" ) und das ist fatal, weil er einen String bekommt, dessen erstes Zeichen 'CO' das zweite 'M1' und das dritte irgendwas ist.
4.) Ausdruck ändern nach TEXT("COM1") und nochmal versuchen
5.) sich wieder hier melden und Feedback geben, ob dieser Beitrag Ihnen geholfen hat
-
Wenn man das mit dem LPCWSTR ändert komm nicht dauernd 2 zurück.
Aber ich habe eine andere Frage:Ich habe diesen Bausatz:
http://www.pollin.de/shop/dt/MDQ5OTgxOTk-/Bausaetze_Module/Bausaetze/Bausatz_RFID_125kHz_Empfaenger.html[url]Der sendet über sie RS232 Stchnittstelle die ID's der erkannten RFID Karten.
Das funktioniert auch mit einen terminealprogramm wie Putty.
Doch ich wollte diese ID's mit einem C++ Programm auslesen, dass dann je nachdem welche karte erkannt wurde was anderes macht.(Ich verwende Microsoft Visual c++ 2010 express)
-
Du hast vergessen eine Frage zu stellen...
-
Frage:
Wie geht das?
-
Dazu musst Du vom seriellen Port Daten lesen und interpretieren, dazu MUSST du wissen, wie die Daten zu interpretieren sind. Z.B. erhältst 4 Bytes, da könnte es sein, dass es ein unsigned int (32bit) ist oder es können auch 4 chars eines null-terminierten Strings sein.
Also:
1. Lesen
2. InterpretierenOftmals gibts noch ein Framing Protokoll, dass dir sagt wie viel gelesen werden muss. Bsp. wird ein Start Of Message (SOM) Pattern gesendet, dann die Daten und dann ein End Of Message (EOM) Pattern... danach kannst Du die Daten interpretieren. Manchmal ist das Framing Protokoll auch "implizit", z.B. weil immer gleichgrosse Packete gesendet werden. Nicht alle Framing Protokolle sind für die Serielle Schnittstelle geeignet, ich würde sagen SOM/EOM ist ein gängiges.
Edit:
Typo korrigiert
-
Also so kommts in einem fertigen terminalprogramm (wie putty) an:
(jeweils: ascii, dezimal, hex und binär)Karte1:
490018704A
52 57 48 48 49 56 55 48 52 65 13 10
34 39 30 30 31 38 37 30 34 41 D A
110100 111001 110000 110000 110001 111000 110111 110000 110100 1000001 1101 1010Karte2:
490018249F
52 57 48 48 49 56 50 52 57 70 13 10
34 39 30 30 31 38 32 34 39 46 D A
110100 111001 110000 110000 110001 111000 110010 110100 111001 1000110 1101 1010
-
Darf man fragen was das alles noch mit C++ zu tun hat - und in welches Forum ich dich verschieben darf?
-
pumuckl schrieb:
Darf man fragen was das alles noch mit C++ zu tun hat - und in welches Forum ich dich verschieben darf?
...und was jetzt überhaupt deine Frage ist?
