質問

ます。ネSerialPortオブジェクトがあるのかを判断するシリアルポートを得ら抜くは接続します。

役に立ちましたか?

解決

USBとは異なり、シリアルポートは、リンク状態の物理的変化を検出するために、任意の組み込みの方法はありません。シグナル「準備/準備ができていないデバイス」の限定された形は、ピン(すなわちDTR、DSR、そして時にはDCD)の一部を使用して行うことができますが、あなたが探している正確に何を(それが中に組み込まれていないように、これはいないようですRS232に - 。デバイスがそれをサポートしている必要があり、あなたは主にモデムに話をするためにそれを使用する)

だから、要するに:いいえ、一般的なケースインチあなたは/あなたがと通信しようとしているデバイスをプログラムすることができます知っている、とあなたはそれが(たとえば)高い特定の行を保持することがわかっている場合、あなたは高い行くために、その行を探して、それをポーリングできます。あなたがそのような予測可能な何かをするプログラムされていないデバイスを接続した場合でも、その後、実際に指示する方法はありません。 (一部のデバイスは、デフォルトでDSR高を保持することができるが、それは決して本命です。)

他のヒント

ほとんどのシリアルデバイスは、クエリに対するACK応答のいくつかの種類があります。単純なクエリを送信し、応答を待ちます。あなたはそれを取得しない場合は、デバイスが存在しないか、または少なくとも応答していない。

いうもの SerialPort.PinChanged イベント DsrChanged.

その他の通常のデバイス接続の場合は、シリアルポートと電源がonしているポートのDSRピンを主張する;逆にそのデバイスは抜きで電源を切っているDSRピン状態に変更。


通常の意味のピンは:

  • DSR:デバイスを使用し、切り替える
  • CTS:装置あるいはデータ(この場合でもデバイスが接続例これらのデバイスはボバッファからこのピン流制御データ転送、PCから)
  • DCD:装置(モデムを設置し接続、電話回線を別のモデム(何でもお送りいただくとして扱うデータへのリモートモデム)

これらのうち、その答えがおできるようになるDSR.

があり、.NETでシリアルポートの削除/挿入を検出するためのの方法です - <のhref = "https://stackoverflow.com/questions/4199083/detect-serial-で私の答えを参照してくださいポート挿抜/ 4269883#4269883" >

シリアルポートの挿入/除去を検出
    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

あなたはavailablesシリアルポートを検出することができ、あなたは試して... catchブロック内にそれらと通信しようとすることができます。

これは、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
}

それはあなたがケーブルの種類と接続するデバイスの種類に依存します。

あなたの最善の策はPinChangedイベントハンドラを処理しようとすることです。

一部のデバイスは、他の人がハンドシェイクのためにこれらを使用しますが、接続時にDSRを上げ、オン、他のCTSされます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top