Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Serielle Schnitstelle

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ] [ 4 ]
010
13.07.2003, 14:08 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


includiere mal windows.h

Gruss Heiko
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
13.07.2003, 20:48 Uhr
~tobiwankenobi
Gast


Danke!! Ist mir gestern auch noch eingefallen!! Läuft jetzt wunderbar!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
09.12.2003, 15:12 Uhr
proga




Zitat:
~tobiwankenobi postete
Ok das hast du auch sehr schön beschrieben! Aber woher kommt das Objekt HANDLE h_com ??
Von CreateFile(...) denke ich mal, oder ?

Dieser Post wurde am 09.12.2003 um 15:14 Uhr von proga editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
19.02.2004, 15:11 Uhr
Lola



So wie das timeout in deinem Programm steht, Windalf, läuft das ewig, wenn er kein Signal kriegt, oder?

Müsste ich statt der Null also einfach einen Wert eingeben, und solange würde das Programm dann warten und abbrechen, wenn kein Signal kommt?

Und in welcher Einheit ist das? ns oder mücro s?
--
The more you study - The more you know
The more you know - The more you forget
The more you forget - The less you know

Why study!?

Dieser Post wurde am 19.02.2004 um 15:18 Uhr von Lola editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
19.02.2004, 16:04 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@Lola
Jo der wartet ewig wenn der kein Singal bekommt... Da kannst du höchstens noch was mit TerminateThread killen

zum timeout setzen einfach diese struktur hier verwenden


C++:
typedef struct _COMMTIMEOUTS {  
    DWORD ReadIntervalTimeout;
    DWORD ReadTotalTimeoutMultiplier;
    DWORD ReadTotalTimeoutConstant;
    DWORD WriteTotalTimeoutMultiplier;
    DWORD WriteTotalTimeoutConstant;
} COMMTIMEOUTS,*LPCOMMTIMEOUTS;


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
19.02.2004, 17:00 Uhr
Lola



Also, wenn ich vom COM-port nur lesen will, reicht das nicht, wenn
ich diesen hier eingebe?


C++:
          COMMTIMEOUTS cto;

          cto.ReadTotalTimeoutConstant=0;
          cto.ReadTotalTimeoutMultiplier=0



Ich bin ja neu in C++ und grad verwirrt. Den

C++:
typedef struct {blah}

den schreibt man über die main?
Korrekt?
--
The more you study - The more you know
The more you know - The more you forget
The more you forget - The less you know

Why study!?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
19.02.2004, 18:58 Uhr
~global
Gast


hei, nee den gibts schon, den musste nur noch mit daten füllen und zurück geben...
ich mach das meistens so:

C++:
HANDLE h_ComPort = CreateFile(_T("\\\\.\\COM12"), GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0 , NULL);
// com-port settings & timeouts
    DCB dcb;
    dcb.DCBlength = sizeof(dcb);
    COMMTIMEOUTS cto;

    GetCommState(h_ComPort, &dcb);
        dcb.BaudRate = (DWORD)baudrate;
        dcb.ByteSize = (BYTE)databyts;
        dcb.StopBits = (BYTE)stopbits;
        dcb.Parity = (BYTE)parity;
//        dcb.fDsrSensitivity = 0;
//        dcb.fOutxCtsFlow = 0;
//        dcb.fOutxDsrFlow = 0;
//        dcb.fInX = 0;
//        dcb.fOutX = 0;
        dcb.fDtrControl = DTR_CONTROL_DISABLE;
        dcb.fRtsControl = RTS_CONTROL_DISABLE;
    SetCommState(h_ComPort, &dcb);

    GetCommTimeouts(h_ComPort,&cto);
        cto.ReadIntervalTimeout = 10;
        cto.ReadTotalTimeoutConstant = 10;
        cto.ReadTotalTimeoutMultiplier = 0;
        cto.WriteTotalTimeoutConstant = 5000;
        cto.WriteTotalTimeoutMultiplier = 0;
    SetCommTimeouts(h_ComPort,&cto);

    PurgeComm(h_ComPort, PURGE_TXCLEAR | PURGE_RXCLEAR);

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
20.02.2004, 08:51 Uhr
Lola



DANKE!!

Muss ich die Write-timeouts auch konfigurieren, wenn ich nur vom COM-Port lesen will?

Wie kann ich ByteSize bestimmen? Kann ich mit einem Befehl, so wie sizeof
vorher prüfen, wie groß das ist, was ich vom Port lese und das dann als Variable in ByteSize rein schreiben?

C++:
dbc.ByteSize=sizeof(daten)



Also, das Signal kommt aber von nem Mikrocontroller.
Und gibt es auch so was wie ZEROSTOPBITS? In MSDN steht ONE als erstes.

Und was ist nochmal das Paritybit? Wenn die Bitzahl grade oder ungrade ist, oder? Und wann wird es gesetzt?

Hätte ich vorwarnen sollen, dass ich ein kleiner DAU bin? *schäm*
--
The more you study - The more you know
The more you know - The more you forget
The more you forget - The less you know

Why study!?

Dieser Post wurde am 20.02.2004 um 09:04 Uhr von Lola editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
20.02.2004, 09:15 Uhr
ao

(Operator)



Zitat:
Lola postete
Muss ich die Write-timeouts auch konfigurieren, wenn ich nur vom COM-Port lesen will?


Nein.

Zitat:
Wie kann ich ByteSize bestimmen?

ByteSize ist die Anzahl der Bits pro Datenwort auf der seriellen Verbindung. Sender und Empfänger müssen die gleiche Einstellung verwenden. Mit Abstand am weitesten verbreitet ist 8 Bits pro Wort. Außerdem gibts noch 7, 6 und 5. 7 trifft man gelegentlich noch an, aber 6 und 5 spielen soweit ich weiß in der Praxis keine Rolle mehr.

Zitat:
Also, das Signal kommt aber von nem Mikrocontroller.
Und gibt es auch so was wie ZEROSTOPBITS? In MSDN steht ONE als erstes.

Nein. Asynchrone (ohne zusätzliche Taktleitung) serielle Verbindungen beruhen darauf, dass jedes Byte in einen Rahmen aus Startbit und Stopbit(s) eingepackt wird.

ao

Dieser Post wurde am 20.02.2004 um 09:15 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
20.02.2004, 09:31 Uhr
Lola



Achso! Ich hab die Erklärung in MSDN von ByteSize falsch verstanden.


Vielen lieben Dank!!

Achso:


C++:
HANDLE h;

  h = CreateFile ("COM2",      // Name des ports
         GENERIC_READ,          // LESE-Modus
         ILE_SHARE_READ,       // Share Modus: LESEN
         NULL,                       //
         OPEN_EXISTING,        // Nur, wenn die Datei existiert, greift das Prog drauf zu
         FILE_ATTRIBUTE_READONLY,    // Vom Port soll nur gelesen werde
         NULL);                      //

if( h!=INVALID_HANDLE_VALUE) //Wenn der Aufruf geklappt hat?
{
   ReadFile (...);
   CloseHandle(h);
}
else                                   //Wenn der Aufruf nicht geklappt hat



Ist die Abfrage der If-Anweisung so richtig?
Oder müsste es == sein?
--
The more you study - The more you know
The more you know - The more you forget
The more you forget - The less you know

Why study!?

Dieser Post wurde am 20.02.2004 um 09:52 Uhr von Lola editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ] [ 4 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: