-
        

Ergebnis 1 bis 6 von 6

Thema: Parameter Serielle Schnittstelle

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.09.2009
    Beiträge
    164

    Parameter Serielle Schnittstelle

    Anzeige

    Hallo zusammen, ich möchte Daten vom PC zum Controller senden. In meinem C++ Programm habe ich folgende Einstellungen vorgenommen:
    Code:
    hSerial = CreateFile("COM4",
            GENERIC_READ | GENERIC_WRITE,
            0,
            0,
            OPEN_EXISTING,
            FILE_ATTRIBUTE_NORMAL,
            0);
    
    ...
    
        dcbSerialParams.BaudRate=CBR_19200; //CBR_57600;
        dcbSerialParams.ByteSize=8;
        dcbSerialParams.StopBits=ONE5STOPBITS;//ONESTOPBIT;
        dcbSerialParams.Parity=NOPARITY;

    Leider klappt das Senden nicht.

    Mit den Einstellungen, die ich in Putty vorgenommen habe, klappt es.

    Die Einstellungen in Putty habe ich per jpg-Datei beigefügt.

    Wo liegt der Fehler?

    Vielen Dank im Voraus.

    Grüße

    datatom
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Einstellungen Putty.jpg  

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    32
    Beiträge
    647
    Hi,

    muss das wirklich so?

    Code:
    dcbSerialParams.StopBits=ONE5STOPBITS;
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.09.2009
    Beiträge
    164
    Nein, hab ich wieder geändert.

    Hier mal der komplette Code:

    Code:
    // SerielleSchnittstelle.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //
    
    #include "stdafx.h"
    #include "stdio.h"
    #include "stdlib.h"
    #include "string.h"
    #include "windows.h"
    #include "strsafe.h"
    
    
    void ErrorExit(LPTSTR lpszFunction);
    
    int i = 1234567;
    HANDLE hSerial;
    COMMTIMEOUTS timeouts;
    DCB dcbSerialParams;
    char szBuff;        
    char szBuff1[8];
    char szBuff2[8];
    char szBuff3[8];
    DWORD dwBytesRead;
    DWORD dwBytesWrite;
    int n = 8; //4096;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        hSerial = CreateFile("COM4",
            GENERIC_READ | GENERIC_WRITE,
            0,
            0,
            OPEN_EXISTING,
            FILE_ATTRIBUTE_NORMAL,
            0);
        if(hSerial==INVALID_HANDLE_VALUE)
        {
            if(GetLastError()==ERROR_FILE_NOT_FOUND)
            {
                // Generate an error
                // Fehlercode ausgeben
                if(!GetProcessId(NULL))
                {
                    ErrorExit(TEXT("GetProcessId"));
                }
                //serial port does not exist. Inform user.
                printf("Fehler bei CreateFile. Serial Port existiert nicht!\n");
            }
            //some other error occurred. Inform user.
            printf("Fehler bei CreateFile. Sonstiger Fehler!\n");
        }
        else
        {
            printf("Kein Fehler bei CreateFile!\n");
        }
        //////////////////////////////
        if (!GetCommState(hSerial, &dcbSerialParams)) 
        {
            //error getting state
            printf("Fehler bei GetCommState!\n");
        }
        else
        {
            printf("Kein Fehler bei GetCommState!\n");
        }
        /*dcbSerialParams.BaudRate=CBR_19200; //CBR_57600;
        dcbSerialParams.ByteSize=8;
        dcbSerialParams.StopBits=ONESTOPBIT;
        dcbSerialParams.Parity=NOPARITY;
        dcbSerialParams.fOutX=1;
        dcbSerialParams.fInX=1;*/
       dcbSerialParams.BaudRate=CBR_19200;//a; /* oder was Anders */
       dcbSerialParams.DCBlength=sizeof(DCB); /* !!! */
       dcbSerialParams.fBinary=1;
       dcbSerialParams.fOutxCtsFlow=0;
       dcbSerialParams.fOutxDsrFlow=0;
       dcbSerialParams.fDtrControl=DTR_CONTROL_ENABLE;
       dcbSerialParams.fDsrSensitivity=0;
       dcbSerialParams.fRtsControl=RTS_CONTROL_ENABLE;
    
        if(!SetCommState(hSerial, &dcbSerialParams))
        {
            //error setting serial port state
            printf("Fehler bei GetCommState beim Parameter belegen!\n");
        }
        else
        {
            printf("Kein Fehler bei GetCommState beim Parameter belegen!\n");
        }
        ///////////////////////////////
        timeouts.ReadIntervalTimeout=50;
        timeouts.ReadTotalTimeoutConstant=50;
        timeouts.ReadTotalTimeoutMultiplier=10;
        timeouts.WriteTotalTimeoutConstant=50;
        timeouts.WriteTotalTimeoutMultiplier=10;
    
        if(!SetCommTimeouts(hSerial, &timeouts))
        {
            //error occureed. Inform user
            printf("Fehler bei Timeout!\n");
        }
        else
        {
            printf("Kein Fehler bei Timeout!\n");
        }
        //////////////////////////////////
        while(i < 9999999)
        {   
            i = 0;
            if(!ReadFile(hSerial, &szBuff2, n, &dwBytesRead, NULL))
    
            {
                //error occurred. Report to user.
                printf("Fehler bei ReadFile!\n");
            }
            else
            {  i = atoi(szBuff2);
            _itoa_s(i,szBuff3,10);
            printf (szBuff3);
            printf ("\n");
            }
            ////////////////////////////////
            //szBuff[0] = 'r';
            i = 1234569;
            _itoa_s(i,szBuff1,10);    
            if(!WriteFile(hSerial, &szBuff1, n, &dwBytesWrite, NULL))
            {
                //error occurred. Report to user.
                printf("Fehler bei WriteFile!\n"); 
            }
            else
            {
                printf (szBuff1);
                printf ("\n");
            }
    
        }
        ///////////////////////////////
        CloseHandle(hSerial);
        ////////////////////////////////
        system("pause");
        return 0;
    }
    
    // Fehlerfunktion
    void ErrorExit(LPTSTR lpszFunction) 
    { 
        // Retrieve the system error message for the last-error code
    
        LPVOID lpMsgBuf;
        LPVOID lpDisplayBuf;
        DWORD dw = GetLastError(); 
    
        FormatMessage(
            FORMAT_MESSAGE_ALLOCATE_BUFFER | 
            FORMAT_MESSAGE_FROM_SYSTEM |
            FORMAT_MESSAGE_IGNORE_INSERTS,
            NULL,
            dw,
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
            (LPTSTR) &lpMsgBuf,
            0, NULL );
    
        // Display the error message and exit the process
    
        lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, 
            (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR)); 
        StringCchPrintf((LPTSTR)lpDisplayBuf, 
            LocalSize(lpDisplayBuf) / sizeof(TCHAR),
            TEXT("%s failed with error %d: %s"), 
            lpszFunction, dw, lpMsgBuf); 
        MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK); 
    
        LocalFree(lpMsgBuf);
        LocalFree(lpDisplayBuf);
        ExitProcess(dw); 
    }

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Wenn ich Verbindungen PC - Kontroller mache, dann schalte ich immer die Flow-Control aus, da sie auf der Kontrollerseite bei mir nie aktiv ist.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.09.2009
    Beiträge
    164
    Zitat Zitat von Hubert.G Beitrag anzeigen
    Wenn ich Verbindungen PC - Kontroller mache, dann schalte ich immer die Flow-Control aus, da sie auf der Kontrollerseite bei mir nie aktiv ist.
    Welchen Parameter meinst du?

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.09.2009
    Beiträge
    164
    Klappt jetzt. Ich habe am Ende \r angefügt und nun werden Daten gesendet. Die Infos habe ich von einem anderen User. Danke an alle die mit Rat und Tat zur Seite waren. Grüße datatom

Ähnliche Themen

  1. 5v serielle schnittstelle und ISP
    Von Roboman93 im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 11.06.2008, 19:58
  2. serielle schnittstelle
    Von Roboman93 im Forum Robby RP6
    Antworten: 11
    Letzter Beitrag: 15.04.2008, 19:48
  3. Serielle Schnittstelle
    Von pacer_one im Forum AVR Hardwarethemen
    Antworten: 6
    Letzter Beitrag: 08.01.2008, 18:33
  4. Serielle Schnittstelle
    Von suggle im Forum Sensoren / Sensorik
    Antworten: 4
    Letzter Beitrag: 24.01.2006, 14:34
  5. serielle Schnittstelle
    Von Devil Ray im Forum C - Programmierung (GCC u.a.)
    Antworten: 13
    Letzter Beitrag: 04.10.2004, 13:26

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •