Bagaimana saya tahu jika port serial benar-benar mengirimkan data, tanpa membuka perangkat?

10

Saya memiliki cluster ketersediaan tinggi (Detak Jantung) yang terhubung melalui jalur serial dan dua NIC ethernet. Saya ingin membuat skrip pemantauan yang mampu mengenali garis serial terputus (pada dasarnya pertanyaan yang sama dijawab di SO , namun saya tidak puas dengan jawaban umum seperti itu).

Saya tidak bisa begitu saja membuka perangkat serial dan membaca data sendiri, karena garis serial dibuka oleh Detak Jantung.

Jadi saya mulai mencari beberapa petunjuk tidak langsung. Satu-satunya perbedaan yang saya temukan sejauh ini adalah isi /proc/tty/driver/serial. Ini terlihat seperti ketika terhubung:

# cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:2722759 rx:2718165 brk:1 RTS|CTS|DTR|DSR|CD

Dan ketika terputus:

# cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:2725233 rx:2720703 brk:1 RTS|DTR

Saya tidak cukup percaya diri untuk memutuskan bahwa sinyal yang tertera di akhir baris memiliki arti kabel yang terhubung / terputus karena saya belum menemukan dokumentasi tentang isi dari serial / proc / tty / driver / serial. Saya hanya dapat berasumsi bahwa kehadiran sinyal berarti sinyal yang diberikan pada "sekarang" (atau di masa lalu? Atau?). The HOWTO Serial mengatakan bahwa sinyal tambahan hadir ketika kabel tersambung (sinyal kontrol aliran CTS, DSR "Saya siap berkomunikasi", CD "Modem terhubung ke yang lain") semuanya dalam arah "input". Jadi pasti ada seseorang yang hidup di ujung sana.

Dengan asumsi bahwa makna sinyal seperti yang dijelaskan dalam Serial HOWTO, saya dapat mendasarkan keputusan saya pada keberadaan, katakanlah sinyal CD. Namun saya tidak begitu yakin.

Jadi pertanyaannya adalah: apakah metode saya "benar", atau apakah saya memiliki opsi yang lebih baik yang tidak saya sadari?

EDIT: Saya melakukan beberapa pengamatan tambahan dan berbicara dengan rekan saya. Ternyata ada atau tidak adanya sinyal di ujung saluran merupakan indikator yang cukup baik dari aktivitas port serial, di kedua ujungnya. Namun, itu bukan indikator keberadaan fisik kabel. Setiap kali ada program menulis ke port keluar sinyal keluar hadir (RTS | DTR). Ketika pihak lain sedang menulis sinyal masuk hadir (CTS | DSR | CD). Ketika tidak ada sisi yang berkomunikasi tidak ada sinyal sama sekali (itu tidak selalu berarti tidak ada kabel). Jangan lupa bahwa sinyal yang tepat tergantung pada kabel kabel (saya punya "null modem with handshaking parsial").

Peter Kovac
sumber
Kedengarannya seperti alasan untuk mulai dan mudah diuji. Anda mungkin juga melihat di bawah '/ sys / devices / platform / serial8250 / tty / ttyS0 /', atau sesuatu yang serupa pada sistem Anda.
rickhg12hs

Jawaban:

5

RS232 tidak memiliki indikator "kehadiran kabel" dalam bentuk apa pun. Anda hanya mendapatkan sinyal transmisi atau metadata (kontrol), atau tidak - hanya itu yang Anda ketahui. Jika Anda menerima sinyal masuk (CTS | DSR | CD), Anda tahu kabel tersambung. Jika Anda tidak menerima sinyal masuk, kondisi kabel tidak pasti dan tidak ada cara untuk menentukan apakah kabel itu dicolokkan tanpa solusi perangkat keras tambahan - atau melakukan semacam pertukaran dengan perangkat jarak jauh.

Pendekatan yang biasa adalah melakukan beberapa jenis transmisi "tetap-hidup" (bahkan hanya metadata - mis. Sesaat mengatur DTR dan mengharapkan CTS) tetapi jika disiplin protokol yang digunakan oleh perangkat lunak di dua ujung kabel melarang pertukaran menganggur seperti itu, Anda Cukup banyak terjebak dengan menggunakan besi solder untuk melanjutkan.

Yang mungkin Anda coba, adalah semacam "setan" tambahan yang mengatur pipa, meneruskan data antara perangkat lunak Anda dan perangkat fisik (di kedua ujungnya), mengenkapsulasinya - dan melakukan "pemeriksaan koneksi" jika pipa diam.

Izinkan saya menambahkan satu solusi yang agak umum: jika perangkat titik akhir Anda tidak menggunakan kontrol perangkat keras, Anda dapat menyingkat DTR dengan CTS di dalam colokan di sisi host dan menggunakan 'kontrol perangkat keras' di sisi host. Menghasilkan DTR secara otomatis menggerakkan CTS, memungkinkan transmisi, jika kabel ada, sehingga transmisi tidak terpengaruh. Sementara itu, dengan tidak adanya kabel, sistem akan bereaksi terhadap kurangnya CTS dengan cara yang sesuai untuk acara ini, mis. Menghasilkan penghentian waktu atau menangguhkan transmisi sampai kabel tersambung.

SF.
sumber
"Daemon" adalah ide yang cerdas. Namun, saya tidak akan mengimplementasikannya karena saya khawatir itu akan menjadi sumber bug stabilitas. Saya akan tetap membaca sinyal dari / proc dan hanya menunjukkan ada atau tidaknya singel yang masuk / keluar. Cukup bagi saya.
Peter Kovac
Ini seperti kucing Schrodinger. en.wikipedia.org/wiki/Schr%C3%B6dinger%27s_cat
Ufoguy
0

Ada indikator keberadaan untuk memberi tahu Anda bahwa Anda memiliki perangkat yang terhubung ke ujung lainnya, tetapi opsional, transmisi bekerja dengan atau tanpa sinyal keberadaan.

Tangguh
sumber