Probleme beim Empfangen von COMPort



  • Hallo,
    ich habe ein kleines Programm zum Testen für eine Zugrüfmaschine geschrieben. Die Maschine wird mittels serieller Schnittstelle angesteuert.
    Das Problem tritt auf, wenn ich mehrere Zeichen lesen will. Dann steht da teilweise irgendwas, was noch von den letzten Antworten stammt. Ich weiß nicht, wo dieser "Murks" herkommt. Ich vermute die Einstellungen sind nicht optimal. Leider kenne ich mich da nicht so gut aus. Habe meine Infos auch nur durch google gefunden.

    Hier der Code:

    #include <windows.h>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <time.h>
    #include <iostream>
    
    int main (){
    
    DCB sDcb;
    HANDLE hFile;
    COMMTIMEOUTS sTo;
    
    hFile=CreateFile("\\\\.\\COM1",GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0) ;
    if(hFile==INVALID_HANDLE_VALUE)return 0;
    memset(&sDcb,0,sizeof(sDcb));
    sDcb.DCBlength = sizeof(sDcb);
    sDcb.BaudRate = 9600; // Baudrate
    sDcb.fParity = FALSE;
    sDcb.fBinary = TRUE;
    sDcb.Parity = NOPARITY;// Kein Paritybit
    sDcb.StopBits = ONESTOPBIT;
    sDcb.fOutxCtsFlow = FALSE;
    sDcb.fOutxDsrFlow = FALSE;
    sDcb.fDtrControl = DTR_CONTROL_ENABLE;
    sDcb.fRtsControl = RTS_CONTROL_ENABLE;
    sDcb.fDsrSensitivity = FALSE;
    sDcb.fAbortOnError = FALSE;
    sDcb.ByteSize = 8; // 8 Datenbits
    
    if(!SetCommState(hFile,&sDcb))
    {
    CloseHandle(hFile);
    return 0;
    }
    
    sTo.ReadIntervalTimeout = MAXDWORD; // 0 ms Read-Tomeout
    sTo.ReadTotalTimeoutMultiplier = 0;
    sTo.ReadTotalTimeoutConstant = 0;
    sTo.WriteTotalTimeoutMultiplier= 1; // 1*2 ms Write Timeout
    sTo.WriteTotalTimeoutConstant = 2;
    
    if(!SetCommTimeouts((HANDLE)hFile,&sTo))
    {
    CloseHandle(hFile);
    return 0;
    }
    
    char eingabe;
    int flag=0;
    int i;
    DWORD dwCount;
    DWORD dwCount2;
    DWORD dwCount3;
    DWORD dwCount4;
    DWORD dwCount5;
    DWORD dwCount6;
    DWORD dwCount7;
    DWORD dwCount8;
    DWORD dwCount9;
    DWORD dwCount10;
    DWORD dwCount11;
    
    char cData;
    char cData2;
    char cData3='\r';
    char cData4[4]; 
    char cData5=53;
    char cData6=48;
    char cData7=48;
    char cData8=48;
    char cData9;
    char cData10;
    char cData11;
    char puffer;
    
    while(1)
    {
        puffer=getch();    
        printf("\n Bitte Befehl eingeben \n");
    
        cData=getche();
        cData2=getche();
    
        Sleep(1000);
    
        if(kbhit()==0)
        {
    
            WriteFile(hFile,&cData,1,&dwCount,0);
            WriteFile(hFile,&cData2,1,&dwCount2,0);
            if(cData2=='V')
            {
                WriteFile(hFile,&cData5,1,&dwCount5,0);
                WriteFile(hFile,&cData6,1,&dwCount6,0);
                WriteFile(hFile,&cData7,1,&dwCount7,0);
                WriteFile(hFile,&cData8,1,&dwCount8,0);
            }
            WriteFile(hFile,&cData3,1,&dwCount3,0);
    
            //Sleep(100);
    
            ReadFile(hFile,cData4,4,&dwCount4,0);
    
            //Sleep(50);
    
            if(dwCount4>0)
            {
                if(cData4[3]=='\r')   
                {
                    putchar('\n');
                }
                else
                    printf(cData4);
    
            }
    
        }
    
    }
    return 0;
    
    }
    


  • wenn ich ein gerät hätte, das mir daten auf den com port sendent, könnte ich das testen, hab ich aba net.



  • was willst du denn damit ansteuern???


Anmelden zum Antworten