मुझे कैसे पता चलेगा कि डिवाइस को खोले बिना एक सीरियल पोर्ट वास्तव में डेटा संचारित कर रहा है?


10

मेरे पास एक उच्च-उपलब्धता क्लस्टर (हार्टबीट) सीरियल लाइन और दो ईथरनेट एनआईसी के माध्यम से जुड़ा हुआ है। मैं एक मॉनिटरिंग स्क्रिप्ट सेट करना चाहूंगा जो डिस्कनेक्ट की गई सीरियल लाइन को पहचानने में सक्षम हो (मूल रूप से एसओ पर एक ही सवाल का जवाब दिया गया था , हालांकि मैं इस तरह के सामान्य उत्तर से संतुष्ट नहीं हूं)।

मैं केवल सीरियल डिवाइस नहीं खोल सकता और डेटा को खुद पढ़ सकता हूं, क्योंकि सीरियल लाइन को हार्टबीट द्वारा खोला जाता है।

इसलिए मैंने कुछ अप्रत्यक्ष सुराग तलाशने शुरू किए। अभी तक जो एकमात्र अंतर मैंने पाया है, वह सामग्री में है /proc/tty/driver/serial। जब यह जुड़ा होता है तो यह कैसा दिखता है:

# 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

और जब डिस्कनेक्ट किया गया:

# 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 / ड्राइवर / सीरियल की सामग्री पर कोई दस्तावेज़ नहीं मिला है। मैं केवल यह मान सकता हूं कि संकेत की उपस्थिति का मतलब है कि दिया गया संकेत "अभी" पर है (या हाल के दिनों में था? या?)। सीरियल विधिपत्र का कहना है कि अतिरिक्त संकेतों जब केबल (सीटीएस प्रवाह नियंत्रण संकेत, DSR, सीडी "मोडेम एक और से जुड़ा" "मैं बातचीत करने के लिए तैयार हूँ") से जुड़ा हुआ है प्रस्तुत "इनपुट" दिशा में सभी कर रहे हैं। इसलिए दूसरे छोर पर किसी को जीवित होना है।

यह मानते हुए कि संकेतों के अर्थ को सीरियल HOWTO में वर्णित किया गया है, मैं अपने निर्णय का आधार सीडी संकेत कह सकता हूं। हालांकि मैं वास्तव में निश्चित नहीं हूं।

तो सवाल यह है: क्या मेरा तरीका "सही" है, या क्या मेरे पास कोई बेहतर विकल्प है जिसकी मुझे जानकारी नहीं है?

संपादित करें: मैंने कुछ अतिरिक्त अवलोकन किए और अपने सहयोगी के साथ बातचीत की। लाइन के अंत में संकेतों की उपस्थिति या अनुपस्थिति को बाहर करता है, दोनों छोरों पर सीरियल पोर्ट गतिविधि का काफी अच्छा संकेतक है। हालांकि, यह एक केबल की भौतिक उपस्थिति का संकेतक नहीं है। जब भी सीरियल पोर्ट आउटगोइंग सिग्नल पर लिखने का कार्यक्रम मौजूद होता था (RTS | DTR)। जब दूसरा पक्ष लिख रहा था आने वाले संकेत मौजूद थे (CTS | DSR | सीडी)। जब कोई भी पक्ष संवाद नहीं करता है, तो कोई संकेत नहीं होता है (इसका मतलब यह नहीं है कि कोई केबल मौजूद नहीं है)। यह मत भूलो कि सटीक संकेत केबल के तारों पर निर्भर करते हैं (मेरे पास "आंशिक हैंडशेकिंग के साथ अशक्त मॉडेम है")।


एक कारण शुरू और एक आसानी से परीक्षण की तरह लगता है। आपके पास '/ sys / devices / platform / serial8250 / tty / ttyS0 /', या आपके सिस्टम पर ऐसा ही कुछ भी हो सकता है।
rickhg12hs

