Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » CreateFile / Handshakes / HILFE BITTE

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 ]
000
30.07.2004, 23:02 Uhr
~wasa
Gast


Tagchen!

sorry das ich schon wieder nerven muss, aber ich krieg gleich plack hier!
Will mittels CreateFile den Com Öffnen und später lesen. Nun werden aber für das Gerät was am COM hängt folgende HandShakes vereinbart:
DTR on, RTS kurz on danach off.
habe folgende Funktion geschrieben:


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, CREATE_NEW
      
    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);
    
        //EscapeCommFunction(DriverHandle, SETDTR);
        //EscapeCommFunction(DriverHandle, SETRTS);
        //Sleep(5000);
        //EscapeCommFunction(DriverHandle, CLRRTS);


        return DriverHandle;
    }else
        return 0;
}



Das Our_CDB sind im Prinzip die Werte die ich ändern will also baud etc.
Laut diesem Forum und der Hilfe msdn kann man mittels EscapeCommFunction die HandShakes setzen, so wie im Programm geschrieben. Habe alles ausprobiert aber der will das einfach nicht machen. Es kommen keine Fehlermeldungen, aber die Funktion setzt die HandShakes nicht so wie ich es brauche, also DTR on, RTS kurz on danach off.
Ich hoffe ihr könnt mir helfen, weil ich langsam echt verzweifle!!!!
Vielen Vielen Dnak schonmal!!
cu wasa
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.08.2004, 01:02 Uhr
~toxic
Gast


hi, wie letztens schon gesagt(geschrieben) wurde MUSS fRtsControl = RTS_CONTROL_DISABLE sein !
hast du fDtrControl auf DTR_CONTROL_ENABLE dann wird DTR gesetzt sobald du die com mit CreateFile öffnest. die com's immer nur mit "OPEN_EXISTING" öffnen !

was genau funktioniert denn nicht ?
wie testest du denn den pegel an den pins der com ?
die "EscapeCommFunction(DriverHandle, SETDTR);" funktioniert auf alle fälle, hab ich selbst schon mehrfach benutzt.
--
grusz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.08.2004, 12:32 Uhr
~wasa
Gast


tagchen!

thx erstmal für die antwort!
habe das jetzt wie folgt geschreiben:

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

    
    DriverHandle = CreateFile ("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);//OPEN_EXISTING//CREATE_NEW
      
    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_DISABLE;
        SetCommState(DriverHandle,&Our_DCB);
    
        //EscapeCommFunction(DriverHandle, SETDTR);
        EscapeCommFunction(DriverHandle, SETRTS);
        Sleep(5000);
        EscapeCommFunction(DriverHandle, CLRRTS);


        return DriverHandle;
    }else
        return 0;
}



Das Programm bringt mir keine Fehlermeldungen. Das Prg verscuht den COM zu öffnen und zu lesen nur klappt das manchmal nicht. bzw kommen beim lesen total verrückte ergebnisse raus, wenn ich das so mache wie oben!!!

wie testest du denn den pegel an den pins der com ?
Wie kann man das machen??
thx schonmal!! DANKE
cu wasa
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.08.2004, 15:05 Uhr
~toxic
Gast


hi,
also meistens messe ich die pegel mit nem messgerät, man kann natürlich auch ne leuchtdiode mit vorwiederstand benutzen, ist ja nur 0 | 1

naja, wenn das lesen nicht (so richtig) klappt musst du mal den code zeigen mit dem du liest.
--
grusz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.08.2004, 22:02 Uhr
~wasa
Gast


tagchen!

okay anbei der Quelltext zum auslesen!

C++:
void CVersion1507Dlg::Auslesen(int p, int o)
{
    //p = wiederholungen, o = intervalle
    FlushFileBuffers(L);


    for (int n=1; n<=p; n++)
    {
    com_ComHandle1=com_port_1.Open_Comport_HS();
    Sleep(500);
    com_port_1.Read_Comport_HS(com_ComHandle1, 14, L);
    Decodierung(L, n);

    //Entleeren des Puffers
    FlushFileBuffers(L);

    CloseHandle(com_ComHandle1);

    // Intervallangabe pause
    Sleep(o);
    }

}


Die Funktion Decodierung die aufgerufen wird, decodiert die einzelnen Bytes, da die Codierung bei dem Messgerät binär also bitweise erfolgt.
Ich sollte vielleicht noch erwähnen, dass ich mein ein Programm namens Docklight heruntergeladen habe, welches wie das Hyperterminal bei windows arbeitet! Der Vorteils dieses Programmes ist, das man mehrere Einstellungen verändern kann angefangen von baud, anzahl bits parität etc. Das wirklich wichtige ist dabei das man während der messungen zum Beispiel bzw. nach dem Öffnen oder überhaupt jederzeit DTR RTS etc alles setzten kann wie man will, bzw verändern kann wann und wie man will.
Dadurch habe ich ja erst herausgefunden das man DTR on und RTS kurz on und danach off setzen muss.
Wenn ich das Programm starte , den COM öffne DTR setze/ RTS setze und kurz danach RTS off setze funktioniert alles dann kann ich mit meinem Programm den Ausgabestring des Messgerätes auslesen und decodieren. In meinem Programm steht dann aber nur das vom DTR und RTS ist disable. Wenn ich Docklight beende kann ich das trotzdem noch auslesen.
Sobald ich aber nur mein Programm öffne und versuche den COM zu öffnen bzw. die HandShakes zu vereinbaren kommt nur müll dabei heraus. und da habe ich schon alles versucht mit EscapeCommFunction(SetRTS).. etc zu setzen!!
Da komme ich nicht weiter. Also am auslesen kann es nicht liegen!
Ich hoffe du kannst mir helfen und beDANKE mich schonmal!!!!!!
THX cu wasa
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
03.08.2004, 00:52 Uhr
ao

(Operator)


Du kannst auch das DTR über EscapeCommFunction direkt steuern, vielleicht versuchst du das mal. Im DCB muss dann natürlich DTR_CONTROL_DISABLE verwendet werden.

Hast du irgend ne Doku über dein Messgerät, die beschreibt, was du mit den Handshake-Leitungen machen sollst?

Und was soll FlushFileBuffers (L)? L ist doch dein Datenpuffer.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
03.08.2004, 11:14 Uhr
~wasa
Gast


Tagchen!

Also zu dem Messgerät gabs nur ne kleine Bedienungsanleitung und etwa 5 zeilen wo drin steht wie man das teil an einen computer anschliesst. Das Problem bei dem messgerät ist, dass man es nicht ansteuern kann. also es nur eine unidirektionale Verbindung gibt.
Wie man das Teil ausliest, also die ganzen Einstellungen habe ich erst über das Programm Docklight (ähnlich Hyperterminal bei windows) herausgefunden. Da in der Beschrei´bung zu dem Messgerät nichts da stand bzw. der Hersteller und Vertreiber mir keine Auskunft dazu geben konnte.

zu dem FlushFileBuffer(L): L ist mein Datenpuffer. Nach jeder Messung und Decodierung soll mit der Funktion der Datenpuffer geleert werden. Wurde mir so geraten!!

zu DTR mittels EscapeCommFunction: Habe ich auch schon alles probiert funktioniert aber auch nicht!!!!!!!
Langsam verzweifle ich!
Ich hoffe ihr könnt mir vielleicht sagen was ich noch falsch mache!
VIELEN DANK ERSTMAL!!
cu wasa
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
03.08.2004, 11:44 Uhr
ao

(Operator)


FlushFileBuffer musst du (wenn überhaupt) auf das COM-Handle loslassen, niemals auf deinen lokalen Speicher, das hast du missverstanden.

Und so wie ich die Doku verstehe, ist es nur beim Schreiben interessant und gilt auch nur für echte Dateien im Filesystem (nicht für Geräte wie Schnittstellen). Also lass es erst mal weg, wahrscheinlich gehört es da nicht hin.

Was das DTR- und RTS-Gefummel angeht: Wenn es mit Docklight geht und mit deinem Programm nicht, dann gibt es irgendeinen Unterschied zwischen den beiden Programmen, aber welcher das ist, kann man von hier aus unmöglich sagen.

Du musst rausfinden, welches Verhalten das Multimeter erwartet. Wenn der Hersteller dir nicht helfen kann, geh ins Internet und such, vielleicht hat irgendjemand das Problem schon gehabt.

Es gibt eine Newsgroup namens de.sci.electronics, in der die Elektronik-Experten sitzen. Vielleicht kennt dort jemand das Gerät.

Oder miss selber nach, welche Spannungen auf DTR und RTS liegen, wenn Docklight läuft und wenn dein Programm läuft.

Du hattest doch mal so nen Unix-Sourcecode, von dem du viel abgekupfert hast. Wie geht der denn mit den Steuerleitungen um? Machs doch mal genauso wie da.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
03.08.2004, 11:46 Uhr
ao

(Operator)



Zitat von ao:
FlushFileBuffer ...
Und so wie ich die Doku verstehe, ... gilt auch nur für echte Dateien im Filesystem

Ich lese gerade, das stimmt nicht, es wirkt auch auf Geräte. Aber definitiv nur in Schreibrichtung. Fürs Lesen ist es ohne Bedeutung, also weg damit.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
03.08.2004, 12:54 Uhr
~wasa
Gast


Tagchen!
okay werd das mit flushfilebuffer mal raushauen!
bei dem unix source code, hab ich keine ahnung wie der das macht! da habe ich nicht wirklich durchgesehen.
werde mich aber mal im netz umschauen und mal bei de.sci.electronics nachschauen!!
Vielen Dank für deine hilfe!!
THX cu wasa
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: