RTS Leitung toggeln
-
Nun funktioniert es. Ich habe die EscapeCommFunktion verwendet.
DCB dcbCommPort;
dcbCommPort.fRtsControl = RTS_CONTROL_ENABLE;
EscapeCommFunction(hComm, CLRRTS); oder SETRTS
-
Das ist eine sehr schlechte Lösung... Du solltest lieber SetCommState mit "RTS_CONTROL_TOGGLE" verwenden!
-
und was bewirkt dies dann?
wann schaltet sich dann RTS auf low und high?
-
Das einfachste ist immer die Doku zu lesen...
http://msdn2.microsoft.com/en-us/library/aa363214.aspx
-
wenn ich fRtsControl auf 3 setze also fRtsControl :3; dann ändert sich an der Leitung nichts. Sie bleibt immer bei +12V.
wenn ich fRtsControl auf 0 oder 1 setze müsste sich doch der Pin von -12 auf +12 ändern.
Außerdem habe ich die windows.h eingebunden.
-
http://support.microsoft.com/kb/99861/de
nun habe ich hier gelesen, dass mehrere ersten eingehenden Zeichen möglicherweise verloren gehen, wenn SetCommState() verwendet wird.
was ist jetzt die bessere Art um die RTS Leitung zu schalten?
-
Hmmm... naja... der Artikel bezieht sich auf Windows 3.1 ...
-
nun habe ich auch noch festgestellt. dass mein RS485 Adapter das high Signal vom PC (+12V) in ein low Signal (0V) umwandelt. Also weis ich garnicht ob mir der toggle Befehl so viel hilft, oder ob ich es nicht doch manuell umstellen soll. Doch bis jetzt funktioniert noch keine der beiden Möglichkeiten. Wenn ich dies einfüge passiert nichts.
dcbCommPort.fRtsControl = RTS_CONTROL_TOGGLE;
-
Du hast keine Möglichkeit es manuell zu machen.
Wenn Du Daten via "WriteFile" geschrieben hast, dann heisst es noch lange nicht, dass diese auch schon versendet sind!!!! da dies asynchron im Hintergrund geht!!!!WriteFile ist schon längst zurück (auch wenn es Syncron geöffnet wurd), aber die Daten sind noch lange nicht verschickt!
-
also brauche ich einen anderen RS485 Adapter der mir das Signal nicht invertiert? Stimmt dann der Befehl wenigstens?
dcbCommPort.fRtsControl = RTS_CONTROL_TOGGLE;
doch hier ändert sich nichts am Signalzustand.
-
so den Adapter habe ich umgebaut.
Nun kapier ich immer noch nicht ganz wann und wo ich diesen Befehl verwenden soll.
dcbCommPort.fRtsControl = RTS_CONTROL_TOGGLE;
-
Nachdem Du den Port mit CreateFile geöffnet hast.