Forum: Mikrocontroller und Digitale Elektronik PC-Programm fuer RS232


von senmeis (Gast)


Lesenswert?

Hallo,

ich muß mit dem RS232 arbeiten. Die Arbeitsweise sieht so aus:

wenn ein Gerät angeschlossen ist, werden die beiden Leitungen DCD und 
CTS hochgesetzt. Wenn diese H-Pegel vom PC erkannt werden, sendet ein 
PC-Programm sofort ein Byte und fängt die Kommunikation an.

Frage: wie schreibt man solches Programm für PC?
In <Terminal V1.9b> von Bray++ gibt es Pascal Script, aber wie kann man 
die Pegel der Leitungen (DCD und CTS) mit dem Programm ablesen?

Gruss
senmeis

von Christian R. (supachris)


Lesenswert?

Wenn´s nicht unbedingt Pascal schauder sein muss: Zum Beispiel in C++, 
mit der Klasse von 
http://www.codeguru.com/Cpp/I-N/network/serialcommunications/article.php/c2483

Da kann man einen Event auslösen lassen, wenn die Pins gesetzt werden.

von Falk (Gast)


Lesenswert?

@Christian R.

>Wenn´s nicht unbedingt Pascal schauder sein muss: Zum Beispiel in C++,

Was ist an Pascal so schauerlich? Das hat wenigstens eine klare Syntax 
und man kann sich bei weitem nicht so schnell in den Fuss schiessen wie 
mit C.

MFG
Falk


von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Klare Syntax? Mag sein. Und das unnötigste aller Schlüsselwörter: 
"then".

Und eine sehr verquere Logik, wann und wann nicht Semikola an 
Zeilenenden angegeben werden müssen.

Und Funktionen im Sprachumfang, die nicht mit Pascal-Mitteln 
nachgebildet werden können - es gibt Funktionen mit variabler 
Argumentenliste (writeln), aber man kann selbst keine erstellen.

von Falk (Gast)


Lesenswert?

@Rufus t. Firefly

>Klare Syntax? Mag sein. Und das unnötigste aller Schlüsselwörter:
>"then".

Geschmacksache.

>Und eine sehr verquere Logik, wann und wann nicht Semikola an
>Zeilenenden angegeben werden müssen.

>Und Funktionen im Sprachumfang, die nicht mit Pascal-Mitteln
>nachgebildet werden können - es gibt Funktionen mit variabler
>Argumentenliste (writeln), aber man kann selbst keine erstellen.

Niemand behauptet das Pascal der Stein der Weisen ist. Aber was man in C 
verbrechen kann, bzw. "aus versehen" sich antun kann, das geht in Pascal 
glücklicherweise nicht. Man denke nur an Funktionsaufrufe in If 
Anweisungen, wo es dann oft compilerabhängig ist welche Funktionen noch 
ausgeführt werden und welche nicht etc.
IMHO hat C zehnmal mehr Leichen im Keller als Pascal. Dass dennoch zum 
Quasistandard wurde ist paradox.

MfG
Falk


von tomcat (Gast)


Lesenswert?

Zu diesem Zweck gibt es meines Wissens die Funktion WaitCommEvent().

Folgende Vorgehensweise ( die Programmiersprache mal außen vor gelassen 
)

Öffnen der Schnittstelle mit CreateFile
Einstellen der Schnittstelle ( Timeouts, Baudrate usw. )
Und natürlich der Bitmaske für die Events mit SetCommMask
Dann je nach notwendigkeit einen zweiten Thread creieren der
mittels WaitForSingleObject oder mittels WaitForMultipleObject auf ein
Ereignis auf der Schnittstelle wartet.
Das Ereignis auswerten und die Kommunikation starten.
So funktionert das.
Ganz simpel kann man aber auch mit EscapeCommFunction geziehlt nach dem
DCD und CTS Staus "pollen" ist aber unprofessioneller.

Wenn Du allerdings USB zu RS232-Adapter verwendest musst Du bei solchen 
Sachen mit Problemen rechnen, evtl. muss man ein paar von den Dingern 
ausprobieren nicht alle sind zu gebrauchen.

Gruß
Tom

P.S.
Achja, ich mach das alles in Delphi ( PASCAL )

von senmeis (Gast)


Lesenswert?

Danke für eure Hilfe. Ist RLSD (receive-line-signal-detect) auf 
http://www.codeguru.com/Cpp/I-N/network/serialcommunications/article.php/c2483 
doch DCD (Data Carrier Detect)? Ich konnte diese Bezeichnung in meinem 
Doku nicht finden. Ach noch was, kann man in C++ den Pegel von DTR 
verändern?

Gruss

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

RLSD = DCD

RLSD wird von MS überall verwendet, DCD vom Rest der Welt

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.