Отправка команд SCPI/GPIB через USB из C#
Я пытаюсь связаться с некоторым тестовым оборудованием из C# через SCPI. Мне удалось связаться с одним устройством, которое подключено через TCP/IP, используя этот пример кода.
Тем не менее, другие мои устройства подключены через USB, и я не нашел, как общаться с ними через USB.
Кстати, я нашел этот вопрос и ссылку из ответа на примеры программирования IVI-COM в документе C#, но я не смог применить примеры кода (например, в разделе 5.4), потому что все библиотеки COM IVI и VISA, которые я нашел (например, VisaComLib 5.5) содержит только интерфейсы и перечисления, и нет конкретного класса, который я мог бы использовать...
2 ответа
Если вы устанавливаете драйвер визы из NationalInstruments или Keysight, они реализуют классы:
Тот из NI:
- FormattedIO488Class
- ResourceManagerClass
- VisaConflictTableManagerClass
Чтобы получить соединение, вам нужно только 1 и 2
Как только вы попытаетесь внедрить interoptypes, вам нужно удалить суффикс "Class", как описано здесь
Вот пример кода от 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 { }
}
Я использую 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
Смотрите также /questions/9833268/c-visual-studio-komandyi-gpib/9833279#9833279.