RS232 Schnittstelle mit C++ ansteuern

Ich will eine RS232 Schnittstelle ansteuern und zwar mit Microsoft Visual C++ 6.0 unter Win XP.
Mit welchen befehlen geht, das, geht das üebrhaupt so einfach oder muss ich da nen extra Treiber haben (wegen XP)?

Danke, Wiz

Hi Wiz,

eigentlich geht das noch wie früher mit _outp(unsigned short port, int databyte)
Aber seit Windows NT ist so ein direkter Zugriff nicht mehr so ohne weiteres
gestattet. Du müsstest dir zuerst einen eigenen Treiber für die Schnittstelle
schreiben. Einfacher gehts mit einem kleinen Programm, das als Windows-Service
installiert wird und dann den Zugriff auf Ports wie die serielle (0x378) und
parallele (0x3f8) Schnittstelle gestattet.
Aus Sicherheitsgründen (Ports sind offen) sollte der Treiber jedoch nur bei
Bedarf aktiviert und danach wieder deaktiviert werden. Wie, steht in einer
Beschreibung dabei.

Du findest das Teil im Internet unter dem Namen Totalio.sys z.B. unter dem Link:

http://www.zwez.com/sat/tools.htm

Hoffentlich hilft dir das.

Tschau, Norbert

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi!
Das mit dem so primitiv elbst programmierten Treiber halte ich für ein Gerücht! Ich habe in mein C+±Projekt unter W2K eine Assemblerrutine eingebaut, die genau diese serielle Schnittstelle ansprechen soll. Das macht Windoof nicht. Unter Win98 tut aber das Programm, ergo muss es an Windoof liegen. Wie genau meinst du das mit dem Treiber?

Christian

Win98 tut aber das Programm, ergo muss es an Windoof liegen.
Wie genau meinst du das mit dem Treiber?

Manchmal!!! heisst es auch Windows. Und unter einem „guten“ Betriebssystem
darfst du halt nicht einfach direkt auf die Hardware zugreifen. Daher der Service.
Klar, unter Win98 (auf DOS aufgepropft) ging das noch so ohne weiteres, aber seit NT ff eben nicht mehr.

Norbert

Es sollte aber trotzdem möglich sein, mit angemessenem Aufwand diese Blockierung aufzuheben.

Christian

Hi,

die serielle Schnittstelle kann man aber auch mit der WinAPI programmieren. Öffnen tut man den Comport einfach mit „CreateFile“ wenn Du dann noch in der MSDN nach „SetCommState“ schaust und dich ein wenig durchklickst, dann sollte das ganze kein Problem sein. Geht sogar einfacher als unter DOS.

grüße Micha

Vielen Dank für die vielen Antworten, ich werde es morgen gleich mal ausprobieren!

Hi,
das ist ein guter Tipp. War mir bis jetzt auch nicht bekannt. Ich hatte damals das Problem, einen simplen Steuerbefehl über die parallele Schnittstelle ausgeben zu müssen. Das geht wohl nicht mehr so einfach.

Gruss, Norbert

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Christian,

unter windows2000 oder WindowsXP gibt es keine
andere Möglichkeit. Du solltest den Port mit
CreateFile aufmachen, dann kannst du mit den
Funktionen WriteFile und ReadFile Daten aus-
geben oder einlesen.

Gruß Tobias

So, ich konnte heute endlich mal wieder an das Teil ran und habe es geschafft die Schnitstelle anzusteuern.
mittels SetCommState habe ich das Protokoll eingestellt und mit Writefile daten gelesen.
Dabei habe ich meine Bytes so definiert:
DWORD Xyz = ‚a‘;
udn dann ReadFile(hPort, BYTE, 1, &Xyz, NULL);
Leider kam am Oszi immer nur die gleicher Zahlenfolge an egal wie ich Xyz gesetzt habe, irgendwie 1011010010 oder so ähnlich.
Wenn ich ReadFile(hPort, BYTE, 2, &Xyz, NULL); genommen habe dann wurde die selbe Zahlenfolge halt 2 mal gesendet.
Wie sende ich jetzt wirklich den Ascicode für ‚a‘ oder ‚b‘ oder was auch immer?
Und wie schicke ich ein RTS Signal?

gruß Wiz