C# Visual Studio Команды GPIB

Какие команды вы используете для общения с инструментом GPIB в C#, visual studio? Мне нужно уметь писать команды на инструмент и читать вывод.

4 ответа

Решение

Я использую Agilent IO Library Suite.

Вот учебник, чтобы использовать его на C#: примеры программирования ввода / вывода на C#

Тем не менее, в моей компании у нас были проблемы со стабильностью при реализации VISA-COM, поэтому мы написали нашу собственную обертку вокруг visa32.dll (также входит в комплект библиотеки IO), используя P / Invoke.

(Раскрытие информации: я работаю в компании, которая интенсивно использует инструменты GPIB)

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

Сначала убедитесь, что вы проверили VisaNS.NET API в настройке NI-VISA см. следующий рисунок:

введите описание изображения здесь

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

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

string resourceName = "GPIB0::20::INSTR"; // GPIB adapter 0, Instrument address 20
var visa = new NationalInstruments.VisaNS.MessageBasedSession(resourceName);
visa.Write("*IDN?"); // write to instrument
string res = visa.ReadString(); // read from instrument

MessageBasedSession может использоваться для связи с вашим прибором через GPIB, Ethernet или USB.

Отправить команды из последовательного порта.

См. Пример COM-порта Microsoft.

Вы можете использовать NI Visa. Если вы используете Vb или C#, используйте Visa32.bas или Visa32.cs с диска с примерами программ.

int DefaultSessionId= 0;
int SessionId= 0;
int LastStatus = 0;
string Address = "GPIB0::6" ; //any address

//Session Open
LastStatus = visa32.viOpenDefaultRM(out DefaultSessionId);

//Connection Open
LastStatus = visa32.viOpen(DefaultSessionId, Address + "::INSTR", 0, 0, out sessionId);
LastStatus = visa32.viSetAttribute(SessionId, visa32.VI_ATTR_TERMCHAR, 13);// Set the termination character to carriage return (i.e., 13);
LastStatus = visa32.viSetAttribute(SessionId, visa32.VI_ATTR_TERMCHAR_EN, 1);// Set the flag to terminate when receiving a termination character
LastStatus = visa32.viSetAttribute(SessionId, visa32.VI_ATTR_TMO_VALUE, 2000);// Set timeout in milliseconds; set the timeout for your requirements

//Communication
LastStatus = visa32.viPrintf(SessionId, command + "\n");//device specific commands to write
StringBuilder message = new StringBuilder(2048);
LastStatus = visa32.viScanf(SessionId, "%2048t", message);//Readback

//Session and Connection Close
visa32.viClose(SessionId);
visa32.viClose(DefaultSessionId);

Ссылка

Сначала вы должны создать объект с классом LangInt. Затем используйте этот объект с методами GPIB. Наиболее распространенными и используемыми являются (при условии, что вы создали объект с именем "dev");

dev.ibwrt(deviceHandle, "*IDN?", "*IDN?".Length);

dev.ibrd(deviceHandle, out Value, Arraysize);

Эти двое могут запросить устройство. Или вы можете использовать их последовательно, например, для установки частоты генератора, а затем его амплитуды.

Важная часть перед отправкой команд SCPI; Вы ДОЛЖНЫ сначала инициализировать устройства. Для этого используйте;

deviceHandle = ibdev(GPIBINDEX, GPIBADDRESS, SECONDARYADDRESS, TIMEOUT, EOTMODE, EOSMODE);

Эти параметры должны быть объявлены первыми в коде. После инициализации вы можете использовать каждую команду GPIB с этим устройством.

И, конечно, вы должны добавить NationalInstruments.NI4882 и LangInt.dll в ваш проект.

Другие вопросы по тегам