जवाबों:


5

RS232 में किसी भी प्रकार का कोई "केबल उपस्थिति" संकेतक नहीं है। आप केवल ट्रांसमिशन या मेटाडेटा (नियंत्रण) संकेतों के माध्यम से प्राप्त कर रहे हैं, या आप नहीं - यह सब आप जानते हैं। यदि आपको एक आवक संकेत (CTS | DSR | CD) प्राप्त होता है, तो आप जानते हैं कि केबल जुड़ा हुआ है। यदि आपको कोई आवक संकेत प्राप्त नहीं होता है, तो केबल की स्थिति अनिश्चित है और यह निर्धारित करने का कोई तरीका नहीं है कि यह अतिरिक्त हार्डवेयर समाधानों के बिना प्लग किया गया है - या रिमोट डिवाइस के साथ किसी प्रकार का विनिमय कर रहा है।

सामान्य दृष्टिकोण कुछ प्रकार के "कीप-सजीव" प्रसारण (यहां तक ​​कि सिर्फ मेटाडेटा - उदाहरण के लिए, DTR सेट और CTS की अपेक्षा करता है) कर रहा है, लेकिन यदि प्रोटोकॉल के अनुशासन का उपयोग केबल के दो सिरों पर सॉफ्टवेयर द्वारा किया जाता है, तो इस तरह के निष्क्रिय विनिमय की मनाही होती है, ' आगे बढ़ने के लिए टांका लगाने वाले लोहे का उपयोग करने के साथ बहुत ज्यादा अटक जाना।

आप जो कोशिश कर सकते हैं, वह कुछ अतिरिक्त "दानव" है जो एक पाइप सेट करता है, आपके सॉफ़्टवेयर और भौतिक डिवाइस (दोनों सिरों पर) के बीच डेटा अग्रेषित करता है, इसे एनकैप्सुलेट करता है - और अगर पाइप निष्क्रिय है तो "कनेक्शन चेक" करें।

मुझे एक सामान्य समाधान जोड़ने दें: यदि आपका एंडपॉइंट डिवाइस हार्डवेयर नियंत्रण का उपयोग नहीं करता है, तो आप मेजबान पक्ष पर प्लग के अंदर सीटीएस के साथ डीटीआर को छोटा कर सकते हैं और मेजबान पक्ष पर 'हार्डवेयर नियंत्रण' का उपयोग कर सकते हैं। यदि केबल मौजूद है, तो DTR जनरेट करना स्वचालित रूप से CTS को ड्राइव करता है, ट्रांसमिशन को सक्षम करता है, इसलिए ट्रांसमिशन अप्रभावित रहता है। इस बीच, केबल अनुपस्थित के साथ, सिस्टम इस घटना के लिए उपयुक्त तरीके से सीटीएस की कमी पर प्रतिक्रिया करेगा, जैसे कि केबल प्लग किए जाने तक एक टाइमआउट या निलंबित ट्रांसमिशन उत्पन्न करना।


"डेमन" बात एक चतुर विचार है। हालाँकि, मैं इसे लागू नहीं करने जा रहा हूँ क्योंकि मुझे डर है कि यह स्थिरता बग का स्रोत बन जाएगा। मैं / खरीद से संकेतों को पढ़ने के लिए चिपकेगा और आने वाले / आने वाले सिंगल्स की उपस्थिति या अनुपस्थिति का संकेत दूंगा। उतना मेरे लिये पर्याप्त है।
पीटर कोवाक

यह श्रोडिंगर की बिल्ली की तरह है। en.wikipedia.org/wiki/Schr%C3%B6dinger%27s_cat
Ufoguy

0

आपको बताने के लिए एक उपस्थिति संकेतक है कि आपके पास दूसरे छोर से जुड़ा एक उपकरण है, लेकिन यह वैकल्पिक है, ट्रांसमिशन उपस्थिति संकेत के साथ या उसके बिना काम करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.