RS232 unter C++

Hallo Leute,

habe hier schon einige Einträge bzgl. RS232 gefunden, konnte sie jedoch nicht umsetzen. Deshalb hier die einfache Frage :

Was muss ich tun, um unter C++ die RS232 anzusteuern ?

  • würde gerne die vorhandenen RS232 ermitteln.
  • Nach Auswahl einer freien RS232 gerne initialisieren.
  • Mit oder ohne Buffer Zugriff auf ankommende Daten.

Offensichtlich gibt es keinen Standart dafür. Beispiel Code mit ein wenig Erklärung würde mir sehr helfen !

Freundlichst,

Uwe P.

Howdy,

habe hier schon einige Einträge bzgl. RS232 gefunden, konnte
sie jedoch nicht umsetzen. Deshalb hier die einfache Frage :
Was muss ich tun, um unter C++ die RS232 anzusteuern ?

nun ja, das ist natürlich keine triviale Frage, insbesondere deshalb nicht, weil es dafür keinen C/C++ Standard gibt. Unter U*ix sind die Schnittstellen Devices und können ganz normal geöffnet und dann z.B. mit ioctl konfiguriert werden.

Tante Guggle gibt für „rs232 library c“ aber doch auch schon einiges aus …

Gruss
norsemanna

Büchse der Pandora

Offensichtlich gibt es keinen Standart dafür. Beispiel Code
mit ein wenig Erklärung würde mir sehr helfen !

Natürlich gibt es keinen Standard, weil es dem Konzept einer Hochsprache wie C++ oder modernen Betriebssystemen entgegen steht.
Denn man möchte gerade versuchen, die fachliche Aufgabe so weit wie möglich von der technischen Umsetzung zu entkoppeln.

Moderne Programmiersprachen haben dazu schon einmal alle Interaktion mit der Umwelt in Bibliotheken ausgelagert, die dann wiederum abstrahieren. Du musst also gar nicht wissen, ob ein angesprochener Drucker über serielle, parallel oder USB-Schnittstelle angeschlossen ist, wenn Du irgendwelche Daten dorthin schicken willst.

Auch moderne Betriebssysteme arbeiten nach diesem Prinzip und entkoppeln den Benutzer so weit wie möglich von der konkreten Technik. Deshalb müssen sich Anwenderprogramme auch nicht mehr jedes für sich um die Konfiguration einer RS232-Schnittstelle kümmern.

Ja, üblicherweise wird Dir ein modernes Betriebssystem sogar den Zugriff auf diese technische Schicht verweigern, weil es die Kontrolle darüber behalten will. Schließlich ist Dein Programm nicht der einzige Prozess, der auf dem Rechner laufen wird oder der ausführende User hat gar nicht die Rechte, mit irgendwelcher Technik rumzuspielen.

Willst Du also direkt etwas mit einer technischen Komponente anfangen, musst Du tief in das jeweilige System einsteigen und auf den Komfort verzichten, den Dir sonst Betriebssystem und Hochsprache bieten. Du benötigst dann eine Menge betriebssystem- und ggf. gerätespezifische Bibliotheken und vor allem Verständnis des Zielsystems. Für manche Funktionen reicht es auch nicht, ein Anwendungsprogramm zu schreiben, sondern der Zugriff ist nur für Gerätetreiber erlaubt, die das System mit einer höheren Berechtigung laufen lässt.

Um es kurz zu machen: Ja, für kaum eine andere Programmiersprache gibt es so gute Möglichkeiten, direkt an technische Details heranzukommen, weil es entsprechende Programmierschnittstellen gibt.
Aber Du verlässt damit den Bereich, der standardisiert werden kann. Nur mit wesentlich mehr Wissen, Aufwand und stark eingeschränkter Portabilität kannst Du so etwas realisieren.
Und dann liegt die Herausforderung zu 99% auf Seiten des Betriebssystems und nicht auf Seiten von C++.

Ciao, Allesquatsch

Übrigens gibt es natürlich auch ganz einfach gestrickte Systeme, die nicht den Ballast komplexer Betriebssysteme und Benutzeroberflächen haben. Dort kann es recht einfach zu bedienende Entwicklungsumgebungen geben, um so etwas Unkomplexes wie eine RS232 anzusprechen. Auf kleinen Experimentierplattformen oder DOS-Rechnern kommt man mit wesentlich weniger Know-how an die Technik ran.

Hallo,

wie meine Vorposter schreiben, ist das mit reinem C++ nicht machbar.
Natürlich geht das Grundsätzlich und ist auch eigentlich nicht allzu schwer.

Auf welchem Betriebssystem willst du das denn machen?

Grüße,

Hallo,

wie meine Vorposter schreiben, ist das mit reinem C++ nicht
machbar.
Natürlich geht das Grundsätzlich und ist auch eigentlich nicht
allzu schwer.

Das lässt mich hoffen.

Auf welchem Betriebssystem willst du das denn machen?

Auf XP möglichst mit dem Visual C++ 6.0.

Grüße,

Natürlich kann man auch mit C++ auf die serielle Schnittstelle zugreifen. Der Standard ist, dass das Betriebssystem eine Schnittstelle zur Verfügung stellt. Und der Compiler hat gefälligst eine Library zu liefern, die diese Schnittstelle bedient.
Unter Windows + Visual C++ sind das die Funktionen CreateFile(), ReadFile() und WriteFile(). Außerdem gibt es die Strukturen DCB und COMMTIMEOUTS zur Konfiguration des Treibers. Leider ist das Verhalten dieser Funktionen nicht trivial, bei ungünstiger Anwendung kann Dein Programm in ihnen versacken. Also gründlich die zugehörige Dokumentation lesen.

mit freundlichen Grüßen
Gert

PS. wenn ich wüsste wie, könnte ich eine Beispieldatei anhängen.