rs232 schnittstelle mit c++ auslesen



  • 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. Interpretieren

    Oftmals 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 1010

    Karte2:
    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? 😕


Anmelden zum Antworten