2009-06-29 17 views

उत्तर

14

यूएसबी के विपरीत, सीरियल पोर्ट में लिंक स्थिति में भौतिक परिवर्तन का पता लगाने के लिए कोई अंतर्निहित तरीका नहीं है। कुछ डिवाइस (अर्थात् डीटीआर, डीएसआर, और कभी-कभी डीसीडी) का उपयोग करके "डिवाइस तैयार/तैयार नहीं" सिग्नलिंग का एक सीमित रूप किया जा सकता है, लेकिन ऐसा लगता है कि आप जो भी खोज रहे हैं (यह बिल्कुल नहीं है आरएस 232 तक - डिवाइस को इसका समर्थन करना चाहिए, आप मुख्य रूप से इसे मॉडेम से बात करने के लिए उपयोग करते हैं।)

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

0

आप availables सीरियल पोर्ट, आप के अंदर उन लोगों के साथ comunicate करने के लिए कोशिश कर सकते हैं पता लगा सकते हैं कोशिश करें ... ब्लॉक पकड़ो।

यह C#

using System; 
using System.Collections.Generic; 
using System.IO.Ports; 

public class MyClass 
{ 
public static void Main() 
{ 
    string[] sPorts = SerialPort.GetPortNames(); 
    foreach(string port in sPorts) 
    WL(port); 
    RL(); 
} 

#region Helper methods 

private static void WL(object text, params object[] args) 
{ 
    Console.WriteLine(text.ToString(), args); 
} 

private static void RL() 
{ 
    Console.ReadLine(); 
} 

private static void Break() 
{ 
    System.Diagnostics.Debugger.Break(); 
} 

#endregion 
} 
+1

पर मेरा उत्तर देखते हैं। – maxfridbe

+0

'स्ट्रिंग [] sPorts = SerialPort.GetPortNames(); 'काम नहीं करता है क्योंकि जब पोर्ट पहले कनेक्ट होता है:' COM1' और इससे अनप्लग किया गया है 'GetPortNames' अभी भी रिपोर्ट' COM1' मौजूद है ... मैंने अभी इसका परीक्षण किया है। – MrHIDEn

1

मैं इसे करने की कोशिश नहीं की है, लेकिन SerialPort.PinChanged घटना और DsrChanged पर देखने में बंदरगाहों का पता लगाने का एक उदाहरण है।

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


विभिन्न पिंस का सामान्य अर्थ है:

  • DSR: डिवाइस प्लग इन और
  • सीटीएस चालू है: डिवाइस डेटा प्राप्त करने के लिए तैयार है (यह नीचे भी जब एक हो सकता है डिवाइस प्लग इन है, उदाहरण के लिए जब डिवाइस पर सीमित ऑन-बोर्ड बफर होता है और पीसी से फ्लो-कंट्रोल डेटा ट्रांसफर पर इस पिन का उपयोग करता है)
  • डीसीडी: डिवाइस (मॉडेम) ने फोन लाइन पर किसी अन्य मॉडेम पर कनेक्शन स्थापित किया है (इसलिए जो भी आप भेजते हैं उसे टी स्थानांतरित करने के लिए डेटा के रूप में माना जाता है ओ रिमोट मॉडेम)

इनमें से, जो आपके ओपी का उत्तर देता है वह डीएसआर है।

+1

सही है यदि आपका डिवाइस हार्डवेयर हैंडशेकिंग का उपयोग कर रहा है। कई डिवाइस नहीं करते हैं। वास्तव में कुछ धारावाहिक बंदरगाहों में उन पिनों को भी शामिल नहीं किया जाता है। –

0

यह इस बात पर निर्भर करेगा कि आप किस प्रकार के डिवाइस से कनेक्ट हैं।

आपकी सबसे अच्छी शर्त PinChanged ईवेंट हैंडलर को संभालने का प्रयास करना है।

कुछ डिवाइस डीएसआर उठाएंगे जब कनेक्ट और स्विच किया जाएगा, अन्य सीटीएस, अन्य हैंडशेकिंग के लिए इनका उपयोग करेंगे।

2

अधिकांश धारावाहिक उपकरणों में किसी क्वेरी के कुछ प्रकार की प्रतिक्रिया प्रतिक्रिया होती है। बस एक साधारण प्रश्न भेजें और प्रतिक्रिया के लिए प्रतीक्षा करें। अगर आपको यह नहीं मिलता है, तो डिवाइस वहां नहीं है या कम से कम प्रतिक्रिया नहीं दे रहा है।

1

वहां सीरियल पोर्ट हटाने/सम्मिलन का पता लगाने का एक तरीका है।नेट - खास तौर पर अगर मैं प्रेरित SerialPortDisconnected घटना एक अच्छा घटना चाहते हैं मुझे विश्वास है कि() .Connect के इस फार्म के एक पाश प्रत्येक कनेक्शन के लिए बंदरगाह के लिए बाध्य में भद्दा है Detect serial port insertion/removal

+0

पोस्टर शायद यह पता लगाना चाहता था कि सीरियल पोर्ट से * * डिवाइस * संलग्न है, न कि सिस्टम में सीरियल पोर्ट स्थापित है या नहीं। – Zmaster

+0

@Zmaster - आप बहुत सही हैं! मुझे लगता है कि मैं उस तरह से सोच नहीं रहा था। मैंने अपनी टिप्पणी हटा दी, लेकिन अगर मैं किसी भी स्थिति की तलाश कर रहा हूं तो मेरा उत्तर यहां लागू होगा। – Pat

1
Public Class SerialPort 
     Inherits IO.Ports.SerialPort 

     Event Disconnected() 

     Public Sub OpenWithDisconnectionevent() 
      Me.Open() 
      Dim t As New Threading.Thread(AddressOf ConnectivityChecker) 
      t.Start() 
     End Sub 


     Sub ConnectivityChecker() 
      Do 
       If Me.IsOpen = False Then 
        RaiseEvent Disconnected() 
        GoTo ThreadExit 
       End If 
      Loop 
ThreadExit: 
     End Sub 
    End Class 
संबंधित मुद्दे