Отправка команд SCPI/GPIB через USB из C#

Я пытаюсь связаться с некоторым тестовым оборудованием из С# через SCPI. Мне удалось установить связь с одним устройством, подключенным через TCP/IP, с помощью этот пример кода.

Однако другие мои устройства подключены через USB, и я не нашел, как с ними общаться через USB.

Кстати, я нашел этот вопрос и ссылку из ответа на примеры программирования IVI-COM на C#, но я не мог Не применяйте примеры кода (например, в разделе 5.4), потому что все библиотеки IVI и VISA COM, которые я нашел (например, VisaComLib 5.5), содержат только интерфейсы и перечисления, а не конкретный класс, который я могу использовать...


person Arnon Axelrod    schedule 02.01.2017    source источник


Ответы (2)


Если вы устанавливаете драйвер Visa из NationalInstruments или Keysight, они реализуют классы:

Один из NI:

  1. Отформатированный класс IO488
  2. ResourceManagerClass
  3. VisaConflictTableManagerClass

Для подключения нужны только 1 и 2

Как только вы попытаетесь внедрить интероптипы, вам необходимо удалить суффикс «Класс», как описано здесь

Вот пример фрагмента из Keysight (примечание по применению: 5989-6338EN).

Ivi.Visa.Interop.ResourceManager rm = new Ivi.Visa.Interop.ResourceManager();
Ivi.Visa.Interop.FormattedIO488 ioobj = new Ivi.Visa.Interop.FormattedIO488();

try
{

    object[] idnItems;

    ioobj.IO = (Ivi.Visa.Interop.IMessage)rm.Open("GPIB2::10::INSTR",
    Ivi.Visa.Interop.AccessMode.NO_LOCK, 0, "");

    ioobj.WriteString("*IDN ?", true);

    idnItems = (object[])ioobj.ReadList(Ivi.Visa.Interop.IEEEASCIIType.ASCIIType_Any, ",");

    foreach(object idnItem in idnItems)
    {
        System.Console.Out.WriteLine("IDN Item of type " + idnItem.GetType().ToString());
        System.Console.Out.WriteLine("\tValue of item is " + idnItem.ToString());
    }

}
catch(Exception e)
{
    System.Console.Out.WriteLine("An error occurred: " + e.Message);
}
finally
{

    try { ioobj.IO.Close(); }
    catch { }

    try
    {
        System.Runtime.InteropServices.Marshal.ReleaseComObject(ioobj);
    }
    catch { }

    try
    {
        System.Runtime.InteropServices.Marshal.ReleaseComObject(rm);
    }
    catch { }
}
person Florian    schedule 11.01.2017

Я использую National Instruments VISA.

Добавьте ссылку на NationalInstruments.VisaNS и NationalInstruments.Common в свой проект.

Создайте MessageBasedSession, см. следующий код:

string resourceName = "USB0::0x0957::0x0118::US56070667::INSTR"; // See NI MAX for resource name
var visa = new NationalInstruments.VisaNS.MessageBasedSession(resourceName);
visa.Write("*IDN?"); // write to instrument
string res = visa.ReadString(); // read from instrument

См. также https://stackoverflow.com/a/49388678/7556646.

person Wollmich    schedule 20.03.2018