Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Программирование USB через библиотеки NI VISA в Делфи

Автор: MrGalaxy
Дата сообщения: 21.11.2013 13:34
День добрый!
У кого есть подобный опыт?
Прибор подключается по USB без эмуляции COM-порта.
На сайте NI примеры только для С. Задавал им вопрос, но получил формальную отписку.



Уважаемые модераторы!
Какой-то глюк вылез при создании темы. Тема должна называться "Программирование USB через библиотеки NI VISA в Делфи". Исправьте, пожалуйста. Заранее благодарен.
Автор: hmarius
Дата сообщения: 24.11.2013 08:14
Опыта для конкретно этого нет. Есть опыт с другими устройствами. Вроде разницы особой быть не должно. Если есть примеры - прикрепите сюда. Посмотрю - может чего присоветую
Автор: MrGalaxy
Дата сообщения: 25.11.2013 08:25
Нашёл вот такой пример в сети:
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
Дата сообщения: 25.11.2013 10:44
Дальше фнукции 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/

Страницы: 1

Предыдущая тема: PHP: Архивация директории


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.