2015-08-12 1 views
2

Я пытаюсь использовать Ivi.Visa.Interop .dll для связи с измерителем мощности Voltech PM1000 + с использованием USB. Я относительно новичок в C# и не знаю, с чего начать. Я использую сообщество Visual Studio 2015. Я уже говорил с другим инструментом с помощью GPIB и вот код для этого:Как подключиться к инструменту через USB с помощью C#

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using Ivi.Visa.Interop; 


namespace commOverIP 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void InitiateIOBtn_Click(object sender, EventArgs e) 
    { 
     ///testing out excel 
     InitiateIOBtn.Text = "Initializing"; 



     try 
     { 
      // resource manager and message-based session manager 
      Ivi.Visa.Interop.ResourceManager mngr = new Ivi.Visa.Interop.ResourceManager(); 

      // GPIB address 
      string srcAddress = "GPIB::27::INSTR"; // GPIB address of data acquisition 
      //setting up communication 
      Ivi.Visa.Interop.FormattedIO488 instrument = new Ivi.Visa.Interop.FormattedIO488(); 
      Ivi.Visa.Interop.IMessage Imsg = (mngr.Open(srcAddress, Ivi.Visa.Interop.AccessMode.NO_LOCK, 1000, "") as IMessage); 
      instrument.IO = Imsg; 

      instrument.IO.Clear();//clear io buffer 
      instrument.WriteString("*RST", true);//send RST? command to instrument 
      instrument.WriteString("*IDN?", true);//send IDN? command to instrument 
      returnOfCommand.Text = instrument.ReadString();//read IDN? result 

      //close communication 
      instrument.IO.Close(); 
      System.Runtime.InteropServices.Marshal.ReleaseComObject(instrument); 
      System.Runtime.InteropServices.Marshal.ReleaseComObject(mngr); 

      InitiateIOBtn.Text = "Initialize I/O"; 
      //*/ 
     } 
     catch(Exception exp) 
     { 
      MessageBox.Show(exp.Message); 
     } 
     InitiateIOBtn.Text = "Initialize I/O"; 
    } 
} 
} 

Это прекрасно работает, но USB кажется другим зверем. Единственное реальное лидерство, которое я нашел, было в .dll с: IUsb.Init (строка, Ivi.Visa.Interop.AccessMode, int, string) Я попытался реализовать это, но я не знаю, с чего начать.

Если кто-нибудь может дать мне пример того, как запросить «IDN»? команда была бы замечательной. Или даже если есть лучший способ сделать это, чем через dll Ivi.Visa.Interop.

Заранее благодарен

+0

Видя, как это очень специфический к части оборудования 99,9% из нас не имеют, вы не можете получить большую помощь здесь. Я бы посоветовал обратиться к людям, опубликовавшим API, и обратиться за помощью напрямую. –

+0

Я не ищу конкретный набор кода. Я ищу, как открыть, написать, прочитать и закрыть USB-порт. "* IDN?" это стандартная команда, которую вы отправляете на инструмент, чтобы прочитать личность инструмента. Я не ищу точных команд, я ищу направление. – rtyson

ответ

0

Перезагрузите устройство один раз. Также помогает очистка IO. После этого следующий код должен работать нормально:

string resourceString= "USB0::xxx::xxx::xxx::0::INSTR"; 
    ResourceManager manager = new ResourceManager(); 
    FormattedIO488 connection = new FormattedIO488(); 
    connection.IO = (IMessage)manager.Open(resourceString, AccessMode.NO_LOCK, 0, ""); 
    connection.IO.Clear(); 
    connection.WriteString("*IDN?", true); 
    string result = connection.ReadString(); 
Смежные вопросы