Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

C++ Ports verwalten

piffi123 / 9 Antworten / Baumansicht Nickles

Hallo zusammen! Ich habe eine Frage: Wie kann ich in C++ dem PC sagen das er einen Port öffnen bzw. wieder schließen soll? Über google habe ich nur den Befehl mit öffnen der Com Ports gefunden:
int portnr_c = 1;
Ich möchte aber diesen auch wieder schließen können.

Grüßle
Philipp

Ich hafte niht fur meine Rehtschrbfehlr! =)
bei Antwort benachrichtigen
clausg piffi123 „C++ Ports verwalten“
Optionen

Was?

int portnr_c = 1;
deklariert eine Integer-Variable names "portnr_c" und weist ihr den Wert 1 zu, sonst nix!

Leider hast du uns nicht verraten, welches Betriebssystem du benutzen möchtest. Unter Windows geht das Öffnen mit CreateFile(), wobei als Dateiname z. B. "COM1" verwendet wird. Bei der Beschreibung von CreateFile() findest du bestimmt auch einen Hinweis, wie man das Port wieder schließt.

Claus

bei Antwort benachrichtigen
piffi123 clausg „C++ Ports verwalten“
Optionen

Danke für die schnelle Antwort!
In der Eile hab ich das Betriebssystem ganz vergessen. Ich würd es gerne unter XP programmieren. Aber dort in der Dos Ebene.
Wenn ich im main bereich int portnr_c = 1; eingebe dann öffnet das Programm den Port 1?
Danke schon im Vorraus! =)

Philipp

Ich hafte niht fur meine Rehtschrbfehlr! =)
bei Antwort benachrichtigen
loladi piffi123 „C++ Ports verwalten“
Optionen

Hallo Phillip,

wie bereits Claus geschrieben hat, wird mit der Anweisung:
int portnr_c = 1;
nur eine Integervariable deklariert und mit dem Wert 1 initialisiert.
Das ist ganz normales C / C++ und hat mit der Programmierung
serieller Schnittstellen genausoviel zu tun wie C / C++ Programmierung an sich.

Wenn Du Dich wirklich mit der Programmierung serieller Schnittstellen
unter DOS auseinandersetzen möchtest, könntest Du
evtl. unter
http://www.franksteinberg.de/progss.htm
fündig werden.

Aber offen gestanden habe ich den Eindruck, daß Du Dich zuerst mal
der Programmiersprache C/C++ selber beschäftigen solltest....

bei Antwort benachrichtigen
piffi123 loladi „Hallo Phillip, wie bereits Claus geschrieben hat, wird mit der Anweisung: int...“
Optionen

Hey!

Ich werd mich mal auf http://www.franksteinberg.de/progss.htm
um schauen. Ich hab bis jetzt nur einfachere Programme wie Zinsrechner oder Oberflächenberechner von Kegel, Zylindern Pyramiden usw programmiert.
Bin also noch ein bisschen unerfahren. =)

Danke!
Philipp

Ich hafte niht fur meine Rehtschrbfehlr! =)
bei Antwort benachrichtigen
clausg piffi123 „C++ Ports verwalten“
Optionen
Wenn ich im main bereich int portnr_c = 1; eingebe dann öffnet das Programm den Port 1?

Ist das jetzt eine Frage oder eine Feststellung?

Nochmals
int portnr_c = 1;
deklariert eine Variable und besetzt sie mit einem Wert.

Schnittstellen werden unter DOS normalerweise über IO-Ports mit inp() oder in() und outp() oder out() angesprochen. Wenn ich mich recht entsinne, dann öffnet und schließt man sie auch nicht, sondern benutzt sie einfach. Wenn man die Schnittstellen über Windows ansprechen will. dann muss man sie "öffnen" und "schließen", da Windows den Zugriff auf die Schnittstelle kapselt und die Schnittstelle exklusiv nur einer Applikation zuteilt bis sie wieder geschlossen wird. Insofern wird die Schnittstelle nicht geöffnet, sondern das Programm meldet sich zur exklusiven Benutzung der Schnittstelle an (und hoffentlich wieder ab).

