www.mikrocontroller.net

Forum: PC-Programmierung COM1 Datenaustausch


Autor: Dave_ (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dave_ (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dave_ (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: SupaChris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dave_ (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.