RS 232 mittels C ansprechen



  • Hallo zusammen!

    ich muss ein Programm in c realisieren, das daten(text) über die RS 232 schnittstelle übertragen, kann mir jemand helfen, ich brauche das sehr dringend
    also konkret ist meine frage, wie kann ich rs 232 in c ansprechen und daten drauf schreiben?

    Danke im voraus



  • http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnfiles/html/msdn_serial.asp

    Da du das Betriebsystem nicht angegeben hast, nehme ich an, dass du Windows benutzt.

    Btw, den Link habe ich in google nach c.a. 1 Minute gehabt. Nix für ungut.



  • Danke fürs Antwort!



  • Hier ein paar Codeausrisse für Windows, damit findest die entsprechenden Routinen sicher im Help

    //  Herstellen der seriellen Kommunication über Win32
    #define NORMSTRINGLEN 128+1
    #define PASS 0
    
    int CreateSerialConnection(HANDLE *hCom,char *pcComPort )
    {// Öffnen des Commports
      DCB     Dcb;
      BOOL  fSuccess;
      COMMTIMEOUTS CommTimeouts;
      char Text[NORMSTRINGLEN];
    
      *hCom = CreateFile(pcComPort,  GENERIC_READ | GENERIC_WRITE,
      0,    // comm devices must be opened w/exclusive-access
      NULL, // no security attributes
      OPEN_EXISTING, // comm devices must use OPEN_EXISTING
      0,    // not overlapped I/O
      NULL  // hTemplate must be NULL for comm devices
      );
      if (*hCom == INVALID_HANDLE_VALUE) {      // Handle the error.
        printf("Cannot connect to serial Port %s\n Please check connection or reconfigure\n");
        return (1);
      }
    
      fSuccess =   SetupComm(*hCom,16000,16000);
      if (!fSuccess)  {  // Handle the error.
        printf( "GetCommState failed with error %d.\n", GetLastError());
        return (2);
      }
    
      fSuccess = GetCommState(*hCom,&Dcb);  // Configure Comport
      if (!fSuccess)  {     // Handle the error.
       printf(Text,"GetCommState failed with error %d.\n", GetLastError());
        return (3);
      }
    
      // Fill in the DCB: baud=9,600 bps, 8 data bits, no parity, and 1 stop bit.
      Dcb.BaudRate = CBR_9600;	//CBR_9600;      // set the baud rate
      Dcb.ByteSize = 8;	// data size, xmit, and rcv
      Dcb.Parity = NOPARITY;		// no parity bit
      Dcb.StopBits = ONESTOPBIT;		// one stop bit
      Dcb.fRtsControl=RTS_CONTROL_DISABLE;		// RTS OFF  RDI Interface
      Dcb.fDtrControl=DTR_CONTROL_DISABLE;		// DTR OFF   nicht CALMODE
    
      fSuccess = SetCommState(*hCom, &Dcb);
      if (!fSuccess) {
        printf(Text,"SetCommState failed with error %d.\n", GetLastError());
        return (4);
      }
    //  SetBaud(hCom,SerBaud);
      GetCommTimeouts(*hCom,&CommTimeouts);
      CommTimeouts.ReadIntervalTimeout=200;
      CommTimeouts.ReadTotalTimeoutMultiplier=5;
      CommTimeouts.ReadTotalTimeoutConstant=1000;
      CommTimeouts.WriteTotalTimeoutConstant=0;
      CommTimeouts.WriteTotalTimeoutMultiplier=0;
      SetCommTimeouts(*hCom,&CommTimeouts);
      printf(Text,"Connected to %s",pcComPort);
      return PASS;
    }
    
      CloseHandle(*hCom);
    
        bErr = PurgeComm(hLane4800, PURGE_RXCLEAR);
        if (!bErr)
        {
          // Handle the error.
          printf("PurgeComm failed with error %d.\n", GetLastError());
          return 5;
        }
    
        bErr =ReadFile(hLane4800,InBuff,1,&count,NULL); // Krieg die Daten
        if((0!=bErr) && (count > 0))
        {
          DataIn[StringCount]=InBuff[0];
        }
    




  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Die serielle Schnittstelle ist nicht so einfach, wie es aussieht...
    Verwende eine fertige Bibliothek:
    Siehe codeproject.com da gibt es 1/2 gute...



  • Jochen Kalmbach schrieb:

    Siehe codeproject.com da gibt es 1/2 gute...

    nur eine halbe?
    🙂



  • Die serielle Schnittstelle ist nicht so einfach, wie es aussieht...

    Sag mal ein paar Sachen die daran schwierig sein sollen...



  • baud schrieb:

    Die serielle Schnittstelle ist nicht so einfach, wie es aussieht...

    Sag mal ein paar Sachen die daran schwierig sein sollen...

    Lies mal den Abschnitt: Why is serial communication that hard
    http://www.codeproject.com/KB/system/serial.aspx



  • theta schrieb:

    http://www.codeproject.com/KB/system/serial.aspx

    Das ist auch die Klasse, die ich gemeint habe 😉


Log in to reply