2011-10-20 3 views
0

Windows 직렬 포트에서 읽으려면 Win32 ReadFile을 호출합니다. 내 장치가 연결되어 있지 않으면 ReadFile은 여전히 ​​성공을 반환합니다. 기기와의 연결이 끊어 졌는지 어떻게 확인할 수 있습니까? 메시지를 보내고 응답을받지 못하거나 장치 이벤트를 청취하여이 작업을 수행 할 수 있지만 더 직접적인 방법이 있습니까?Windows에서 장치 플러그가 뽑혀 기존 직렬 연결이 끊어 졌는지 감지

+0

DSR 하드웨어 신호를 확인하십시오. –

답변

2

시리얼 포트는 뭔가가 있거나 시리얼 포트에 꽂혀 있지 않을 때 장치가 독립적으로 알 수있는 방법이 없다는 점에서 바보입니다. 이 때문에 직렬 포트를 사용하는 대부분의 장치는 어떤 종류의 통신 프로토콜을 지원하므로 어떤 것이 연결되었는지 여부를 결정할 수 있습니다.

0

언어에 따라 직렬 장치에서 장치 변경 이벤트가 발생하고 테스트 할 순간이 없다고 확신하지 않습니다. PNP 그것을 데리러 경우

그러나 나는 반 더 추가하거나 시스템에서 제거 된 것을 수정하면 거기에서 WmiCode 작성자

Imports System 
Imports System.Management 
Imports System.Windows.Forms 

Namespace WMISample 

    Public Class WMIReceiveEvent 

     Public Overloads Shared Function Main() As Integer 

      Try 

       Dim query As New WqlEventQuery(_ 
        "SELECT * FROM Win32_DeviceChangeEvent") 

       Dim watcher As New ManagementEventWatcher(query) 
       Console.WriteLine("Waiting for an event...") 

       Dim eventObj As ManagementBaseObject = watcher.WaitForNextEvent() 

       Console.WriteLine("{0} event occurred.", eventObj("__CLASS")) 

       ' Cancel the event subscription 
       watcher.Stop() 
       Return 0 

      Catch err As ManagementException 

       MessageBox.Show("An error occurred while trying to receive an event: " & err.Message) 
      End Try 
     End Function 

    End Class 
End Namespace 

에서

을 시도 할 것입니다. 그러나 장치가 연결되어 있지 않은 상태에서 컴퓨터가 부팅되었을 수도 있습니다.

어느 쪽이든 나는 적절한 통신 오류 전달이 필수적이라고 모든 통신 프로토콜에서 제안합니다. 연결된 것과 쓰는 것을 확인하는 사이에 소켓이 단절되었다는 것을 보장 할 수 없다는 것과 비슷합니다.

관련 문제