COM1 Datenaustausch

Gast #417574
Lesenswert?

Hallo zusammen,

Folgendes Problem: Habe eine Routine zum Versenden  und Empfangen von
Daten mit einer RS232 Schnittstelle an einem COM-Anschluss welche wie
folgt aussieht:


int main (void)
{
  DCB           dcb;
  DWORD         iBytesWritten;
  unsigned char ucMsg[] = {0x41, 0x42, 0x20, 0x43}; // (4)
  //unsigned char ucMsg = 'C';    // zu sendendes Zeichen (1)

  HANDLE hCom = CreateFile ("COM1", GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, 0, NULL);

  dcb.DCBlength = sizeof(DCB);  // Laenge des Blockes MUSS gesetzt
sein!
  GetCommState (hCom, &dcb);    // COM-Einstellungen holen und aendern
  dcb.BaudRate  = 9600;         // Baudrate
  dcb.ByteSize  = 8;            // Datenbits
  dcb.Parity    = NOPARITY;     // Parität
  dcb.StopBits  = ONESTOPBIT;   // Stopbits
  SetCommState (hCom, &dcb);    // COM-Einstellungen speichern

  //WriteFile (hCom, &ucMsg, 4, &iBytesWritten, NULL); // Senden von 4
Bytes
  WriteFile (hCom, &ucMsg, sizeof (ucMsg), &iBytesWritten, NULL); //
Senden von 4 Bytes
  // oder:
  //WriteFile (hCom, &ucMsg, 1, &iBytesWritten, NULL); // Senden eines
Bytes

  CloseHandle (hCom); // COM1 schließen

  return (0);
}

Muß ich falls ich öffters was verschicke das CreateFile und ClosHandle
Ausführen oder kann ich es einmal aufrufen und mehrmals durch WriteFile
und ReadFile Daten Senden und Empfangen und ganz am Schluss des Progrmms
das CLOSE Handle Ausführen?

David
Persönliche Seite #417575
Lesenswert?

> Muß ich falls ich öffters was verschicke das CreateFile
> und ClosHandle Ausführen oder kann ich es einmal aufrufen
> und mehrmals durch WriteFile und ReadFile Daten Senden und
> Empfangen und ganz am Schluss des Progrmms
> das CLOSE Handle Ausführen?

Das solltest Du sogar so machen.

Einmal die Schnittstelle aufmachen,
den Rückgabewert von CreateFile überprüfen (das hast Du in Deinem
Codebeispiel vergessen),

solange und so oft schreiben / lesen wie erforderlich oder Spaß macht

am Ende die Schnittstelle mit CloseHandle wieder schließen.
Gast #417576
Lesenswert?

Ok

Ist es möglich über 20 minuten einen Datenaustasuch auf dieser
Schnittstelle und diesem Code zu haben. Habe ein kleines Projekt auf
welchem Mikrocontroller dauernd Daten zum Pc Senden. Das geht fast
ununterbrochen über 20 minuten. Dise Daten werden dann abgespeichert in
einem Zahlenfeld und später einer Datei.

Kann es Probleme bei so einem langanhaltendem Datenaustausch geben?

David
Gast #417578
Lesenswert?

Danke für die Tipps. Bin jetzt beruigter, daß mein Projekt vielleicht
doch nicht auf so wackligen Beinen steht :-).

Gibt es auch Routinen welche der obigen ähneln und sich für USB
eigenen?

David
Gast #417579
Lesenswert?

> Gibt es auch Routinen welche der obigen ähneln und sich für USB
eigenen?

Naja, nicht so ohne weiteres. Da brauchst du externe Hardware. Das
einfachste ist sicherlich ein USB->Seriall Wandler, wie z.B. der FT232
von FTDI. Den kannst du ganz normal wie einen COM benutzen.

Ich habe hier einige der USB -> 3,3V UART Kabel im Einsatz, bin echt
begeistert.
Gast #417580
Lesenswert?

Hallo.

Ich hätte nochmal eine Frage zu dieser RS232 Schnittstelle am COM durch
welche man mit der obigen routine Daten versenden kann.

Wenn ich Daten mit dem Readfile befehl empfange, und das COM Port nicht
schliese und wieder neue Daten mit Readfile empfagne kann es dann zu
fehlern kommen, bzw muß ich das Zahlenfeld in welches Readfile schreib
vorher löschen?


David

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren