Bir seri bağlantı noktasının cihazı açmadan gerçekten veri iletip iletmediğini nasıl bilebilirim?


10

Seri hat ve iki ethernet NIC ile bağlı yüksek kullanılabilirlikli bir kümem (Kalp Atışı) var. Bağlantısı kesilmiş seri hattı tanıyabilecek bir izleme komut dosyası kurmak istiyorum (temelde aynı soru SO'da cevaplandı , ancak böyle bir genel cevaptan memnun değilim).

Seri cihazı Heartbeat tarafından açıldığından, seri cihazı açıp verileri kendim okuyamıyorum.

Böylece dolaylı ipuçları aramaya başladım. Şimdiye kadar bulduğum tek fark, içeriğinde /proc/tty/driver/serial. Bağlandığında şöyle görünür:

# 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

Bağlantı kesildiğinde:

# 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

/ Proc / tty / driver / serial / içindekiler hakkında herhangi bir belge bulamadığım için, hattın sonunda listelenen sinyallerin bağlı / bağlantısız kablo anlamına sahip olduğuna karar verecek kadar emin değilim. Sadece sinyalin varlığının verilen sinyalin "şu anda" (ya da yakın geçmişte? Veya?) Olduğu anlamına geldiğini varsayabilirim. Seri NASIL kablosu (CTS akış kontrol sinyali DSR, CD "Modem birbirine bağlı" "I iletişim kurmak için hazır değilim") bağlandığı zaman, ek sinyaller "girdi" yönünde hepsi mevcut olduğunu belirtti. Öyleyse diğer ucunda yaşayan biri olmalı.

Sinyallerin anlamının Seri NASIL belgesinde anlatıldığı varsayıldığında, kararımı CD sinyalinin varlığına dayandırabilirim. Ancak gerçekten emin değilim.

Yani soru şu: Metodum "doğru" mu yoksa farkında olmadığım daha iyi seçeneklerim var mı?

EDIT: Bazı ilave gözlemler yaptım ve meslektaşımla konuştum. Hattın sonunda sinyallerin varlığı veya yokluğunun, her iki uçta seri port aktivitesinin oldukça iyi bir göstergesi olduğu ortaya çıkıyor. Bununla birlikte, bir kablonun fiziksel varlığının bir göstergesi değildir. Seri bağlantı noktasına bir program yazıldığında, giden sinyaller mevcuttu (RTS | DTR). Diğer taraf yazarken gelen sinyaller mevcuttu (CTS | DSR | CD). Tarafların hiçbiri iletişim kuramadığında hiç sinyal yoktur (bu, hiçbir kablo olmadığı anlamına gelmez). Kesin sinyallerin kablonun kablo bağlantısına bağlı olduğunu unutmayın (kısmi el sıkışma ile "boş modem var").


Bir akıl yürütme ve kolayca test edilebilir gibi geliyor. Ayrıca '/ sys / device / platform / serial8250 / tty / ttyS0 /' veya sisteminizde benzer bir şeye de göz atabilirsiniz.
rickhg12hs

Yanıtlar:


5

RS232'nin herhangi bir "kablo varlığı" göstergesi yoktur. Sadece iletim veya meta veri (kontrol) sinyallerini alıyorsunuz ya da almıyorsunuz - tek bildiğiniz bu. Gelen bir sinyal alırsanız (CTS | DSR | CD) kablonun bağlı olduğunu bilirsiniz. Herhangi bir gelen sinyal almazsanız, kablonun durumu belirsizdir ve ek donanım çözümleri olmadan takıldığını veya uzak cihazla bir tür değişim gerçekleştirip gerçekleştirmediğini belirlemenin bir yolu yoktur.

Her zamanki yaklaşım bir çeşit "canlı tutma" iletimi gerçekleştiriyor (hatta sadece meta veriler - örneğin anlık olarak DTR'yi ayarlayın ve CTS'yi bekliyoruz), ancak kablonun iki ucunda yazılım tarafından kullanılan protokol disiplini bu gibi boş alışverişi yasaklıyorsa, devam etmek için bir havya kullanarak sıkışmış.

Deneyebileceğiniz, bir boru oluşturan, yazılımınızla fiziksel cihaz (her iki uçta) arasında veri ileten, kapsülleyen ve boru boştaysa "bağlantı kontrolleri" yapan bir tür ek "iblis" dir.

Oldukça yaygın bir çözüm ekleyeyim: uç nokta cihazınız donanım kontrolü kullanmıyorsa, ana bilgisayar tarafında fişin içindeki CTS ile DTR'yi kısaltabilir ve ana bilgisayar tarafında 'donanım kontrolü' kullanabilirsiniz. DTR üretilmesi, kablo varsa otomatik olarak CTS'yi yönlendirir, bu da iletimin etkinleştirilmesini sağlar, böylece iletim etkilenmez. Bu arada, kablo yokken, sistem bu olaya uygun bir şekilde CTS eksikliğine tepki verecektir, örneğin kablo takılana kadar zaman aşımı veya iletimin askıya alınması.


"Daemon" şey akıllıca bir fikirdir. Ancak, kararlılık hataları kaynağı olacağından korktuğum için uygulamayacağım. / Proc'dan gelen sinyalleri okuyacağım ve sadece gelen / giden şarkıların varlığını veya yokluğunu göstereceğim. Bu bana yeter.
Peter Kovac


0

Diğer uca bağlı bir cihazınız olduğunu bildiren bir durum göstergesi vardır, ancak isteğe bağlıdır, iletim durum sinyali ile veya sinyal olmadan çalışır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.