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
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.
@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
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.
@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
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 )
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.