Forum: PC Hard- und Software Probleme mit RTS von RS-232 unter Windows


von Christian M. (Gast)


Lesenswert?

Hallo Foraner,

kann mir jemand bestätigen, dass wie Reinhard schreibt:

Beitrag "Re: Windows XP RS-232, RTS high, wenn Port geschlossen!?"

die RTS-Leitung unter Windows grundsätzlich macht was sie will?
Momentan habe ich das Problem, dass eine Software 
Beitrag "Intellibox-Manager" und auch HTerm 
0.8.1beta die RTS-Leitung nicht mehr (früher schon) bei 
Hardware-Handshake auf High legt. Das Problem lässt sich umgehen, wenn 
im Programm sowie im HTerm RTS manuell auf High gesetzt wird. Bei 
Intellibox-Manager hab ich es wieder rausgenommen, jetzt geht's auch 
ohne manuelles setzen.
Manuelles Setzen mit mode com1: rts=on setzt RTS zwar kurz, erwirkt aber 
sonst nichts.
OS ist Windows 10 und Schnittstelle ist nativ in Shuttle Barebone.

Gruss Chregu

von Wolfgang (Gast)


Lesenswert?

Christian M. schrieb:
> die RTS-Leitung unter Windows grundsätzlich macht was sie will?

Die RTS-Leitung macht grundsätzlich genau das, was ihr die benutzende 
Software sagt. Falls du einen USB-Seriell Adapter nutzt, muss der 
natürlich RTS unterstützen.
(mit CH340 und HTerm unter Win10 getestet)

von georg (Gast)


Lesenswert?

Christian M. schrieb:
> Manuelles Setzen mit mode com1: rts=on setzt RTS zwar kurz, erwirkt aber
> sonst nichts.

Was du mit mode setzt ist irrelevant, sobald eine Software die 
Schnittstelle übernimmt, die selbst die Einstellungen vornimmt (also 
jede brauchbare). Das ist bloss von Interesse wenn du nachher mit copy 
sendest.

Georg

von Christian M. (Gast)


Lesenswert?

Bis jetzt bin ich immer davon ausgegangen - und so lief es auch immer - 
dass eine Software, die die RS-232 Schnittstelle im 
RTS/CTS-Handshakemode öffnet, die RTS-Leitung automatisch gesetzt wird. 
Und bis gestern war das auch so.

Leider sehe ich nicht hinter die Hochsprachen, aber sollte man dann RTS 
immer manuell setzen? Oder ist das in der Windows-API schon drinn?

HTerm setzt RTS nicht automatisch! PureBasic gestern nicht, heute 
schon...

Gruss Chregu

von bluppdidupp (Gast)


Lesenswert?

Eine Windows-Anwendung setzt seine gewünschten Einstellungen direkt nach 
Öffnen der Schnittstelle idealerweise via:
https://docs.microsoft.com/de-de/windows/win32/api/winbase/nf-winbase-setcommstate
Über die DCB-Struktur kann man den fRtsControl-Member passend setzen.
Alternativ kann man RTS auch via 
https://docs.microsoft.com/de-de/windows/win32/api/winbase/nf-winbase-escapecommfunction 
manuell steuern.
Windows reicht den meisten Serial-Port Kram nahezu 1:1 via ioctls direkt 
an den Treiber durch.

von Christian M. (Gast)


Lesenswert?

bluppdidupp schrieb:
> Eine Windows-Anwendung setzt seine gewünschten Einstellungen direkt nach
> Öffnen der Schnittstelle idealerweise via:
> 
https://docs.microsoft.com/de-de/windows/win32/api/winbase/nf-winbase-setcommstate

ja, sehe es, bei: DWORD fRtsControl : 2;

Wenn jetzt die Anwendung diese Struktur nicht ordnungsgemäss 
initialisiert, wird halt irgendein Wert genommen. Beim mir verwendeten 
PureBasic sind bei OpenSerialPort() folgende Optionen möglich:

#PB_SerialPort_NoHandshake     : Kein "handshaking"
#PB_SerialPort_RtsHandshake    : Kein "handshaking", aber RTS wird auf 1 
gesetzt
#PB_SerialPort_RtsCtsHandshake : RTS/CTS
#PB_SerialPort_XonXoffHandshake: Xon/Xoff

Ich brauche ja die dritte Option, und da wird warscheinlich RTS nicht 
explizit gesetzt. Habe jetzt nach dem Oeffnen der Schnittstelle noch 
manuelles Setzen eingefügt. Das nutzt dann warscheinlich:

bluppdidupp schrieb:
> Alternativ kann man RTS auch via
> 
https://docs.microsoft.com/de-de/windows/win32/api/winbase/nf-winbase-escapecommfunction
> manuell steuern.

Gruss Chregu

von georg (Gast)


Lesenswert?

Christian M. schrieb:
> Ich brauche ja die dritte Option, und da wird warscheinlich RTS nicht
> explizit gesetzt

Dann ist das ein Bug in der Funktion OpenSerialPort() von PureBasic. Es 
genügt ja auch nicht, am Anfang RTS manuell zu setzen, RTS soll aktiv 
werden wenn Daten zu senden sind und inaktiv wenn die Daten gesendet 
sind. Ein Sendeaufruf setzt daher RTS und wartet bis CTS aktiv wird.

Georg

von Hmmm (Gast)


Lesenswert?

georg schrieb:
> RTS soll aktiv
> werden wenn Daten zu senden sind und inaktiv wenn die Daten gesendet
> sind.

Er sprach von Hardware-Handshake, da wird RTS faktisch als RTR 
verwendet, um anzuzeigen, dass das Endgerät gerade Daten entgegennehmen 
kann, während das Modem o.dgl. dafür CTS verwendet.

Traditionelles RTS/CTS ist für Halbduplex-Betrieb gedacht und kommt in 
Senderichtung in RS232-RS485-Konvertern zum Einsatz.

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
Noch kein Account? Hier anmelden.