rs232 einzelne pins ansteuern?
-
Hallo! Wie geht denn das Ansteuern der Pins bei serieller schnitstelle per c++?
man kann ja mit createfile die schnittstelle öffnen, aber wie kann man den status der pins ablesen? z.B. den ring-signal
-
Hi,
was Du meinst ist nicht das Ansteuern der RS232-Signale, sondern das Auslesen, den der Ring-Signal RI ist ein Eingang!Hier das Prinzip der Abfrage für alle üblichen RS232-Eingänge:
uint32 ui32_modemstatus; if ( GetCommModemStatus( handle_comport, &ui32_modemstatus ) != 0 ) { if ( ( ui32_modemstatus & MS_CTS_ON ) == 0 ) { //Signal CTS hat -12V bzw. "OFF" } else { //Signal CTS hat +12V bzw. "ON" } if ( ( ui32_modemstatus & MS_DSR_ON ) == 0 ) { //Signal DSR hat -12V bzw. "OFF" } else { //Signal DSR hat +12V bzw. "ON" } if ( ( ui32_modemstatus & MS_RING_ON ) == 0 ) { //Signal RI hat -12V bzw. "OFF" } else { //Signal RI hat +12V bzw. "ON" } if ( ( ui32_modemstatus & MS_RLSD_ON ) == 0 ) { //Signal CD bzw. DCD hat -12V bzw. "OFF" } else { //Signal CD bzw. DCD hat +12V bzw. "ON" } }Der Eingang RxD läßt sich leider nicht einfach so auslesen.
Martin
-
Hallo! Wie lege ich denn auf ein eingang die 12 volt? (zum testen)
Gibt es auf der schnittstelle ein ausgang wo schon 12V anliegt?
-
Der typ UInt32 ist bei mir nicht definiert. Was muss ich eibinden? oder geht das nur unter NET. ?
-
Okay ich habe statt UINT32 den unsigned long genommen.
Jetzt möchte ich mal testen ob irgendein pin eine logische "1" hat.
Wie kann ich denn die Eins anlegen?
-
Sorry für "uint32", ich arbeite immer mit definierten Bitbreiten, da ein gewöhnlicher int auf verschiedenen Prozessoren (ich meine hauptsächlich in der embedded Welt) unterschiedlich groß ist!
"unsigned long" ist in Deinem Fall okay.Normalerweise werden die Spannungen für RS232-Signale durch einen Schnittstellenbaustein (eigentlich ein Pegelumsetzer) bereitgestellt, wie z.B. MAX232. Die erzeugen z.B. aus einer simplen +5V die beiden erforderlichen Spannungen +10V und -10V. (RS232 verlangt an den Eingängen typisch +12V, erlaubt ist der Bereich +3V bis +15V, für negative Spannung dto.)
Du kannst aber auch z.B. von einem RS232-Ausgangspin die Spannung durch eine Brücke auf den Eingang legen. Aber denk daran: Die Spannung der Ausgänge führen keine fixe Dauerspannung, sondern kann durch Software wechseln. Zu Testzwecken reicht es vermutlich allemal.
Nutzt Du auch die Foren-Suche?
z.B. http://www.c-plusplus.net/forum/viewtopic-var-t-is-200380-and-start-is-0-and-postdays-is-0-and-postorder-is-asc-and-highlight-is-max232.htmlMartin
-
Hi,
kann mir jmd sagen, was ich falsch mach?!
Dies ist mein code.
Ich lege eine RS232-taugliche Spannung an (+3V...+15V).
Nun will ich abfragen ob der RI high oder low ist.
Allerdings wird das Programm immer vorher beendet [if (hCom == INVALID_HANDLE_VALUE) {return 1;}]
Woran liegt das?!?
Bin am verzweifeln!!!HANDLE WINAPI hCom; CString gszport; hCom = CreateFile(gszport, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0); if (hCom == INVALID_HANDLE_VALUE) { return 1; } // error opening port; abort CString LOW, HIGH, PORT, KEIN; LOW = _T("LOW"); HIGH = _T("HIGH"); PORT = _T("PORT"); KEIN = _T("Kein Signal"); unsigned long ui32_modemstatus; if ( GetCommModemStatus( hCom, &ui32_modemstatus ) != 0 ) { if ( ( ui32_modemstatus & MS_RING_ON ) == 0 ) { //Signal RI hat -12V bzw. "OFF" MessageBox(NULL, LOW, PORT, 0); } else { //Signal RI hat +12V bzw. "ON" MessageBox(NULL, HIGH, PORT, 0); } }
-
Hallo,
Woran liegt das?!?
Naja, gszport hat keinen Wert, ist ziemlich leer, um es genauer zu sagen

MfG,
Probe-Nutzer
-
Ja ok, aber was muss da für ein Wert hinein.
Kannst du mir ein Beispiel machen?!
-
"COM1" oder "COM2" z.B.
Du kannst auch die Suchfunktion (mit RS232 oder "serielle Schnittstelle" als Suchbegriff) des Forums nutzen, da gibt es schon einige Beiträge zu diesem Thema.
MfG,
Probe-Nutzer
-
Mmacher schrieb:
//Signal CTS hat -12V bzw. "OFF"
//Signal CTS hat +12V bzw. "ON"wenn mich nicht alles täuscht, wars bei RS232 genau umgekehrt, also negatives potential ist ON.

-
ach deswegen ist mein motheboard abgebrannt
-
neoexpert schrieb:
ach deswegen ist mein motheboard abgebrannt
man sollte ja auch nicht 2 ausgänge zusammenschalten.

-
fricky schrieb:
Mmacher schrieb:
//Signal CTS hat -12V bzw. "OFF"
//Signal CTS hat +12V bzw. "ON"wenn mich nicht alles täuscht, wars bei RS232 genau umgekehrt, also negatives potential ist ON.

Ich glaube, Du verwechselst "OFF" mit "0" bzw. "ON" mit "1".
Ok, ok, das hätte ich genauer dazuschreiben sollen.Definitionen nach RS232 (bzw TIA/EIA232):
+12V (+3V...+15V) = logisch "0" = "ON"
-12V (-3V...-15V) = logisch "1" = "OFF"Hoffe, damit ins rechte Licht gerückt zu haben

Martin
-
neoexpert schrieb:
ach deswegen ist mein motheboard abgebrannt
Die serielle Schnittstelle sollte eigentlich kurzschlusssicher sein.-Das Motherboard wird wohl nicht so recht gebrannt haben wollen...:)
-
war auch nur ein scherz

-
Hallo zusammen,
ich habe nochmal ne Frage zu diesem Thema.
Wenn ich die if-Anweisung folgendermaßen schreibe:if (( ui32_modemstatus & MS_RING_ON ) == 1)Und dann an den RI 5 Volt anlege, springt er mir immer in die else-Anweisung, also "0" (LOW)...
Allerdings müsste er doch direkt nach if(){... weiter dem Programmcode folgen.Kann mir jmd. helfen?!
-
was passiert denn wenn du den RI nicht an 5 Volt anlegst ?
-
Geht er auch auf LOW !
Habe es jetzt aber denke ich geschafft.
Habe auf 0 abgefragt und nicht auf 1. Dann hat's funktioniert, hoffe das war kein Zufall.
Probiers ein paar mal aus, danke erstmal...
-
cool
hörmal wo hast du die 5 volt her?
muss man eine extra spannungsversorgung anschliessen?