Кабель последовательного порта отключен - PullRequest
8 голосов
/ 29 июня 2009

В объекте SerialPort .Net есть способ определить, отключен или подключен последовательный порт.

Ответы [ 7 ]

14 голосов
/ 29 июня 2009

В отличие от USB, последовательный порт не имеет встроенного способа обнаружения физического изменения состояния канала. Ограниченная форма сигнализации «устройство готово / не готово» может быть выполнено с использованием некоторых контактов (а именно DTR, DSR и иногда DCD), но это не совсем то, что вы ищете (это не встроенный на RS232 - устройство должно поддерживать его, вы в основном используете его для связи с модемами.)

Итак, вкратце: нет, в общем случае. Если вы знаете / можете запрограммировать устройство, с которым вы пытаетесь установить связь, и знаете, что оно будет удерживать определенную линию (например, высоко), вы можете опросить его, ища, чтобы эта линия поднялась высоко. Но если вы подключите устройство, которое не запрограммировано, чтобы делать что-то предсказуемое, то на самом деле нет никакого способа узнать. (Некоторые устройства могут поддерживать высокий DSR по умолчанию, но это ни в коем случае не является верной ставкой.)

2 голосов
/ 29 июня 2009

Большинство последовательных устройств имеют некоторый тип подтверждения ответа на запрос. просто отправьте простой запрос и дождитесь ответа. Если вы не получили его, устройство отсутствует или, по крайней мере, не отвечает.

1 голос
/ 10 апреля 2016
    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
1 голос
/ 24 ноября 2010

Там - это способ обнаружения удаления / вставки последовательного порта в .NET - см. Мой ответ на Обнаружение вставки / удаления последовательного порта

1 голос
/ 29 июня 2009

Я не пробовал, но посмотрите на событие SerialPort.PinChanged и DsrChanged .

Когда бы ни было нормальное устройство, подключенное к последовательному порту и включенное, тогда я ожидал бы, что вывод DSR порта будет утвержден; и наоборот, если это устройство отключено или когда оно выключено, то я ожидаю, что состояние контакта DSR изменится / упадет.


Обычный смысл различных выводов:

  • DSR: устройство подключено и включено
  • CTS: устройство готово к приему данных (оно может быть недоступно, даже если устройство подключено, например, когда устройство имеет ограниченный встроенный буфер и использует этот вывод для передачи данных управления потоком с ПК)
  • DCD: устройство (модем) установило соединение по телефонной линии с другим модемом (поэтому все, что вы отправляете, обрабатывается как данные, передаваемые на удаленный модем)

Из них тот, который отвечает на ваш ОП, - DSR.

0 голосов
/ 29 июня 2009

Это будет зависеть от того, какое устройство вы подключаете к какому кабелю.

Лучше всего попробовать обработать обработчик событий PinChanged.

Некоторые устройства будут поднимать DSR при подключении и включении, другие CTS, другие будут использовать их для рукопожатия.

0 голосов
/ 29 июня 2009

вы можете обнаружить доступные последовательные порты, вы можете попытаться соединиться с ними внутри блока try ... 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...