Frage

Ich frage mich, ob und wie ist es möglich, die RS-232-Handshaking-Leitungen direkt von win32 (der alten C-API) zu steuern.

Ich möchte mit einem externen Stück Hardware als Schnittstelle und zwei einfache Datenleitungen würde für meine Bedürfnisse ausreichend.

So - gibt es eine API für win32, die uns lesen und schreiben, die den Zustand der vier Statuszeilen lassen? Im normalen seriellen Kommunikation werden die Handshake-Leitungen automatisch durch den UART angetrieben (falls Hardware-Handshaking aktiviert ist).

Ich erinnere mich, dass es trivial unter DOS ist. Man mußte nur direkt den UART programmieren. Hat diese Funktionalität irgendwie in win32 überlebt?

War es hilfreich?

Lösung

Sie können RTS und DTR steuern SetCommState() verwenden. Sie können auch Dinge einrichten, um Hardware oder der Treiber Griff Hardware Flowcontrol (CTS und / oder DSR) zu haben, oder Sie können die Dinge aufgebauter SetCommMask(), so dass Sie Ereignisse erhalten, wenn diese Signale ändern.

Eine anständige Übersicht ist hier: http://msdn.microsoft.com/ en-us / library / ms810467.aspx

Hinweis

, dass die Win32 serielle Comm API und / oder Fahrer heikel sein kann, so vorbereitet werden, haben einige Debug von dem zu tun, was auf dem Draht vor sich geht.

Andere Tipps

Ich lief über this Tutorial, wenn ich mit dem RS232-Port zur Kommunikation ein Projekt zu tun hatte. Es ist ein komplettes Beispiel dafür, wie den Port zu öffnen, stellen einige Eigenschaften der Timeouts einschließlich, Lesen / Schreiben und den Port schließen. Auch wenn Ihr Projekt wahrscheinlich über jetzt, ich hoffe, dies nützlich bleiben wird, wie es in dem SO-Archiv bleibt.

Sie können immer noch ähnliche Arten der Programmierung nur auf geschützte Hardware zu bekommen, müssen Sie einen Gerätetreiber implementieren. Ich gehe davon aus, dass dies seit den 1980er Jahren bekommt leichter ist, als ich die gleiche Art von Arbeit zu tun.

Wird Microsoft tatsächlich tun Hardware-Handshaking jetzt? Seit vielen Jahren NT, Win2000 und XP tat nicht Handshaking in der Hardware. Stattdessen, wenn der FIFO-Speicher einen bestimmten Punkt erreicht der Gerätetreiber würde manuell die Linie cts ändern. Das heißt, es ist unglaublich einfach war der Gerätetreiber zu veranlassen, Daten zu verlieren, ein Fenster mit der Maus greifen und tun Kreise um den Bildschirm zum Beispiel (dafür, dass Sie das Fenster nehmen an der linken Seite des Bildschirms auf alle oder einen Teil der Pässe ). Alt-geben Sie eine Eingabeaufforderung zu nehmen / aus Vollbild war eine einfache Möglichkeit, einen Datenverlust zu verursachen. Oder irgendetwas anderes, das genug von einer Interrupt-Latenz verursacht. Grundsätzlich microsofts Hardware-Flusskontrolle ist nicht Hardware, sondern Software-Flusssteuerung, auch wenn die Hardware tut Treiber Hardware-Flusssteuerungsfunktionen Microsft die haben waren nicht so Bits. SeaLevel tat schließlich, dass etwas unterstützen, gut sorta, Sie hatten das Recht, unabhängige Einstellungen in SetCommState setzen () zu aktivieren.

Was Ihr Programm die Signale zu steuern, verwenden Sie SetCommState ().

Es gibt einige USB-Seriell-Adapter, der die DTR / DSR / DCD Flusssteuerung nicht unterstützen. So kann dies Ihr Fall ist.

http://www.digi.com/support/kbase/kbaseresultdetl? id = 588

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top