Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » HandShakes

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 <
000
28.07.2004, 22:27 Uhr
~wasa
Gast


Hallo Leute!

sorry muss mal wieder nerven!

Mein Programm öffnet den COM1 um daten von nem Messgerät zu lesen.
das klappt alles recht gut.
Nur wird bei der Übertragung folgendes gesetzt: DTS, RTS kurz on dann off

Die Funktion zum öffnen sieht ie folgt aus!
Nun meine Frage, wei kann ich das RTS kurz on und danach wieder off setzen!
Habe hier im Tut und der hilfe nachgeschaut aber nichts gefunden was mir weiter hilft.
Ich hoffe ihr könnt mir helfen und bedanke mich schon mal!
DANKE cu wasa

C++:
HANDLE CCOM_PORT1::Open_Comport_HS(){
    HANDLE  DriverHandle;
    DCB     Our_DCB;

    
    DriverHandle = CreateFile ("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_NEW, 0, NULL);//OPEN_EXISTING
      
    if(DriverHandle!=0){
        GetCommState(DriverHandle, &Our_DCB);

        Our_DCB.BaudRate = 2400;        //2400
        Our_DCB.ByteSize = 8;
        Our_DCB.Parity   = NOPARITY;
        Our_DCB.StopBits = ONESTOPBIT;

        Our_DCB.fDtrControl = DTR_CONTROL_ENABLE;
        //Our_DCB.fRtsControl = RTS_CONTROL_HANDSHAKE;

          SetCommState(DriverHandle,&Our_DCB);

        return DriverHandle;
    }
    else
        return 0;
}


Dieser Post wurde am 28.07.2004 um 22:42 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.07.2004, 02:16 Uhr
~toxic
Gast


hallo, ...

C++:
HANDLE hCOMport = CreateFile("\\\\.\\COM1", GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING,    0, 0); // <-- nur OPEN_EXISTING verwenden !
DCB dcb;
dcb.DCBlength = sizeof(dcb);
GetCommState(hCOMport, &dcb);
  BuildCommDCB("baud=2400 parity=N data=8 stop=1", &dcb);
// lässte sich auch mit einem String füllen:
// CString COMconfig = "baud=2400 parity=N data=8 stop=1";
// BuildCommDCB((LPCTSTR)COMconfig, &dcb);
  dcb.fDtrControl = DTR_CONTROL_DISABLE; // <-- geht auch ohne
  dcb.fRtsControl = RTS_CONTROL_DISABLE;// <-- muss auch nicht unbedingt so sein
SetCommState(hCOMport, &dcb);
...
EscapeCommFunction(hCOMport, SETRTS);
Sleep(500);
EscapeCommFunction(hCOMport, CLRRTS);

--
grusz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.07.2004, 08:49 Uhr
ao

(Operator)


Wenn man DTR und RTS benutzt, um von Hand irgendwas zu signalisieren, dann SOLLTE im DCB DTR_CONTROL_DISABLE und RTS_CONTROL_DISABLE gesetzt sein, so wie in toxic's Beispiel. Weil nämlich nur dann das Betriebssystem die Steuerleitungen in Ruhe lässt und das Anwendungsprogramm die Kontrolle hat.

Was man dann natürlich nicht hat, ist ein Hardware-Handshake zur Fluss-Steuerung. Aber bei 2400 Baud ist das auch nicht wirklich notwendig.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


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: