Подключение GPIB к внешнему устройству с помощью MATLAB
Есть ли способ установить соединение GPIB с использованием MATLAB без ящика для инструментов? (У меня его нет). Кроме того, есть ли у MATLAB способ узнать значения параметров RS232 внешнего устройства (скорость передачи, стоп-бит и т. Д.). Для подключения RS232 у меня есть следующий код:
% This function is meant to send commands to Potentiostat Model 263A.
% A run includes turning the cell on, reading current for time t1, turning
% the cell off, waiting for time t2.
% t1 is the duration [secs] for which the Potentiostat must run (cell is on)
% t2 is the duration [secs] to on after off
% n is the number of runs
% port is the serial port name such as COM1
function [s] = Potentiostat_control(t1,t2,n)
port = input('type port name such as COM1', 's')
s = serial(port);
set(s,'BaudRate', 9600, 'DataBits', 8, 'Parity', 'even', 'StopBits', 2 ,'Terminator', 'CR/LF');
fopen(s)
%fprintf(s,'RS232?')
disp(['Total runs requested = ' num2str(n)])
disp('i denotes number of runs executed so far..');
for i=1:n
i
%data1 = query(s, '*IDN?')
fprintf(s,'%s','CELL 1'); % sends the command 'CELL 1'
%fprintf(s,'%s','READI');
pause(t1);
fprintf(s,'%s','CELL 0');
%fprintf(s,'%s','CLEAR');
pause(t2);
end
fclose(s)
3 ответа
На ваш вопрос о GPIB поставляется ли карта GPIB с вызываемой библиотекой (DLL, если вы используете Windows)? Matlab имеет интерфейс для вызова внешних библиотек. Основная процедура состоит в том, чтобы Matlab анализировал заголовочный файл, используя LOADLIBRARY
, затем просмотрите доступные функции, используя LIBFUNCTIONS
и вызывать функции, используя CALLLIB
,
Что касается вашего вопроса RS232, я не думаю, что какая-либо сторона может узнать параметры стороны устройства без внешней документации.
Я использую National Instruments VISA и NI 488.2.
Сначала убедитесь, что вы проверили VisaNS.NET API
в настройке NI-VISA см. следующий рисунок:
Я использую NationalInstruments.VisaNS.MessageBasedSession
через интерфейс.NET от MATLAB.
Я написал следующий класс MATLAB, который переносит NI VISA в MATLAB:
classdef Visa
properties
vi
SrqMask
SrqTimeout
end
methods
function obj = Visa(resourceName)
NET.addAssembly('NationalInstruments.VisaNS');
obj.vi = NationalInstruments.VisaNS.MessageBasedSession(resourceName);
obj.SrqMask = '*CLS;*ESE 1;*SRE 32';
obj.SrqTimeout = 10000;
end
function obj = delete(obj)
obj.vi.Dispose();
end
function obj = Dispose(obj)
obj.vi.Dispose();
end
function obj = Write(obj, data)
obj.vi.Write(data);
end
function data = ReadString(obj)
data = char(obj.vi.ReadString());
end
function data = ReadByteArray(obj)
data = obj.vi.ReadByteArray();
end
function data2 = Query(obj, data)
data2 = char(obj.vi.Query(data));
end
function obj = SrqBegin(obj)
obj.vi.EnableEvent(NationalInstruments.VisaNS.MessageBasedSessionEventType.ServiceRequest, ...
NationalInstruments.VisaNS.EventMechanism.Queue);
obj.vi.DiscardEvent(NationalInstruments.VisaNS.MessageBasedSessionEventType.ServiceRequest);
obj.Write(obj.SrqMask);
end
function status = SrqEnd(obj)
evt = obj.vi.WaitOnEvent(NationalInstruments.VisaNS.MessageBasedSessionEventType.ServiceRequest, ...
obj.SrqTimeout);
evt.Dispose();
status = obj.vi.ReadStatusByte();
obj.vi.DisableEvent(NationalInstruments.VisaNS.MessageBasedSessionEventType.ServiceRequest, ...
NationalInstruments.VisaNS.EventMechanism.Queue);
end
function obj = SrqWrite(obj, data)
obj.SrqBegin();
obj.Write(data);
obj.SrqEnd();
end
function data2 = SrqQuery(obj, data)
obj.SrqBegin();
obj.Write(data);
obj.SrqEnd();
data2 = obj.ReadString();
end
end
end
Я также добавил несколько методов для обработки запроса SRQ.
С помощью следующего кода вы можете управлять инструментом GPIB, например:
resourceName = 'GPIB0::20::INSTR'; % GPIB adapter 0, Instrument address 20
vi = Visa(resourceName);
idn = vi.QueryString('*IDN?');
MessageBasedSession
может использоваться для связи с вашим прибором через GPIB, Ethernet или USB.
Смотрите также /questions/9833268/c-visual-studio-komandyi-gpib/9833279#9833279.
Я не знаю о параметрах RS232, но для прибора с tcpip вы можете отправлять команды SCPI очень просто.
Вот пример, где я отправляю команду SCPI в инстанции Rohde&Schwarz. Виза или IVI не нужны. Используйте порт 5025.
t = tcpip('147.214.90.136', 5025);
fopen(t);
fprintf(t, '*IDN?');
fprintf(1, DataReceived)
Затем закройте соединение, когда вы закончите:
fclose(t);
delete(t);
clear t