2013-04-23 3 views
0

arduino mega와 FTDI 기반 USB to RS485 어댑터를 사용하는 프로그램을 작성하려고합니다.USB 어댑터의 COM 포트 번호를 얻으십시오

나는 프로그램을 사용자에게 친숙하게 만들고 싶다. 따라서 사용자가 직접 com 포트 번호를 확인하지 않아도되지만 자동 검색하려고한다. 나는 USB 직렬 아두 이노 (일치 description.Contains("Arduino"))의 포트가 아닌 USB의 RS485 포트의 COM 포트를 찾을 수 있습니다 여기 왜 코드

ManagementScope scope = new ManagementScope(); 
    SelectQuery query = new SelectQuery("SELECT * FROM Win32_SerialPort"); 
    ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query); 

    try 
    { 
     foreach (ManagementObject item in searcher.Get()) 
     { 
      String description = item["Description"].ToString(); 
      String deviceID = item["DeviceID"].ToString(); 

      Console.WriteLine("Porta " + description + " deviceID " + deviceID); 

      if (description.Contains("USB Serial Port")) 
       return deviceID; 
     } 
    } 
    catch (ManagementException) 
    { 
    } 

이해 할 수없는 나는 점의 조각이되어 있습니다.

이것이 일어날 수있는 이유가 있습니까? 쿼리 SELECT * FROM Win32_SerialPort이 잘못 되었습니까?

답변

1

여러 포럼을 살펴본 후 SELECT * FROM Win32_PnPEntity 쿼리를 실행하면 USB/RS485 어댑터와 연결된 COM 포트가 나열된다는 것을 발견했습니다.

하지만 실제로 arduino의 직렬 포트가 다른 쿼리와 다른 쿼리로 표시되는 이유를 이해할 수 없습니다 .... 내 말은,이 둘은 모두 UBS < -> 직렬 어댑터입니다!

0

USB < -> RS485 어댑터가 없지만 RS232 인터페이스 용으로 예약 된 "직렬 포트"카테고리에 속하지 않을 것으로 추측됩니다. Win32_SerialPort 쿼리 결과 사이에 나타납니다.

내가이 레지스트리 키를 들여다의 연결과 아두 이노 보드를 감지하기 :

HKLM\HARDWARE\DEVICEMAP\SERIALCOMM 

항목에 대한

\Device\VCP0 

등이 (VCP는 찾아 볼 접두사입니다).

아마도이 레지스트리 키를 살펴 보거나 상위 키 DEVICEMAP을보고 FTDI RS485 어댑터를 연결할 때 어떤 일이 발생하는지 볼 수 있습니다. 이러한 레지스트리 키 내용 중 하나의 변경 사항을 감지하는 것은 그 시점에서 간단해야합니다.

HTH