Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование USB через библиотеки NI VISA в Делфи

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

MrGalaxy



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
День добрый!
У кого есть подобный опыт?  
Прибор подключается по USB без эмуляции COM-порта.
На сайте NI примеры только для С. Задавал им вопрос, но получил формальную отписку.
 
 
 
Уважаемые модераторы!
Какой-то глюк вылез при создании темы. Тема должна называться "Программирование USB через библиотеки NI VISA в Делфи". Исправьте, пожалуйста. Заранее благодарен.

Всего записей: 1868 | Зарегистр. 11-01-2007 | Отправлено: 15:34 21-11-2013 | Исправлено: ShIvADeSt, 10:18 22-11-2013
hmarius

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Опыта для конкретно этого нет. Есть опыт с другими устройствами. Вроде разницы особой быть не должно. Если есть примеры - прикрепите сюда. Посмотрю - может чего присоветую

Всего записей: 5 | Зарегистр. 17-10-2003 | Отправлено: 10:14 24-11-2013
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 мне понятно не всё (в С я - полный профан).

Всего записей: 1868 | Зарегистр. 11-01-2007 | Отправлено: 10:25 25-11-2013
hmarius

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Дальше фнукции dll можно взять из - сразу нашел в сети

Код:
 
Я смотрю тема не самая актуальная и отвечать на неё ни кто не рвётся. Поэтому кратко сообщаю о своём способе, которым мне удалось решить эту проблему:
 
Для подключения вольтметра использовал библиотеку visa32.dll от National Instruments.
Вот заголовочный файл для неё (к сожалению только на C#):
http://github.com/romul/Measurement-Studio/blob/20a30c21b9622773de2bb2ea49347097d42fbdd3/Voltmeter/visa32.cs
 
Пример использования этой библиотеки в коде компонента для работы с вольтметром В7-78/1 следующий
http://github.com/romul/Measurement-Studio/blob/20a30c21b9622773de2bb2ea49347097d42fbdd3/Voltmeter/VoltmeterControl.cs
 
Смотрите функции Connect, SendCmd, GetData и Disconnect.
 
Описание библиотеки на http://www.ni.com/visa/
 

Заголовки для функций dll взять отсюда http://github.com/romul/Measurement-Studio/blob/20a30c21b9622773de2bb2ea49347097d42fbdd3/Voltmeter/visa32.cs

Всего записей: 5 | Зарегистр. 17-10-2003 | Отправлено: 12:44 25-11-2013
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование USB через библиотеки NI VISA в Делфи


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru