com ansteuern!

macropode

Erfahrenes Mitglied
Hallöchen erstmal!
Ich bin neu hier und das ist mein erster Beitrag also schlagt bitte nicht alle gleich drauf los :)

Zu meiner Frage.

Wie kann ich den Com-Anschluß meines Rechners in c oder c++ ansprechen. Hinzu kommt wie kann ich die 15 pohle einzeln ansprechen.

Hintergrund meiner Frage ist:
Ich möchte mehrere Magnetventiele über einen com steuern.
da der Stecker 15-pohlig ist dachte ich mir pro ventiel 2 kabel (+ und -)
kann pro anschluß 7 ventiele steuern.

Geht das so wie ich mir das Vorstelle und wenn ja wie genau?

vielen Dank schonmal im voraus. Würde mich freuen wenn ich meine Fragen endlich mal beantwortet bekäme!
 
Ich persönlich habe mit der CSerialPort v1.03 sehr gute Erfahrungen gemacht.

Dein Vorhaben mit der Seriellen Schnittstelle die Magnetventile direkt zu steuern scheitert am Aufbau der Schnittstelle.
Hier ein Link zum Aufbau sowie einer Funktionsbeschreibung

Mich verwunder zudem die 15 Pole - mir sind nur 9- und 25-polige serielle Schnittstellen bekannt...und laut RS232-Standard sollte es auch nur diese geben.

Nachtrag:
Die Ansteuerung wird Dir wohl nur über den "Umweg" Microcontroller gelingen. ;)
 
besser Parallelport? (falls vorhanden)

Da die Bits über die Com-Schnittstelle seriell, bzw. nacheinander übertragen werden ist die zur direkten Ansteuerung wohl eher ungeeignet. Sprich man müßte da wahrscheinlich nen Microcontroller (& ein paar andere ICs) dazwischenhängen. Diese Lösung hätte dann sogar den Vorteil, dass sie auch ohne PC funktioniert, aber den Nachteil, dass sie hardwaremäsig relativ aufwendig, kompliziert & teuer wäre...
So wie Du das willst geht das wahrscheinlich besser über den Parallelport (=Druckeranschluß). Aber wahrscheinlich müßte man auch da die Signale, die aus dem Parallelport kommen verstärken... Müßte auch mit "einem Kabel pro Ventil" hinhauen, da Du zum Ausschalten des Ventils ja nicht + und - trennen mußt...

Und ich habe vor ein paar Monaten mal nach ner betriebssystemunabhängigen Schnittstellen-Ansprechmöglichkeit unter C++ gesucht und nichts gefunden... Also hängt die Programmierung wohl auch davon ab, welches Betriebssystem Du benutzt.

möglicherweise interessant für Dich:
http://www.franksteinberg.de/index.htm
http://www.o-bizz.de/qbtuts/parport/
 
OK, teuer ist relativ aber MikroController + evtl. Treiber-&Schnittsellenbausteinbausteine + Netzteil + Programmierdongle usw. usw. dürften auf jeden Fall sehr viel mehr kosten, als die Lösung die sich macropode vorgestellt hatte, nämlich die Ventile quasi einfach an nen Com-Port anzlöten...
Und der zeitmäsige Aufwand inklusive Einarbeitung ist auch unendlich mal höher...
Für eine ernsthafte Anwendung rentiert sich das vielleicht; falls es nur eine kleine technische Spielerei oder Programmierübung sein sollte eher nicht...
 
Hallo macropode,
ganz so wie Du es denkst ist es leider nicht.

Jeder COM-Port verfügt über 8 Signalleitungen und einen Masse-Pin (ergibt 9).
Früher waren mal 25-polige Stecker in Mode, aber nicht alle Pins belegt.

Standardisiert sind die schon erwähnten 8 Signale.
Davon sind 2 die Transmit/ Receive Leitungen (TxD/ RxD).

Die anderen 6 sind sogenannte Handshake-Leitungen (Steuerleitungen).
Man verwendet einige davon um die Übertragung zwischen seriellen 2 Geräten zu
koordinieren, wenn man kein Software-Handshaking (z.B. X-ON/OFF) einsetzen kann.

Von den 6 Handshake-Leitungen kannst Du 4 als digitale Eingänge verwenden, und
2 als digitale Ausgänge. Einen 3 Ausgang bekommst Du einen Trick. Man kann auch
den Transmit-Pin direkt und dauerhaft setzen. Er wirkt dann wie ein digitaler Ausgang.

Wenn Dein Rechner 2 Com-Ports hat, macht das in Summa 6 Ausgänge, und 8 Eingänge.
Da die Ausgänge aber keine Leistung treiben können, muß der Pegel verstärkt werden.
Ganz einfach und billig geht das, wenn man elektronische Lastrelais (Solid State Relay)
verwendet. Such mal bei Conrad z.B. nach:

S202T01 SOLID STATE
Artikel-Nr.: 162566 - V3 (4,95Euro).

--------- VORSICHT , siehe nächster Abschnitt ---------
Eingangssignale kann man direkt anlegen, sofern der Pegel 12V nicht übersteigt.
Idealerweise kann man die Spannung für die Eingänge vom Rechnernetzteil abnehmen,
+5V oder +12V (geht beides).



Edit am 01.01.2008:
_____________________________

Mit +12 V auf den COM-Ports muß man heutzutage verdammt vorsichtig sein (Finger von +12 V lassen, nur + 5 V benutzen).
Der Grund ist der allgemeine Energie-Spar-Wahn und der Trend zu Low-Power-Consumption-Devices.


Wir haben leider die Erfahrung machen müssen, daß einige Hersteller die Spezifikation nicht mehr einhalten (Pegel > -15 V bis < 15 V)
Dabei sind uns bereits einge CPU-Karten abgebrannt (Hersteller u.a . Kontron/ Spectra).

Also Vorsicht! - mit 5 V arbeiten wir nach wie vor fast ohne Probleme (5 V Signale sind einfach störanfälliger in problematischer Umgebung, aber nix geht kaputt).


... Ich habe bis jetzt noch nicht probiert mein neuestes Notebook seriell mit einem alten i386 zu koppeln und dann ein serielles Protokoll mit Handshake zu fahren.
Wäre wahrscheinlich auch schade um das Notebook, denn das arbeitet gerade noch so mit + 3.6 V auf den Handshake-Leitungen.
_____________________________

END_EDIT


Hier ist mal ein Auszug aus einem Programm, was ich dafür mal gemacht habe
(allerding unter MS-DOS).

Das Prinzip unter DOS ist folgendes:

- die COM-Ports werden über Adressen angesprochen
- da die einzelnen Bits nicht direkt, sondern Byteweise unter einer Adresse angesprochen werden,
muss man zum Setzen den Status zuerst lesen, und dann bitweise eine OR Verknüpfung machen.
(Entsprechend zum Löschen der Bits eine UND Verknüpfung).
- Wenn man die Ausgänge einzeln und unabhängig voneinander setzen möchte,
bitte vor jedem Setzen zuerst wieder Status einlesen!

Unter Windows ist das leider alles so ziemlich vorbei. Unter Win98 funktioniert es bedingt.
Ab Win2K geht diese Methode gar nicht mehr, da es keine direkten Zugriffe auf die Hardware gibt.
Trost: es gibt einen Treiber dafür.

... und es gibt einen Experten im Internet, der das ganze hervorragend erklärt hat:

http://www.franksteinberg.de


Das ist ein Stück von meinem i, wird Dir so nicht viel sagen:

// Ausgaberegister vergleichen und setzen

read_com();

if ((DTR1_Key > 0) || (DTR1_KeyStat == 1)) // DTR1 setzen
outportb(COM1_Adr + 4, (COM1_Base4 | 1));
else
outportb(COM1_Adr + 4, (COM1_Base4 & 254));

read_com();

if ((RTS1_Key > 0) || (RTS1_KeyStat == 1)) // RTS1 setzen
outportb(COM1_Adr + 4, (COM1_Base4 | 2));
else
outportb(COM1_Adr + 4, (COM1_Base4 & 253));

read_com();

if ((TXD1_Key > 0) || (TXD1_KeyStat == 1)) // TXD1 setzen
outportb(COM1_Adr + 3, (COM1_Base3 | 64));
else
outportb(COM1_Adr + 3, (COM1_Base3 & 191));




Wenn Du einen alten Dos-Rechner zum probieren hast, kann ich Dir das komplette Teil zukommen lassen.
Es funktioniert mit beiden Com-Ports gleichzeitig.

Müstest mir halt nur posten wo ich es hin schießen soll.

Soweit erst mal zum Thema.

Beste Grüße Napstix
 
Zuletzt bearbeitet:
Habe mal noch ein Screnshot von meinem Proggi angehangen, falls es funktioniert, mit dem hochladen.
Bedient wird es über die F-Tasten, die Eingänge werden direkt angezeigt sobald sich der Zustand ändert.

Programmiert ist es unter Borland C++, aber wie gesagt, ist leider nur für MS-DOS.


napstix


Wie bekommt man hier eine Datei angehangen? Angehangen habe ich die zwar, aber zu sehen ist sie nicht, Wo ist mein screenshot.png hin?
 

Anhänge

  • Screnshot.png
    Screnshot.png
    7,8 KB · Aufrufe: 143
Zuletzt bearbeitet:
Zurück