MrGalaxy
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Нашёл вот такой пример в сети: http://www.home.agilent.com/owc_discussions/message.jspa?messageID=48564 На его основе накропал следующий код: Код: function viOpenDefaultRM(rm: PInteger) : Integer; stdcall; external 'visa32.dll'; function viFindRsrc(RM: Integer; Res: PChar; PfindList, PnumInstrs: PInteger; Resource: PChar): Integer; stdcall; external 'visa32.dll'; function viFindNext(findList: Integer; Resource: PChar) : Integer; stdcall; external 'visa32.dll'; function viOpen(RM: Integer; ResourceName: pChar; AccessMode,TimeOut: Integer; vi: PInteger): Integer; stdcall; external 'visa32.dll'; function viClose(VI: Integer): Integer; stdcall; external 'visa32.dll'; function viRead(VI: Integer; Buffer: pChar; Count: Integer; RetCount: Pinteger): Integer; stdcall; external 'visa32.dll'; function viWrite(VI: Integer; Buffer: pChar; Count: Integer; RetCount: Pinteger): Integer; stdcall; external 'visa32.dll'; var Form1: TForm1; implementation var buf: array[0..127]of char; // Буфер R/W RM: integer; numInstrs: Integer; findList: Integer; V7_78: integer; // VI {$R *.dfm} //--------------------------------------------------------------------// //---------------- Инициализация интерфейса USB В7-78/1 --------------// //--------------------------------------------------------------------// procedure TForm1.Button1Click(Sender: TObject); var Resource: array[0..127]of char; Status: integer; RetCount: integer; SerN_: PChar; begin // Открытие сессии NI VISA viOpenDefaultRM(@RM); // Поиск прибора по серийному номеру SerN_:=PChar('?*'+LabeledEdit1.Text+'?*'); viFindRsrc(RM, SerN_, @findList, @numInstrs, Resource); // viFindNext (findList, buf); // Если приборов несколько Status:= viOpen(RM, Resource, 0, 0, @V7_78); Sleep(100); // Перевод В7-78/1 в режим ДУ buf:='SYSTem:REMote'; Status:= viWrite(V7_78, buf, 13, @RetCount); // Установка В7-78/1 в начальное состояние: buf:='*RST; *CLS; DISPlay ON; DISPlay:TEXT:CLEar'; Status:= viWrite(V7_78, buf, 42, @RetCount); end; //--------------------------------------------------------------------// //--------------------------- Измерение В7-78 ------------------------// //--------------------------------------------------------------------// procedure TForm1.Button3Click(Sender: TObject); var s1: string; Status: integer; RetCount: integer; begin buf:='READ?'; // Запись в В7-78/1 команды Status:= viWrite(V7_78, buf, 5, @RetCount); // Считывание с В7-78/1 Status:= viRead(V7_78, buf, 128, @RetCount); s1:=buf; if pos(Char($0A),s1)<>0 // В принципе, можно и без этого, по USB признак конца строки не передаётся почему-то then s1:=copy(s1,1,pos(Char($0A),s1)-1); Edit2.Text:=s1; end; | hmarius У Вас нет описания подпрограмм, входящих в библиотеку visa32.dll? Какие параметры для чего предназначены. К сожалению, в руководстве программиста для visa32.dll этого нет, а в visa.h и visatype.h мне понятно не всё (в С я - полный профан). |