Serielle Schnittstellenansteuerung

Ich Interessiere mich für die Serielle Schnittstellenansteuerung unter C/C++.
Wie kann ich eine kleine Alarmanlage realisieren, die Daten per RS232-Schnittstelle zum PC schickt, sobald es irgendein Kontakt gibt und der PC diese auswertet?
Hoffentlich hat jemand verstanden, was ich meine und kann mir helfen…

mfG Martin

Hallo Martin

Ich Interessiere mich für die Serielle
Schnittstellenansteuerung unter C/C++.
Wie kann ich eine kleine Alarmanlage realisieren, die Daten
per RS232-Schnittstelle zum PC schickt, sobald es irgendein
Kontakt gibt und der PC diese auswertet?
Hoffentlich hat jemand verstanden, was ich meine und kann mir
helfen…

Bin mir nicht so ganz sicher ??!!

Brauchst du Hilfe bei der Hardware, demjenigen Teil welches an der RS232 angeschlossen werden soll
oder
willst du wissen wie man die RS232 im PC von C aus ansteuert ???

MfG Peter(TOO)

Brauchst du Hilfe bei der Hardware, demjenigen Teil welches an
der RS232 angeschlossen werden soll
oder
willst du wissen wie man die RS232 im PC von C aus ansteuert
???

Das mit der Hardware werd ich schon hinkreigen, aber ich weiss nicht wie man die Hardware ansteuert und wie diese wieder „zurückschreiben“ kann. Ausserdem kann man per C++ nur Zeichen senden und die Spannung nicht konstant halten.

Möchtest du das mit einer Windowskiste oder mit einem Linuxsystem realisieren?

Unter Windows fallen mir da nur die alten DOS Softwareinterrupts ein (ich glaube dos.h.
http://spike.scu.edu.au/~barry/interrupts.html
http://www.ctv.es/pckits/tutorial.html

Unter Linux fällt mir da die C Funktion ioperm und dann die Befehle outb, inb ein.
http://www.linux-magazin.de/ausgabe (da gabs letztens einen Artikel über Hardwareansteuerung)

Gruß Karsten

Hallo !

Von direkten Zugriffen auf Ports und Interrupts kann ich nur abraten. In jedem Multitaskingsystem kriegt man da leicht Zeitprobleme. Spaetestens ab Win2k oder NT ist mit _outp &Co sowieso Schluss, da der Zugriff auf Hardware generell nur von Treibern aus erfolgt. Bei Win9x klappt das noch, mit dem Manko, dass man je nach Rechnerauslastung Werte verliert, weil der betreffende Task eventuell gerade nicht dran ist, wenn ein Wert auf die Schnittstelle kommt. Das sowas bei Linux gehen soll ist mir unverstaendlich.

Unter Win9x, Win2K und NT kannst Du ueber die Systemtreiber sauber bis 115k auf der seriellen Schnittstelle uebertragen:
Du oeffnest die Schnittstelle mit CreateFile (Dateiname= COM1 oder COM2 …)
Dann kannst Du mit SetCommState, SetCommMask und SetCommTimeouts die Eigenschaften der Com einstellen.
Mit ReadFile und WriteFile kann man dann die Daten auf die Schnittstelle schreiben oder davon lesen.
Ist also alles sehr einfach und ohne Wissen ueber die Hardware zu machen.

Unter Linux (und wahrscheinlich auch anderen Unixen) ist es fast noch einfacher.
Hier sind die Schnittstellen einfache Blockdevices (glaube ttyS0 usw.)
Die machst du mit open auf und kannst dann mit irgendeiner Funktion die Eigenschaften einstellen.
Dann wird mit read und write gelesen und geschrieben. Auch hier sollte der Zugriff dann zeitunkritisch sein, da ueber die Kernel-Treiber gearbeitet wird.

Fuer beide Systeme habe ich jeweils ein kurzes Beispiel parat.

Tschuess !

Andreas

2 Like