readfile in Hex Varible speichern



  • hi,
    nach Tage langen googleln, und totaler Verzweiflung probiere ich mal hier mein Glück,
    der PC sendet ein Singal "reset" zu meinem Com1 Gerät, daraufhin wird über reafile Daten gelesen.
    Das einzige was ich will, ist mit der Readfilefunktion binäre oder hex Zahlen in eine Variable zu speichern.
    Weil wenn ich eine varible bekomme z.b. 10011001, wird das erste bit als Minus angesehen, dann bekomme ich total verwirte zahlen, ich wäre schon happy, wenn ich nur positive Dezimal Zahlen bekommen würde.

    -------------------------------schnipp zum verbinden -----------

    //DCB dcb,dcb_neu; <--- das geändert.. auf global 😉
    COMMTIMEOUTS cto,cto_neu;

    //und das h_com geändert auf global 😉
    h_com=CreateFile("\\\.\\COM1",GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

    GetCommState(h_com, &dcb);
    GetCommState(h_com, &dcb_neu);
    GetCommTimeouts(h_com,&cto);
    GetCommTimeouts(h_com,&cto_neu);

    dcb_neu.DCBlength = sizeof(dcb_neu);
    dcb_neu.BaudRate = 9600; // Baudrate
    dcb_neu.fParity = FALSE;
    dcb_neu.fBinary = TRUE;
    dcb_neu.Parity = NOPARITY;// Kein Paritybit
    dcb_neu.StopBits = ONESTOPBIT;
    dcb_neu.fOutxCtsFlow = FALSE;
    dcb_neu.fOutxDsrFlow = FALSE;
    dcb_neu.fDtrControl = DTR_CONTROL_ENABLE;
    dcb_neu.fDsrSensitivity = FALSE;
    dcb_neu.fAbortOnError = FALSE;
    dcb_neu.ByteSize = 8; // 8 Datenbits

    cto.ReadIntervalTimeout = MAXDWORD; // 0 ms Read-Tomeout
    cto.ReadTotalTimeoutMultiplier = 0;
    cto.ReadTotalTimeoutConstant = 0;
    cto.WriteTotalTimeoutMultiplier= 1; // 1*2 ms Write Timeout
    cto.WriteTotalTimeoutConstant = 2;

    SetCommState(h_com, &dcb_neu);
    SetCommTimeouts(h_com,&cto_neu);
    GetDlgItem(IDC_verbinden3)->EnableWindow(FALSE);
    GetDlgItem(IDC_trennen3)->EnableWindow(TRUE);

    -----------------startfunktion und lese funtkion -----------

    UpdateData(TRUE);
    log += "löse Reset zur Karte aus...";
    UpdateData(FALSE);
    dcb.fRtsControl=RTS_CONTROL_ENABLE; // RESET
    if (!SetCommState(h_com, &dcb))
    return ;
    dcb.fRtsControl=RTS_CONTROL_DISABLE; //RESET OFF
    // Wait for 50 ms
    Sleep(50);
    if (!SetCommState(h_com, &dcb))
    return ;

    CString str;
    DWORD dwCount;
    char cData[2];
    int byte;
    for (byte = 0; byte <15; byte++)
    {

    ReadFile(h_com,cData,2,&dwCount,0); // das Problem !!!
    log += dezhex(cData[0]); // dezhex() wandelt nur die Zahlen
    log += dezhex(cData[1]); // in hex und steckt sie dann in log
    // ABER das Vorzeichen macht Probleme
    }
    log += "\r\n"; // für eine Leerzeile
    ------------------schnipp schnipp ende ------------------------

    ICh wäre sehr sehr Dankebar für eine der 3 Lösungen, cData ist hex oder binär oder eine Dezimalzahl in ohne vorzeichen.
    Ich habe Visual Studio 2003 net. Progge unter MFC in c++
    Ich würde sogere an meinen Projekt weitermachen. :-)))

    mfg Tomycat


Anmelden zum Antworten