problem beim empfangen von daten



  • hallo

    hab jetzt nach einigen tipps aus diesem forum eine klasse "serial" geschrieben.
    das senden von daten funktioniert sehr gut, nur das empfangen ist noch nicht so optimal.
    die daten kommen am pc mit einer "großen" verzögerung an.(1-2 sekunden und wird im laufe des programms immer größer)
    wenn ich aber ein rs-232 tool oder hyper terminal verwende habe ich keine verzögerung beim empfangen.
    so sieht mein derzeitiger code aus.
    *****************************************************************
    //class Serial

    BOOL Serial::OpenCOM()
    {
    //Filehandle
    fh=CreateFile(com,GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,0);
    if(fh==INVALID_HANDLE_VALUE)
    return 1;

    //Parameter
    CString Param;
    Param.Format("%s:9600,n,8,1",com);
    DCB dcb;
    memset(&dcb,0,sizeof(DCB));
    dcb.DCBlength=sizeof(DCB);
    BuildCommDCB(Param,&dcb);
    SetCommState(fh,&dcb);

    //TIMEOUTS
    COMMTIMEOUTS cto;
    memset(&cto,0,sizeof(cto));
    GetCommTimeouts(fh,&cto);
    cto.ReadIntervalTimeout=0;
    cto.ReadTotalTimeoutMultiplier=0;
    cto.ReadTotalTimeoutConstant=8000;
    SetCommTimeouts(fh,&cto);

    return TRUE;
    }
    BOOL Serial::WriteCOM(CString text)
    {
    DWORD BytesWritten=0;
    int erg=WriteFile(fh,text,text.GetLength(),&BytesWritten,NULL);
    if((!erg||BytesWritten)!=text.GetLength())
    return FALSE;
    else
    return TRUE;
    }

    CString Serial::ReadCOM(int len)
    {
    DWORD bytesToRead = len,
    bytesRead = 0;
    char readBuf[32768];

    int erg = ReadFile(fh,readBuf,bytesToRead,&bytesRead,NULL);
    if (!erg/||bytesToRead!=bytesRead/) return "";
    readBuf[bytesRead] = 0;
    CString cs = readBuf;
    return cs;
    }
    BOOL Serial::CloseCOM()
    {
    if(fh!=INVALID_HANDLE_VALUE)
    {
    CloseHandle(fh);
    return TRUE;
    }
    else
    return FALSE;
    }
    void Serial::SetCOM(CString schnittstelle)
    {
    com=schnittstelle;
    }


Anmelden zum Antworten