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 <
010
03.08.2004, 13:37 Uhr
ao

(Operator)



Zitat von ~wasa:
Tagchen!
bei dem unix source code, hab ich keine ahnung wie der das macht! da habe ich nicht wirklich durchgesehen.

Dann mach das doch mal! Ist auch nur C, keine Hexerei, kann so schwierig nicht sein. Und Unix- bzw. Linux-Systemfunktionen sind sehr gut dokumentiert, auch im WWW, da müsstest du was zu finden.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
03.08.2004, 17:37 Uhr
~toxic
Gast


hallo,
mit dem löschen des puffers wird wohl der puffer des UART gemeint sein bzw. das was der treiber der com dafür bereitstellt, also :

C++:
PurgeComm(handle_des_ComPorts, PURGE_TXCLEAR | PURGE_RXCLEAR);

wie sieht der "müll" denn aus, meist liegts an den einstellungen der schnittstelle, bist du sicher das alles richtig ist ? und auch richtig gesetzt wird ?
--
grusz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
03.08.2004, 23:54 Uhr
~wasa
Gast


tagchen!


Zitat von ~toxic:
wie sieht der "müll" denn aus, meist liegts an den einstellungen der schnittstelle, bist du sicher das alles richtig ist ? und auch richtig gesetzt wird ?



bin mir zu 100 % sicher das die Einstellungen stimmen, du meinst sicher baud etc oder??
wie gesagt wenn ich ein anderes Programm öffne (docklight -> Hyperterminaldienst), dort DTR und RTS kurz on danach off setze und ich danach mein Programm öffne und den Com lese etc funktioniert alles wunderbar!
Aber sobald ich in meinem Programm das DTR / RTS setzen will, passiert nichts bzw. kommen nur irgenwelche komischen Zahlen / Daten an die nicht stimmen können, bzw. werden mir symbole angezeigt die das Messgerät angeblich anzeigen soll.

Laut der MSDN Hilfe soll man das mittels EscapeCommFunction setzen. -> gesagt getan, aber funktioniert nicht.

Ich hoffe du hast noch irgendeinen Tipp oder ne Ahnung warum das nicht geht!
Bin für jeden Vorschlag und Anregungen offen.
VIELEN DANK SCHONMAL!!
cu wasa
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
04.08.2004, 17:19 Uhr
~toxic
Gast


hi,
also, wenn das messgerät daten sendet (mit "deinem" programm jetzt) dann funktioniert das doch mit dem DTR/RTS... oder ?!
bist du sicher das die COMeinstellungen auch richtig übernommen sind ? und auch richtig gelesen wird ?

bau dir doch schnell mal einen dialog mit einem button und einem editfeld (ohne jetzt noch irgendwelche klassen hinzuzufügen) dieses ist dann deine button1 funktion:

C++:
void DeinDlg::OnButton1()
{
    HANDLE h_ComPort;
    if ( INVALID_HANDLE_VALUE == (h_ComPort = CreateFile("COM1", GENERIC_READ, 0, 0, OPEN_EXISTING, 0 , 0)) )
        return; // fehler beim com-port öffnen

    DCB dcb;
    dcb.DCBlength = sizeof(dcb);
    COMMTIMEOUTS cto;
    CString tmp="----------------------------------------";
    DWORD Bytes = 0;

    GetCommState(h_ComPort, &dcb);
    BuildCommDCB("baud=2400 parity=N data=8 stop=1", &dcb);
    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);
    EscapeCommFunction(h_ComPort, SETDTR);
    EscapeCommFunction(h_ComPort, SETRTS);
    Sleep(200);
    EscapeCommFunction(h_ComPort, CLRRTS);
    Sleep(4000); // 4sec warten bis daten da sind...
    ReadFile(h_ComPort, tmp.GetBuffer(tmp.GetLength()), tmp.GetLength(), &Bytes, NULL);
    tmp.ReleaseBuffer();
    CloseHandle(h_ComPort);
    SetDlgItemText(IDC_EDIT1, tmp);
    return;
}


--
grusz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
04.08.2004, 18:38 Uhr
~wasa
Gast


tagchen!

Danke erstmal für die nachricht!
habe ich ausprobiert!
Hatte zuerst den Fehler gemacht das ich leider im hintergrund das Docklight programm hab laufen lassen!! Hatte den dialog so erstellt wie du sagtest, und es kamen die richtigen Daten an!
Sobald ich aber das andere Programm schlisse und deins laufen lasse, kommt nichts mehr an!!!
Hast du ne ahnung warum??
erstmal vielen Dank!!
cu wasa
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
04.08.2004, 18:43 Uhr
~wasa
Gast


tagchen!

bzw. wenn ich das docklight dann mal wieder anschalte und dein prog laufen lasse! kommt nichts an!?
hm seltsam!
cu wasa
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
05.08.2004, 19:00 Uhr
~toxic
Gast


hi, setzt dir doch mal breakpoints auf jeder zeile und geh den code stepBYstep durch und achte darauf das du ein gültiges handle vom CreateFile(...) bekommst.
füge mal die folgende function dem programm hinzu, und ändere in OnButton die ersten zeilen bis zum "DCB dcb;" -->

C++:
void DeinDlg::DisplayLastError(CString sHeadLine)
{
    CString tmp = "";
    DWORD error = GetLastError();
    LPVOID lpMsgBuf;

    FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER |
        FORMAT_MESSAGE_FROM_SYSTEM |
        FORMAT_MESSAGE_IGNORE_INSERTS,
        NULL,
        error,
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        (LPTSTR) &lpMsgBuf,
        0,
        NULL
    );
    tmp.Format("%d : %s", error, (LPCTSTR)lpMsgBuf);
    MessageBox(tmp, sHeadLine, MB_OK | MB_ICONINFORMATION );
    LocalFree( lpMsgBuf );
}

void DeinDlg::OnButton1()
{
    HANDLE h_ComPort;
    h_ComPort = CreateFile("COM1", GENERIC_READ, 0, 0, OPEN_EXISTING, 0 , 0));
    if ( (h_ComPort == INVALID_HANDLE_VALUE) || GetLastError() )
    {
        DisplayLastError("öffnen der COM");
        return;
    }

    DCB dcb;
    dcb.DCBlength = sizeof(dcb);
    COMMTIMEOUTS cto;
    CString tmp="----------------------------------------";
    DWORD Bytes = 0;
...
...
...
}

falls dann ein fehler angezeigt wird wäre interresant zu wissen welcher...
--
grusz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
11.08.2004, 12:35 Uhr
~wasa
Gast


tagchen!

sorry das ich erst jetzt antworte hatte aber ne menge stress!
also habe das so gemacht wie du gesagt hast!
wenn ich auf den Button drücke kommt nach ner weile folgende Messagebox:
"0: Der Vorgang wurde erfolgreich beendet"
Diese Nachricht kommt, wenn das Messgerät aus und angeschaltet ist. Aber es wird nichts in die EDIT box hineingeschrieben.
Nach mehreren Versuchen kommt manchmal ein einzelnes Byte, welches in die EDIT reingeschrieben wird.

Ich habe echt keine ahnung woran das liegt!
also bis denne! und vielen DANK nochmal!
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: