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
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
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
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
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....
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
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
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
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
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.
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