2017-12-18 54 views
2

IMを動作しません... 私はUsbLibDotNetTest例を書いて、USBにから読み取るしようとしている私のため

ec = reader.Read(readBuffer, 10000, out bytesRead); 

にWin32Errorを持って、私はそれが例外を投げるよりもbytesReadに0を得た(「これ以上のバイト! ");

if (bytesRead == 0) throw new Exceptio`enter code here`n("No more bytes!"); 

私はSERIALPORTオブジェクトを使用してポートRS232を使用しようとしたとき、私は非常によく、次の文字列この文字列の作品を書きます。 しかし、それはUSBポートでは動作しません...

string cmdLine = @"@01WD300000295B*"+(char)13; 

はたぶんUSBポート用のC#ラインSERIALPORT内の任意のオブジェクトを存在していますか?

using System; 
    using System.Text; 
    using System.Windows.Forms; 
    using System.Text.RegularExpressions; 
    using LibUsbDotNet; 
    using LibUsbDotNet.Main; 
    using System.Threading; 

    namespace UsbLibDotNetTest 
    { 

     public partial class Form1 : Form 
     { 
      public static UsbDevice MyUsbDevice; 

      #region SET YOUR USB Vendor and Product ID! 

      public static UsbDeviceFinder MyUsbFinder = new UsbDeviceFinder(0x0590, 0x005B); 
      #endregion 
      public Form1() 
      { 
       InitializeComponent(); 
      } 

      private void Form1_Load(object sender, EventArgs e) 
      { 
       ErrorCode ec = ErrorCode.None; 

       try 
       { 
        // Find and open the usb device. 
        MyUsbDevice = UsbDevice.OpenUsbDevice(MyUsbFinder); 

        // If the device is open and ready 
        if (MyUsbDevice == null) throw new Exception("Device Not Found."); 

        // If this is a "whole" usb device (libusb-win32, linux libusb) 
        // it will have an IUsbDevice interface. If not (WinUSB) the 
        // variable will be null indicating this is an interface of a 
        // device. 
        IUsbDevice wholeUsbDevice = MyUsbDevice as IUsbDevice; 
        if (!ReferenceEquals(wholeUsbDevice, null)) 
        { 
         // This is a "whole" USB device. Before it can be used, 
         // the desired configuration and interface must be selected. 

         // Select config #1 
         wholeUsbDevice.SetConfiguration(1); 

         // Claim interface #0. 
         wholeUsbDevice.ClaimInterface(0); 
        } 

        // open read endpoint 1. 
        UsbEndpointReader reader = MyUsbDevice.OpenEndpointReader(ReadEndpointID.Ep01); 

        // open write endpoint 1. 
        UsbEndpointWriter writer = MyUsbDevice.OpenEndpointWriter(WriteEndpointID.Ep01); 

        // Remove the exepath/startup filename text from the begining of the CommandLine. 
        //string cmdLine = Regex.Replace(
        // Environment.CommandLine, "^\".+?\"^.*? |^.*? ", "", RegexOptions.Singleline); 

        string cmdLine = @"@01WD300000295B*"+(char)13; 

        if (!String.IsNullOrEmpty(cmdLine)) 
        { 
         int bytesWritten; 
         ec = writer.Write(Encoding.Default.GetBytes(cmdLine), 2000, out bytesWritten); 
         if (ec != ErrorCode.None) throw new Exception(UsbDevice.LastErrorString); 

         byte[] readBuffer = new byte[1024]; 
         while (ec == ErrorCode.None) 
         { 
          int bytesRead; 
          Thread.Sleep(10000); 
          // If the device hasn't sent data in the last 100 milliseconds, 
          // a timeout error (ec = IoTimedOut) will occur. 
          ec = reader.Read(readBuffer, 10000, out bytesRead); 

          if (bytesRead == 0) throw new Exception("No more bytes!"); 

          // Write that output to the console. 
          Console.Write(Encoding.Default.GetString(readBuffer, 0, bytesRead)); 
         } 

         Console.WriteLine("\r\nDone!\r\n"); 
        } 
        else 
         throw new Exception("Nothing to do."); 
       } 
       catch (Exception ex) 
       { 
        Console.WriteLine(); 
        Console.WriteLine((ec != ErrorCode.None ? ec + ":" : String.Empty) + ex.Message); 
       } 
       finally 
       { 
        if (MyUsbDevice != null) 
        { 
         if (MyUsbDevice.IsOpen) 
         { 
          // If this is a "whole" usb device (libusb-win32, linux libusb-1.0) 
          // it exposes an IUsbDevice interface. If not (WinUSB) the 
          // 'wholeUsbDevice' variable will be null indicating this is 
          // an interface of a device; it does not require or support 
          // configuration and interface selection. 
          IUsbDevice wholeUsbDevice = MyUsbDevice as IUsbDevice; 
          if (!ReferenceEquals(wholeUsbDevice, null)) 
          { 
           // Release interface #0. 
           wholeUsbDevice.ReleaseInterface(0); 
          } 

          MyUsbDevice.Close(); 
         } 
         MyUsbDevice = null; 

         // Free usb resources 
         UsbDevice.Exit(); 

        } 

        // Wait for user input.. 
       // Console.ReadKey(); 
       } 
      } 
     } 
    } 
+0

誰か他の人がそれをやる方法を知っているのでしょうか? – dudi

答えて

0

シリアルポートへのすべてのUSBが動作するようには思え変換しないことを私が発見した...私はそれについては何も見つかりませんでしたし、私は他に何を行うことができますかわかりません。私が使用しているものはUgreen USB to Serialです。これはWindows 7とWindows 10で私にとってはうまくいきました。 http://www.ugreen.com.cn/product-681-en.html 他のコンバータはSabrentです。これはWindows XPとWindows 7でしか機能していませんでした。 よろしくお願いします。Garry

+0

こんにちは、私はC#でクラスを使用することを好むとコンバータ... – dudi

関連する問題