"brak sygnału DTR na porcie RS"
Kluczowe punkty
• DTR (Data Terminal Ready) jest linią wyjściową DTE; stan „aktywne” = napięcie UJEMNE (-3 … -15 V).
• Typowe usterki: kabel 3-przewodowy, tani adapter USB-RS232 bez DTR, błędne ustawienia handshakingu, uszkodzony MAX232.
• Diagnostyka: program terminalowy z ikonkami linii, multimetr lub tester RS-232, test z innym sprzętem.
RS-232 definiuje stany zaassertowane (mark) na poziomach ujemnych względem GND.
• DB-9: pin 4 = DTR, pin 5 = GND.
• DB-25: pin 20 = DTR, pin 7 = GND.
Stan linii:
\[
\begin{cases}
U\text{DTR} < -3\text{ V} & \text{DTR = ON (terminal gotowy)} \
U\text{DTR} > +3\text{ V} & \text{DTR = OFF (terminal niegotowy)}
\end{cases}
\]
Kategoria | Typowy przypadek | Objaw | Remedium |
---|---|---|---|
Kabel | 3-przewodowy (TX, RX, GND) lub „null-modem” bez pin 4 | napięcie ≈ 0 V, brak zmian | Użyj kabla pin-to-pin z wyprowadzonym DTR |
Adapter | Tani FT232-klon, CH340 itp. tylko TX/RX | Linia fizycznie nieistnieje | Pełny konwerter FT232RL, CP2102N-USB-RS232, Prolific PL2303 |
Sprzęt embedded | GPIO/UART RPi, ESP-32 – brak RS-232 transceivera | brak ±12 V na DTR | MAX3232 + dodatkowa linia lub programowa emulacja na GPIO |
Oprogramowanie | Aplikacja/driver nie ustawia DTR (domyślnie OFF) | napięcie dodatnie | SETDTR w API (Win32 EscapeCommFunction, ioctl TIOCMSET w Linux) |
Konfiguracja urządzenia | Centrala Satel Integra z opcją „Zewnętrzny modem” | komunikat „brak DTR” | Odznacz opcję lub podłącz modem z aktywnym DTR |
Uszkodzenie | MAX232, ścieżka na PCB lub pin w DB-9 | brak jakichkolwiek zmian lub zwarcie | wymiana transceivera, naprawa ścieżki |
• Programowe
// Windows
HANDLE h=CreateFile("COM3",GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
EscapeCommFunction(h, SETDTR); // włącza DTR
# Linux
stty -F /dev/ttyS0 -crtscts # wyłącza RTS/CTS
python - <<'EOF'
import serial; s=serial.Serial('/dev/ttyUSB0'); s.setDTR(True)
EOF
• Sprzętowe
– Pełny kabel RS-232 (9/9 lub 25/9) z wszystkimi liniami.
– Konwerter USB-RS232 z obsługą HANDSHAKING (producenci: FTDI, Silicon Labs, Prolific).
– Jeśli urządzenie jedynie „sprawdza” obecność DTR, można (awaryjnie) połączyć pin 4 z pinem 6 (DSR) lub pin 1 (DCD) przez rezystor 1 kΩ, albo podciągnąć do -12 V transceivera.
• Programowanie Arduino: DTR resetuje AVR przez kondensator ~100 nF; brak DTR → brak auto-resetu.
• Automatyka (PLC, centrale alarmowe) – DTR często kluczowy dla nadzoru łączności modemowej.
• Coraz więcej urządzeń przemysłowych przechodzi z RS-232 na USB lub Ethernet; jeśli RS-232 pozostaje, producenci okrajają linie sterujące do minimum (TX/RX/GND).
• Adaptery USB-RS232 reklamowane jako „TTL-232” nie mają ±12 V – nie dostarczą DTR.
• W mikrokontrolerach (ESP32-C3, STM32) popularna jest emulacja handshakingu na GPIO dla zachowania kompatybilności.
Brak DTR to jedna z najczęstszych przyczyn niesprawnej łączności RS-232. Najpierw upewnij się, że linia istnieje fizycznie (pełny kabel/adapter), następnie sprawdź, czy aplikacja lub sterownik ją uaktywnia (-3 … -15 V). Jeśli sprzęt nie udostępnia DTR, rozważ konwerter z pełnym RS-232 lub awaryjne wymuszenie sygnału. Prawidłowa diagnoza – pomiar napięcia i test z innym sprzętem – pozwala w kilka minut odróżnić usterkę sprzętową od programowej i przywrócić komunikację.