NI-VISA: примеры программирования генераторов SDG/АКИП |
![]() |
Добавил(а) microsin |
Здесь приведены примеры программ для Microsoft Visual Studio на языках Visual C#, Visual C++, Visual Basic, а также в средах MATLAB и LabVIEW. [Пример программирования на C#] Здесь приведен код простейшей консольной утилиты visa.exe, написанной на C# в среде Microsoft Visual Studio 2010 на основе API библиотек .NET Ivi.Visa и NationalInstruments.Visa. using System; using System.Collections.Generic; using System.Linq; using System.Text; using Ivi.Visa; using NationalInstruments.Visa; namespace visa { class Program { static MessageBasedSession mbSession; static string rn; //Resource Name (идентификатор прибора) static string writestr; //строка для отправки команды (опции -w:, -q:) static string readstr; //строка для приема ответа (опции -r, -q:) static bool write, read, query; static bool showhelp = false; static void parsecmdline (string[] args) { if ("-?" == args[0]) showhelp = true; else { foreach (string s in args) { if ("-r"==s && 2==s.Length) { read = true; } else if ("-i:" == s.Substring(0, 3)) { rn = s.Substring(3); } else if ("-w:" == s.Substring(0, 3)) { writestr = s.Substring(3); write = true; } else if ("-q:" == s.Substring(0, 3)) { writestr = s.Substring(3); query = true; } } } } static void ShowVisaResources() { Console.WriteLine("Список ресурсов VISA:"); var rmSession = new ResourceManager(); //foreach (string s in rmSession.Find("USB?*INSTR")) foreach (string s in rmSession.Find("(ASRL|GPIB|TCPIP|USB)?*INSTR")) { Console.WriteLine(s); } rmSession.Dispose(); } static void Usage() { Console.WriteLine("Утилита для управления ресурсами инструментов. Использование:"); Console.WriteLine("visa.exe -?"); Console.WriteLine(" подсказка по командной строке"); Console.WriteLine("visa.exe"); Console.WriteLine(" вывод списка имен ресурсов VISA"); Console.WriteLine("visa.exe < -i:ID> < -w:command>"); Console.WriteLine(" отправка команды в ресурс инструмента по ID"); Console.WriteLine("visa.exe < -i:ID> < -r>"); Console.WriteLine(" получение ответа от ресурса инструмента по ID"); Console.WriteLine("visa.exe < -i:ID> < -q:query>"); Console.WriteLine(" отправка запроса и получение от ресурса инструмента по ID"); } static string InsertCommonEscapeSequences(string s) { return s.Replace("\n", "\\n").Replace("\r", "\\r"); } static void Main(string[] args) { // Сброс начальных параметров: rn = ""; writestr = ""; readstr = ""; write = false; read = false; query = false; // Опрос командной строки: if (0 == args.Length) { ShowVisaResources(); Console.WriteLine("Для выдачи подсказки используйте visa.exe -?"); return; } else { parsecmdline(args); } // Проверка результатов опроса командной строки: if (showhelp) { Usage(); return; } if ("" == rn) { //Не указан идентификатор прибора. Console.WriteLine("Нужно указать ID ресурса (опция -i:)"); return; } if ((!write && !read && !query) ||(write && query) ||(read && query)) { //Неправильно (не совместимо) указан набор опций. Console.WriteLine("Ошибка выбора операции (опции -w:, -r, -q:)"); return; } var rmSession = new ResourceManager(); if ("" != writestr) { mbSession = null; try { mbSession = (MessageBasedSession)rmSession.Open(rn); mbSession.RawIO.Write(writestr); } catch (Exception exp) { Console.WriteLine(exp.Message); } } if (read || query) { try { mbSession = (MessageBasedSession)rmSession.Open(rn); readstr = InsertCommonEscapeSequences(mbSession.RawIO.ReadString()); Console.WriteLine(readstr); } catch (Exception exp) { Console.WriteLine(exp.Message); } } if (mbSession != null) mbSession.Dispose(); if (rmSession != null) rmSession.Dispose(); } } } Полностью проект для Visual Studio 2010 можно скачать по ссылке [6]. Другие рабочие примеры программ на C# можно найти в пакете NI-VISA, см. папку "C:\Users\Public\Documents\National Instruments\NI-VISA\Examples\.NET" (Пользователи -> Общие -> Общие документы -> National Instruments -> NI-VISA -> Examples -> .NET -> 17.0). Использование утилиты. Выдача списка доступных в системе ресурсов VISA: >visa.exe Список ресурсов VISA: USB0::0xF4ED::0xEE3A::NDG080B2150089::INSTR ASRL1::INSTR ASRL2::INSTR ASRL8::INSTR ASRL10::INSTR Для выдачи подсказки используйте visa.exe -? Выдача подсказки по командной строке: >visa.exe -? Утилита для управления ресурсами инструментов. Использование: visa.exe -? подсказка по командной строке visa.exe вывод списка имен ресурсов VISA visa.exe < -i:ID> < -w:command> отправка команды в ресурс инструмента по ID visa.exe < -i:ID> < -r> получение ответа от ресурса инструмента по ID visa.exe < -i:ID> < -q:query> отправка запроса и получение от ресурса инструмента по ID Получение идентификационной строки от прибора: >visa.exe -i:USB0::0xF4ED::0xEE3A::NDG080B2150089::INSTR -q:*IDN? *IDN *,AKIP-3408-1,NDG080B2150089,1.08.01.08,02-00-00-04-00\n Установка состояния выхода (отключено, нагрузка, выход в состоянии высокого сопротивления). Обратите внимание, что значения опций, в которых есть пробел, нужно указывать в двойных кавычках: >visa.exe -i:USB0::0xF4ED::0xEE3A::NDG080B2150089::INSTR -w:"OUTP OFF,LOAD,HZ" Включение выхода (подача на выход сигнала): >visa.exe -i:USB0::0xF4ED::0xEE3A::NDG080B2150089::INSTR -w:"OUTP ON" Установка выходной частоты 8000.001 Гц: >visa.exe -i:USB0::0xF4ED::0xEE3A::NDG080B2150089::INSTR -w:"BSWV FRQ,8000.001" Установка уровня выходного сигнала от пика до пика в значение 1.44 вольт: >visa.exe -i:USB0::0xF4ED::0xEE3A::NDG080B2150089::INSTR -w:"BSWV AMP,1.44" Получение информации о сигнале на выходе: >visa.exe -i:USB0::0xF4ED::0xEE3A::NDG080B2150089::INSTR -q:BSWV? BSWV WVTP,SINE,FRQ,8000HZ,AMP,1.44V,OFST,0V,PHSE,0\n Получение информации о текущей конфигурации: >visa.exe -i:USB0::0xF4ED::0xEE3A::NDG080B2150089::INSTR -q:SCFG? SCFG DEFAULT\n Когда в наличии имеется старый парк компьютеров с Windows XP, от которых по разным причинам никак нельзя избавиться (по разным причинам, обычно из-за старого, давно написанного ПО), то в полный рост встает проблема: как написать программу C# для использования NI-VISA, чтобы она одинаково хорошо работала как на Windows XP SP3, так и на Windows 7, Windows 8 и других новых операционных системах линейки Windows? И конечно же, желательно, чтобы программа нормально работала как на 32-битной версии, так и на 64 битной версии. Ниже приведено несколько простых советов, которые позволят решить эту проблему. 1. Всегда компилируйте приложение C# на 32-битную платформу. Тогда она будет нормально работать как на 32-битной версии Windows, так и на 64-битной. 2. Установите на рабочей станции, где Вы разрабатываете приложение, NI-VISA версии 15.5. Это последняя самая свежая версия, где поддерживается Windows XP. 3. Для того, чтобы работал пример кода C#, который показан выше, совсем не обязательно устанавливать на целевой клиентской системе Windows пакет NI-VISA. Достаточно в каталог программы (где находится exe-файл приложения) скопировать два DLL-файла: Ivi.Visa.dll и NationalInstruments.Visa.dll с компьютера, на котором разрабатывалось приложение. [Пример программирования на VC++] Рабочее окружение Windows 7 32-bit, Visual Studio, установлен пакет NI-VISA. В этом примере используется NI-VISA для управления прибором (запись и чтение) через подключение USBTMC. Процесс по шагам: 1. Запустите Visual Studio, создайте новый проект VC++ win32 console. 2. Настройте проект на использование библиотеки NI-VISA, что можно сделать двумя способами - статически (static) или динамически (automatic, через DLL): 2.1. Вариант Static: найдите файлы visa.h, visatype.h, visa32.lib в каталоге установки NI-VISA (обычно они находятся в подкаталогах папки %VXIPNPPATH%\WinNT\Include или %VXIPNPPATH64%\WinNT\Include, в зависимости от версии используемых библиотек - 32-битной или 64-битной). Скопируйте их в каталог своего проекта, и добавьте в проект. В файле имяпроекта.cpp добавьте следующие 2 строки: #include "visa.h"
#pragma comment(lib,"visa32.lib")
2.2. Вариант Automatic: настройте путь поиска заголовочных файлов (*.h) на каталог установки NI-VISA своего компьютера. Обычно это каталог наподобие %VXIPNPPATH%\WinNT\Include или %VXIPNPPATH64%\WinNT\Include. Установите этот путь в настройках проекта: Project -> Properties -> C/C++ -> General -> Additional Include Directories. Различие между этими вариантами только в том, что вариант 2.1 жестко вставляет код библиотек в тело исполняемого файла *.exe, а вариант 2.2 - подгружает код из DLL. Недостаток варианта 2.1 - размер генерируемого при компиляции кода увеличивается, но зато программа будет работать на другом компьютере, где не установлен пакет NI-VISA. Вариант 2.2 использует функции NI-VISA, загружаемые динамически из файлов *.dll. Это уменьшает размер файла *.exe приложения, но оно будет работать только на том компьютере, где установлен пакет NI-VISA. Альтернативно для варианта 2.2 можно создать инсталлятор, который будет поставлять вместе с приложением все необходимые dll-файлы зависимостей, но тогда вариант 2.2 уже будет по размеру даже больше, чем вариант 2.1. Короче говоря, выбор не очень-то и критичен, все больше зависит от предпочтений программиста. Примечание: %VXIPNPPATH% и %VXIPNPPATH64% это переменные окружения, которые автоматически устанавливаются инсталлятором NI-VISA для указания на каталог установки библиотек NI-VISA. 3. Настройте путь до файлов *.lib. Обычно это каталог наподобие %VXIPNPPATH%\WinNT\lib\msc или %VXIPNPPATH64%\WinNT\Win64\Lib_x64\msc, в зависимости от версии используемых библиотек - 32-битной или 64-битной. Путь до используемых файлов библиотек настраивается в свойствах проекта: Project -> Properties -> Linker -> General -> Additional Library Directories. Примечание: если Вы сомневаетесь, какую версию библиотеки использовать, смело выбирайте 32-битную версию, потому что это должно корректно работать как на 32-битной операционной системе Windows, так и на 64-битной. 4. Настройте командную строку линкера в свойствах проекта на использование visa32.lib: Project -> Properties -> Linker -> Command Line -> Additional Options. 5.1. Напишите тест-функцию, которая будет использовать вызовы библиотеки NI-VISA. Этот пример использует локальные подключения (USB, COM-порты): int Usbtmc_test() { /* Этот код демонстрирует асинхронную отправку команд чтения и записи */ /* в класс USBTMC (USB Test & Measurement Class) инструмента с помощью */ /* библиотеки NI-VISA. */ /* Пример записывает строку команды "*IDN?\n" во все устройства USBTMC, */ /* подключенные к системе, и пытается прочитать ответ. */ /* Здесь используется следующая последовательность действий: */ /* Открытие Resource Manager */ /* Открытие VISA Session к инструменту */ /* Запись запроса идентификации (Identification Query) функцией viPrintf */ /* Попытка чтения ответа функцией viScanf */ /* Закрытие VISA Session */ ViSession defaultRM; ViSession instr; ViUInt32 numInstrs; ViFindList findList; ViUInt32 retCount; ViUInt32 writeCount; ViStatus status; char instrResourceString[VI_FIND_BUFLEN]; unsigned char buffer[100]; char stringinput[512]; int i; /* Сначала мы должны вызвать viOpenDefaultRM, чтобы получить handle для Resource Manager. Этот handle будет сохранен в переменную defaultRM. */ status=viOpenDefaultRM (&defaultRM); if (status < VI_SUCCESS) { printf ("Could not open a session to the VISA Resource Manager!\n"); return status; } /* Найдем все ресурсы USB TMC VISA в нашей системе, и сохраним количество этих ресурсов в переменную numInstrs. */ status = viFindRsrc (defaultRM, "USB?*INSTR", &findList, &numInstrs, instrResourceString); if (status < VI_SUCCESS) { printf ("An error occurred while finding resources.\nHit enter to continue."); fflush(stdin); getchar(); viClose (defaultRM); return status; } /* Теперь откроем сессии VISA ко всем инструментам USB TMC. Мы будем использовать handle из viOpenDefaultRM, и мы также должны использовать
строку, которая будет идентифицировать открываемый инструмент. Эта строка
называется дескриптором инструмента (instrument descriptor). Её формат
можно найти в панели функций правым кликом мыши на параметре дескриптора.
После открытия сессии к устройству мы получим хендл к инструменту,
который будем использовать позже в функциях VISA. Параметры AccessMode
и Timeout в этой функции зарезервированы для использования в будущем.
Этим двум параметрам сейчас дается значение VI_NULL. */ for (i=0; i < numInstrs; i++) { if (i > 0) viFindNext (findList, instrResourceString); status = viOpen (defaultRM, instrResourceString, VI_NULL, VI_NULL, &instr); if (status < VI_SUCCESS) { printf ("Cannot open a session to the device %d.\n", i+1); continue; } /* В этой точке у нас есть открытая сессия к инструменту USB TMC. Будем использовать функцию viPrintf для отправки строки "*IDN?\n",
запрашивая этой командой идентификацию устройства. */ char * cmmand ="*IDN?\n"; status = viPrintf (instr, cmmand); if (status < VI_SUCCESS) { printf ("Error writing to the device %d.\n", i+1); status = viClose (instr); continue; } /* Теперь мы попытаемся прочитать обратно ответ от устройства, которое оно должно отправить на запрос идентификации. Для получения данных
ответа мы будем использовать функцию viScanf. После того, как данные
ответа прочитаны, они будут отображены. */ status = viScanf(instr, "%t", buffer); if (status < VI_SUCCESS) printf ("Error reading a response from the device %d.\n", i+1); else printf ("\nDevice %d: %s\n", i+1 , buffer); status = viClose (instr); } /* Закроем сессию инструмента, используя функцию viClose. Эта операция освободит все системные ресурсы, занятые предыдущими вызовами API NI-VISA. */ status = viClose (defaultRM); system("pause"); // пауза, чтобы можно было успеть прочитать сообщение консоли return 0; } 5.2. Этот пример использует для подключения протокол TCP/IP: int TCP_IP_Test(char *pIP) { char outputBuffer[VI_FIND_BUFLEN]; ViSession defaultRM, instr; ViStatus status; ViUInt32 count; ViUInt16 portNo; /* Сначала нам нужно открыть менеджер ресурсов по умолчанию. */ status = viOpenDefaultRM (&defaultRM); if (status < VI_SUCCESS) { printf("Could not open a session to the VISA Resource Manager!\n"); } /* Теперь откроем сессию к TCP/IP-устройству */ char head[256] ="TCPIP0::"; char tail[] ="::INSTR"; char resource [256]; strcat(head,pIP); strcat(head,tail); status = viOpen (defaultRM, head, VI_LOAD_CONFIG, VI_NULL, &instr); if (status < VI_SUCCESS) { printf ("An error occurred opening the session\n"); viClose(defaultRM); } status = viPrintf(instr, "*idn?\n"); status = viScanf(instr, "%t", outputBuffer); if (status < VI_SUCCESS) { printf("viRead failed with error code: %x \n",status); viClose(defaultRM); } else printf ("\ndata read from device: %*s\n", 0,outputBuffer); status = viClose (instr); status = viClose (defaultRM); system("pause"); return 0; } [Пример программирования на VB] Рабочее окружение: Windows 7 32-bit, Microsoft Visual Basic 6.0. В этом примере демонстрируется использование NI-VISA для управления устройством через USBTMC и TCP/IP, выполняется запись и чтение. 1. Откройте Visual Basic, создайте стандартный проект приложения (Standard EXE). 2. Установите настройки окружения проекта на использование библиотеки NI-VISA. Добавьте новый модуль, для этого кликните закладке Existing при добавлении модуля (Project -> Add Existing Item). Найдите файл visa32.bas в папке include, находящейся в каталоге инсталляции NI-VISA, и добавьте его в проект. Это позволит использовать в программе функции и типы данных VISA. 3.1. Пример доступа через USBTMC. Напишите следующую функцию: Private Function Usbtmc_test() As Long ' Этот код демонстрирует синхронную отправку команд чтения и записи ' к класс инструмента тестирования и измерения (USB Test & Measurement ' Class, USBTMC) с использованием NI-VISA. ' Пример записывает строку "*IDN?\n" во все устройства USBTMC, ' подключенные к системе, и пытается прочитать от них ответ функциями ' записи и чтения. Основной алгоритм работы приложения: ' The general flow of the code is ' - Open Resource Manager ' - Open VISA Session к Instrument-у ' - Write запрос Identification Query с помощью функции viWrite ' - Попытка Read ответа (Response) функцией viRead ' Close the VISA Session Const MAX_CNT = 200 Dim defaultRM As Long Dim instrsesn As Long Dim numlnstrs As Long Dim findList As Long Dim retCount As Long Dim writeCount As Long Dim status As Long Dim instrResourceString As String * VI_FIND_BUFLEN Dim Buffer As String * MAX_CNT Dim i As Integer ' Сначала мы должны вызвать viOpenDefaultRM, чтобы получить хендл Менеджера. ' Этот хендл мы сохраним в переменную defaultRM. status = viOpenDefaultRM(defaultRM) If (status < VI_SUCCESS) Then resultTxt.Text = "Could not open a session to the VISA Resource Manager!" Usbtmc_test = status Exit Function End If ' Найдем все ресурсы USB TMC VISA в нашей системе, и сохраним их количество ' в переменной numInstrs. status = viFindRsrc(defaultRM, "USB?*INSTR", findList, numlnstrs, instrResourceString) If (status < VI_SUCCESS) Then resultTxt.Text = "An error occurred while finding resources." viClose (defaultRM) Usbtmc_test = status Exit Function End If ' Теперь мы откроем сессию VISA ко всем инструментам USB TMC. ' Мы должны при этом использовать хендл из переменной viOpenDefaultRM, ' и также должны использовать строку, которая показывает, какой ' инструмент нужно открыть. Эта строка называется описателем ' инструмента (instrument descriptor). Формат этой строки можно найти ' на функциональной панели путем правого клика на параметр дескриптора. ' После открытия сессии к устройству мы получим хендл к инструменту, ' который будем использовать позже в вызовах функций VISA. Параметры ' AccessMode и Timeout функции viOpen зарезервированы для будущего ' использования, и поэтому должны получать значения VI_NULL. For i = 0 To numInstrs If (i > 0) Then status = viFindNext(findList, instrResourceString) End If status = viOpen(defaultRM, instrResourceString, VI_NULL, VI_NULL, instrsesn) If (status < VI_SUCCESS) Then resultTxt.Text = "Cannot open a session to the device " + CStr(i + 1) GoTo NextFind End If ' В этой точке у нас есть открытая сессия к инструменту USB TMC. ' Мы будем использовать функцию viWrite для отправки в устройство ' строки "*IDN?". Это команда, которая запрашивает идентификацию ' у устройства. status = viWrite(instrsesn, "*IDN?", 5, retCount) If (status < VI_SUCCESS) Then resultTxt.Text = "Error writing to the device." status = viClose(instrsesn) GoTo NextFind End If ' Теперь мы попытаемся прочитать обратно данные от устройства, которые ' оно отправит в ответ на запрос идентификации. Для этой цели будем ' использовать функцию viRead. После того, как данные прочитаны, они ' будут отображены. status = viRead(instrsesn, Buffer, MAX_CNT, retCount) If (status < VI_SUCCESS) Then resultTxt.Text = "Error reading a response from the device." + CStr(i + 1) Else resultTxt.Text = "Read from device: " + CStr(i + 1) + " " + Buffer End If ' Закроем сессию к инструменту с помощью функции viClose. status = viClose(instrsesn) NextFind: Next i ' Теперь мы закроем сессию к Менеджеру с помощью функции viClose. ' Эта операция освободит все системные ресурсы. status = viClose(defaultRM) Usbtmc_test = 0 End Function 3.2. Пример функции доступа через TCP/IP: Private Function TCP_IP_Test(ip As String) As Long Dim outputBuffer As String * VI_FIND_BUFLEN Dim defaultRM As Long Dim instrsesn As Long Dim status As Long Dim count As Long ' Сначала нам нужно открыть Менеджер Ресурсов по умолчанию. status = viOpenDefaultRM(defaultRM) If (status < VI_SUCCESS) Then resultTxt.Text = "Could not open a session to the VISA Resource Manager!" TCP_IP_Test = status Exit Function End If ' Теперь откроем сессию к TCP/IP-устройству. status = viOpen(defaultRM, "TCPIP0::" + ip + "::INSTR", VI_LOAD_CONFIG, VI_NULL, instrsesn) If (status < VI_SUCCESS) Then resultTxt.Text = "An error occurred opening the session" viClose (defaultRM) TCP_IP_Test = status Exit Function End If status = viWrite(instrsesn, "*IDN?", 5, count) If (status < VI_SUCCESS) Then resultTxt.Text = "Error writing to the device." End If status = viRead(instrsesn, outputBuffer, VI_FIND_BUFLEN, count) If (status < VI_SUCCESS) Then resultTxt.Text = "Error reading a response from the device." + CStr(i + 1) Else resultTxt.Text = "read from device:" + outputBuffer End If status = viClose(instrsesn) status = viClose(defaultRM) TCP_IP_Test = 0 End Function 3.3. Дополнительные функции управления (обработчики кнопок и подпрограмма выхода): Private Sub exitBtn_Click() End End Sub Private Sub tcpipBtn_Click() Dim stat As Long stat = TCP_IP_Test(ipTxt.Text) If (stat < VI_SUCCESS) Then resultTxt.Text = Hex(stat) End If End Sub Private Sub usbBtn_Click() Dim stat As Long stat = Usbtmc_test If (stat < VI_SUCCESS) Then resultTxt.Text = Hex(stat) End If End Sub Примерно так будет выглядеть окно работающей программы: [Пример MATLAB] Рабочее окружение: Windows 7 32-bit, MATLAB R2010b. Демонстрируется запись и чтение через USBTMC и TCP/IP, как в предыдущем примере. 1. Откройте MATLAB, измените текущую директорию. В этом демонстрационном примере текущая директория была установлена на D:\USBTMC_TCPIP_Demo. 2. Выберите File -> New -> Script для создания пустого M-файла. 3.1. Добавьте в созданный файл код доступа через USB: function USBTMC_test() % Этот код демонстрирует синхронную отправку команд чтения и записи % в USB Test & Measurement Class (USBTMC) инструмента, используя NI-VISA. % Создайте VISA-USB, подключенный к USB-инструменту. vu = visa('ni','USB0::0xF4EC::0xEE38::0123456789::INSTR'); % Откройте созданный объект VISA.
fopen(vu);
% Отправьте строку "*IDN?", запрашивая идентификацию устройства. fprintf(vu,'*IDN?'); % Запрос данных от устройства. outputbuffer = fscanf(vu); disp(outputbuffer); % Закрытие объекта VISA.
fclose(vu);
delete(vu);
clear vu;
end
3.2. Код доступа через TCP/IP: function TCP_IP_test( IPstr ) % Демонстрация синхронной отправки команд чтения и записи % к TCP/IP-инструменту с помощью NI-VISA. % Создание объекта VISA-TCPIP, подключенный к инструменту через % сконфигурированный IP-адрес. vt = visa('ni',['TCPIP0::',IPstr,'::INSTR']); % Открытие созданного объекта VISA.
fopen(vt);
% Отправка строки "*IDN?", запрашивающей идентификацию устройства. fprintf(vt,'*IDN?'); % Получение данных от устройства. outputbuffer = fscanf(vt); disp(outputbuffer); %Закрытие объекта VISA.
fclose(vt);
delete(vt);
clear vt;
end
[Пример LabVIEW] Рабочее окружение: Windows 7 32-bit, LabVIEW 2011. Пример демонстрирует использование NI-VISA для доступа к устройству на запись и чтение через USBTMC и TCP/IP. 1. Откройте LabVIEW, создайте VI-файл. 2. Добавьте элементы управления. Выполните правый клик в интерфейсе Front Panel, выберите и добавьте VISA resource name, error in, error out и несколько индикаторов из столбца органов управления (Controls). 3. Откройте интерфейс Block Diagram. Выполните правый клик на имени ресурса VISA, и Вы сможете выбрать и добавить следующие функции VISA Palette из всплывающего меню: VISA Write, VISA Read, VISA Open и VISA Close. 4. Подключите части схемы друг к другу, как показано на рисунке ниже. 5. Выберите ресурс устройства в диалоге VISA Resource Name, и запустите программу. В этом примере VI (виртуальный инструмент LabVIEW) откроет сессию VISA к устройству USBTMC, запишет команду в устройство, и прочитает обратно ответ. Отправляемая команда настраивается через запрос к устройству по его идентификатору (device ID query). Проверьте правильность установки идентификатора и отправляемой команды по руководству прибора (команды генераторов сигналов SDG/АКИП см. в [3]). После завершения всех коммуникаций VI закроет сессию VISA. 6. Обмен с устройством через TCP/IP осуществляется так же, как и через USBTMC. Но для этого нужно поменять функции VISA Write и VISA Read на синхронный ввод/вывод, Synchronous I/O (LabVIEW по умолчанию использует асинхронный ввод/вывод). Выполните правый клик на узле, и выберите Synchronous I/O Mod -> Synchronous из меню, чтобы записывать и читать данные синхронно. 7. Подключите части схемы друг к другу, как показано на рисунке ниже. 8. Введите IP-адрес и запустите программу. Вы можете получить исходный код этих примеров на сайте siglent.com. Код примеров .NET (C#) скачайте по ссылке [6]. [Ссылки] 1. SIGLENT function / arbitrary waveform generators site:siglent.com. |