2017-07-27 158 views
0

UWP應用程序,要與串行設備(如COM3)連接,我成功獲取所有可用的設備列表以下代碼。但有一點很奇怪。我的設備沒有VID,沒有PID。UWP SerialDevice:我的設備壞了嗎?無法連接Vid,Pid

USB-RS485 convertor

  1. 首先,我用 「GetDeviceSelector」,我能找到我的串行設備。並且,我得到了這個字符串「\?\ FTDIBUS#VID_0403 + PID_6001 + AL03INW7A#0000#{86e0d1e0-8089-11d0-9ce4-08003e301f73}」然後我知道我的設備有Vid = 0x0403,Pid = 0x6001。
  2. Next如果我使用「GetDeviceSelectorFromUsbVidPid(0x0403,0x6001)」。 UWP找不到我的設備...

爲什麼?

首先是測試代碼。

public MainPage()                             
     {                               
      this.InitializeComponent();                        

      Task.Run(() => this.test()).Wait();                      

     }                               

     public async Task test()                         
     {                               
      try                              
      {                              
       // Not Work                           
       // var DeviceSelector = SerialDevice.GetDeviceSelectorFromUsbVidPid(0x0403, 0x6001); //        

       // Work                            
       var DeviceSelector = SerialDevice.GetDeviceSelector();               
       var DeviceInformations = await DeviceInformation.FindAllAsync(DeviceSelector);          

       for (int i = 0; i < DeviceInformations.Count; i++)                 
       {                             
        var d = DeviceInformations[i];                     
        SerialDevice port = await SerialDevice.FromIdAsync(d.Id);              

        Debug.WriteLine(String.Format("{0}\n{1}\n{2}\n{3}\n{4}\n{5}\n---------------------",       
         d.Name,                          
         d.Id,                          
         d.IsEnabled,                        
         port?.PortName,                        
         port?.UsbProductId.ToString("X4"),                    
         port?.UsbVendorId.ToString("X4")                    
         ));                           


       }                             
      }                              
      catch (Exception ex)                         
      {                              
       Debug.WriteLine("SerialController/ListAvailablePorts/Exception/" + ex.Message);          
      }                              

      return;                             
     }                               

Package.appxmanifest也必須這樣做。

<Capabilities> 
    <Capability Name="internetClient" /> 
    <DeviceCapability Name="serialcommunication"> 
     <Device Id="any"> 
     <Function Type="name:serialPort" /> 
     </Device> 
    </DeviceCapability> 
    </Capabilities> 
</Package> 

以下是GetDeviceSelector的結果。

FT232R USB UART 
\\?\FTDIBUS#VID_0403+PID_6001+AL03INW7A#0000#{86e0d1e0-8089-11d0-9ce4-08003e301f73} 
True 
COM12 
0000 
0000 

查看最後兩個零值。 VID,PID看起來像零。哪裏不對 ?

UPDATE1

與Sunteen吳的建議(謝謝),我嘗試使用其他設備。下一個設備是RS232-USB設備。這兩個設備都是虛擬COM端口。我嘗試了相同的代碼。第二個設備有Vid,Pid!嗯.....我的設備是錯誤的.....

ATEN USB to Serial Bridge (COM13) 
\\?\USB#VID_0557&PID_2008#8&1d38065f&1&4#{86e0d1e0-8089-11d0-9ce4-08003e301f73} 
System.Runtime.InteropServices.WindowsRuntime.ReadOnlyDictionaryValueCollection`2[System.String,System.Object] 
COM13 
2008 
0557 

enter image description here

+0

我能知道什麼是你的設備你有測試其他設備? ? –

+0

我在這裏買了設備。(http://www.usconverters.com/usb-to-rs485-converter-iu100)...我將在稍後測試另一個設備.... –

+0

我嘗試了另一個設備。有虛擬COM端口。第二個設備有Vid,PId!..hmm ....我向製造商請求這個。我的第一個設備是FTDI。是否有自己設置Vid,Pid ...?無論如何,謝謝。 ... –

回答

0

這是我的設備發生故障。我報告要製造。我希望他們會加上Vid,Pid的未來。 關於詳情,請閱讀我的問題中的「更新」。

購買之前,有沒有辦法知道它...。(

我喜歡他們的產品這是非常好的