Forum: PC-Programmierung COM1 Datenaustausch


von Dave_ (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Dave_ (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Nö, sofern das Programm nicht irgendwelche schweren Fehler
(Speicherlecks o.ä.) enthält, kann so etwas auch über mehrere Monate im
Dauerbetrieb laufen - halt solange, wie das verwendete Windows-System
und die verwendete Hardware durchhält.

von Dave_ (Gast)


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

von SupaChris (Gast)


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.

von Dave_ (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.