Autor Thema: Serielle Schnittstelle unter Windows  (Gelesen 16398 mal)

Masen

  • Beiträge: 31
    • Profil anzeigen
Gespeichert
« Antwort #20 am: 25. July 2008, 13:59 »
So kleines Update , das Problem das ich Daten nicht 2mal Auslesen konnte hab ich in den Griff bekommen, in dem ich nach jedem Lesen CloseHandle() ausgeführt hab ... Doch anscheinend klappt das Senden von Daten an den mC nicht , nach dem Absenden krieg ich immer Fehler Meldungen nach ausführen von CreateFile...

ich prüfe folgendermassen:
h_com = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0 , NULL);
if (h_com == INVALID_HANDLE_VALUE) {
       printf ("Handle error %d.\n", GetLastError());
       EingabeBufferLoeschen();
   getchar();
       return (1);
}

dann schicke ich einen string an den mC:
unsigned short int Interval;
unsigned long nBytesWrite;
char WriteString[7];
EingabeBufferLoeschen();
scanf ("%i",&Interval);
sprintf(WriteString, "t%i\n", Interval);
WriteFile(hcom,WriteString,7,&nBytesWrite,NULL);
CloseHandle (hcom);

das ganze klappt dann wohl nicht so ganz, obige fehler abfrage ergibt dann einen fehler code 5 als return wert von GetLastError();


Termite

  • Beiträge: 239
    • Profil anzeigen
Gespeichert
« Antwort #21 am: 25. July 2008, 15:29 »

Moin

http://msdn.microsoft.com/en-us/library/ms681382(VS.85).aspx
sollte auskunft über deinen Fehler geben.

hab ich das gefühl, das du im kompletten ablauf irgendwie den wurm drinn hast?

1. Comm port öffnen,
2. Configurieren,

3. Daten senden und schreiben
4. bei erneuten senden und schreiben mit 3 weitermachen!

5. wenn nicht comm port wieder schliessen und Handel löschen.

Masen

  • Beiträge: 31
    • Profil anzeigen
Gespeichert
« Antwort #22 am: 28. July 2008, 16:44 »
hi,

also von der reihenfolge passt das schon alles .... das problem taucht ja auch nach dem senden auf, also scheint da ein problem mit zu sein, ist das die WriteFile funktion denn so in ordnung wie ich sie benutze ?

Masen

  • Beiträge: 31
    • Profil anzeigen
Gespeichert
« Antwort #23 am: 04. September 2008, 18:37 »
Hi,
muss doch nochmal die Community um Hilfe, Projekt Abgabe Datum ist nah, und ab gesehen von einem kleinen Prob hab ich alle anderen aus dem weg geschafft ... es geht darum, das mein Programm bei der Kommunikation mit dem MC einzufrieren scheint, BIS ich dann mal ein Terminal Programm ausführe (hterm) dann läuft in meiner Software alles prima ...dennoch scheint auch beim einfrieren die kommunikation zu klappen, da der MC Daten empfängt (LED bestätigt das) ... desweiteren meldet sich auf der PC seite auch keine fehlermeldungen ... es ist auch nicht so das mein programm wirklich "abstürzt" sondern an der stelle wo was empfangen werden müsste, geht es nicht weiter, die konsole lässt sich jedoch ganz normal schließen ...
weiß da echt nicht weiter, da ich die serielle schnittstelle so initialisiere, wie man es jedem Tutorial oder sonst wo im Internet findet ... an dem Rechner liegt es auch nicht, da auf 2 ausprobiert, 1mal mit echter RS232 schnittstelle, 1mal mit RS232/USB adapter... jedes mal das selbe phänomen ...

hoffe echt das mir da jemand weiterhelfen kann  :|

hier mal meine init funktion

HANDLE init()
{

    DCB dcb;
    HANDLE h_com;
    BOOL fSuccess;

    h_com = CreateFile(ComPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0 , NULL);
    if (h_com == INVALID_HANDLE_VALUE)
    {
        printf ("Handle error %d.\n", GetLastError());
        EingabeBufferLoeschen();
        getchar();
        return (1);
    }


    dcb.DCBlength = sizeof(DCB);
    fSuccess = GetCommState(h_com, &dcb);

    if (!fSuccess)
    {
        printf ("GetCommState error %d.\n", GetLastError());
        EingabeBufferLoeschen();
        getchar();
        return (2);
    }


    dcb.BaudRate = 9600;
    dcb.ByteSize = 8;
    dcb.Parity = NOPARITY;
    dcb.StopBits = ONESTOPBIT;
    fSuccess = SetCommState(h_com, &dcb);

    if (!fSuccess)
    {
        printf ("error %d.\n", GetLastError());
        EingabeBufferLoeschen();
        getchar();
        return (3);
    }

    return h_com;
}


Masen

  • Beiträge: 31
    • Profil anzeigen
Gespeichert
« Antwort #24 am: 29. September 2008, 13:32 »
hat keiner ne idee ?

MNemo

  • Beiträge: 547
    • Profil anzeigen
Gespeichert
« Antwort #25 am: 29. September 2008, 13:47 »
hab mir jetzt hier nicht alles genau durchgelesen und hab auch nicht viel ahnung von W[...]s-Programierung, aber mit was liest du denn die daten ein? bzw. was macht die funktion wenn keine daten vorhanden sind? eventuell wartet sie bis welche vorhanden sind, dann solltest du dir entweder ne andere funkiton suchen die nicht wartet, oder vorher überprüfen ob daten vorhanden sind.
„Wichtig ist nicht, besser zu sein als alle anderen. Wichtig ist, besser zu sein als du gestern warst!“

Masen

  • Beiträge: 31
    • Profil anzeigen
Gespeichert
« Antwort #26 am: 12. October 2008, 16:37 »
hm,ne das ist ja allgemein nicht das problem ... sondern das mein Programm erst was auslesen kann NACHDEM ich ein Terminal programm (zB Putty) auf die schnittstelle ausgeführt hab ... ich weiß echt nicht weiter, was macht putty damit das läuft ? ich hab mir nun auch schon den quellcode angeguckt, ich kann da nix erkennen ... weiß da keiner weiter? bald ist abgabe da muss das laufen, und es kann ja echt nicht sein ... muss wohl irgendwas dummes sein °-° weiß keiner rat ?!?

 

Einloggen