Claus
bei Antwort benachrichtigen
piffi123 clausg „C++ Ports verwalten“
Optionen

Das war eher eine Feststellung =)
Wie kann ich dann Texte auf den Port senden und auf den anderen PC ausgeben? Ich meine Windows müsste doch so eine Freigabe für den Zugriff geben?
Philipp

Ich hafte niht fur meine Rehtschrbfehlr! =)
bei Antwort benachrichtigen
clausg piffi123 „C++ Ports verwalten“
Optionen
Wie kann ich dann Texte auf den Port senden und auf den anderen PC ausgeben?

Sprechen wir mal nicht von Texten. Transportieren wir erst einmal ein Zeichen. Und gemeint ist natürlich nicht irgendein Port sondern eine RS-232-Schnittstelle, richtig?
Im Prinzip ganz einfach: Die beide serielle Schnittstellen (sendende und empfangende) müssen auf dieselben Parameter (Baudrate, Start-, Stoppbits, Parity etc.) eingestellt werden. Beim Sender schreibt man das Byte dann eine I/O-Adresse. Den Rest macht der Treiberbaustein. Das Empfangen ist ein wenig schwieriger, da der Treiberbaustein einen Interrupt auslöst, wenn er ein Zeichen empfangen hat. Also schreibt man eine Interrupt-Service-Routine, die das Zeichen weiterverarbeitet. Für eine Folge von Zeichen (einen Text) bietet es sich an, ein Protokoll zu vereinbaren, um Rückmeldungen zu geben, wenn mal etwas nicht geklappt hat usw. Übliche Protokolle sind X-Modem, Y-Modem und Z-Modem, wobei letzteres das Leistungsfähigste ist.
Bestimmt gibt es auch irgendwo im Netz fertige Programme, die so etwas tun, oder Codebeispiele.

Ich meine Windows müsste doch so eine Freigabe für den Zugriff geben?
Wie Windows (XP) es bei einem DOS-Programm behandelt, weiß ich nicht genau, nur soviel: Der DOS-Anwendung werden virtuelle Schnittstellen zugeordnet. Bei einem Zugriff werden die Daten zwischen physikalischer und virtueller Schnittstelle ausgetauscht. Das alles erledigt die NTVDM.

Ich weiß ja nicht, was du vorhast. Aber wenn du Daten zwischen zwei PCs austauschen willst, dann gibt es effizientere Methoden als über die SIO. Außerdem gibt es schon eine fertige Lösungen im Windows (Stichwort: Nullmodemkabel). Und noch was: Wenn man von Programmieren wenig bis keine Ahnung hat, dann ist das Implementieren einer seriellen Datenübertragung schon ein ziemlicher Brocken.

Claus
bei Antwort benachrichtigen
loladi piffi123 „C++ Ports verwalten“
Optionen

Geh mal auf
http://members.inode.at/anton.zechner/az/index.html
und klick da auf "Die serielle Schnittstelle"

Da findest Du eine komplette Beschreibung mit runterladbaren C Quelltexten.
Komfortabler geht es kaum noch.

Allerdings muss ich Claus zustimmen, lerne erst mal vernünftig in C/C++ programmieren,
da hast Du im Moment sicher mehr von.

bei Antwort benachrichtigen
piffi123 loladi „Geh mal auf http://members.inode.at/anton.zechner/az/index.html und klick da auf...“
Optionen

Ok vielen Dank an euch!
Ich werde mir mal die Seite näher ansehen.
Ich wollte eine Art Chat- Programm bauen, es sollte sich mit dem anderen PC über das Internet connecten und dann den Test ausgeben.
Vielleicht hatte ich doch zu viel vor *gg*
Trotzdem vielen Dank!!
Philipp

Ich hafte niht fur meine Rehtschrbfehlr! =)
bei Antwort benachrichtigen