Можно выполнить последовательный опрос с помощью spoll
функция. При последовательном опросе контроллер просит (опрашивает) каждого адресуемый прослушиватель отправить назад байт состояния, который указывает, задал ли он линию SRQ и нуждается в обслуживании. Седьмой бит этого байта (бит RQS) устанавливается, если инструмент запрашивает обслуживание.
Контроллер выполняет следующие шаги для каждого адресуемого прослушивателя:
Прослушиватель адресован для разговора, и отправляется байт команды Serial Poll Enable (SPE).
Значение линии ATN устанавливается высоким, и Прослушиватель возвращает байт состояния.
Значение линии ATN устанавливается низким, и байт команды «Отключение последовательного опроса» (SPD) посылается, чтобы завершить последовательность опроса.
Для получения дополнительной информации о линиях GPIB и битах RQS см. раздел «Отчеты о состоянии и событиях».
В этом примере показано, как выполнить последовательный опрос для генератора Keysight™ 33120A функции и Tektronix® осциллограф TDS 210. При этом в примере показано, как сконфигурировать многие биты состояния, описанные в Standard Event Status Register:
Создайте объекты инструмента - Создайте объект GPIB, сопоставленный с генератором функции Keysight 33120A по первичному адресу 1.
g1 = gpib('ni',0,1);
Создайте объект GPIB, сопоставленный с осциллографом Tektronix TDS 210 по первичному адресу 2.
g2 = gpib('ni',0,2);
Соедините с прибором - Соедините g1
и соедините g2
к осциллографу.
fopen([g1 g2])
Сконфигурируйте значения свойств - Сконфигурируйте оба объекта на тайм-аут через 1 секунду.
g1.Timeout = 1; g2.Timeout = 1;
Запись и чтение данных - настройте генератор функции для запроса услуги при возникновении ошибки команды.
fprintf(g1,'*CLS'); fprintf(g1,'*ESE 32'); fprintf(g1,'*SRE 32');
Сконфигурируйте осциллограф, чтобы запросить обслуживание при возникновении командной ошибки.
fprintf(g2,'*CLS') fprintf(g2,'*PSC 0') fprintf(g2,'*ESE 32') fprintf(g2,'DESE 32') fprintf(g2,'*SRE 32')
Определить, требуется ли обслуживание какого-либо прибора.
spoll([g1 g2]) ans = []
Запросите значение напряжения для каждого прибора.
fprintf(g1,'Volt?') fprintf(g2,'Volt?')
Определите, произвел ли какой-либо инструмент ошибку из-за предыдущего запроса.
out = spoll([g1 g2]);
Потому что Volt?
является недопустимой командой для осциллографа, запрашивает сервис.
out == [g1 g2] ans = 0 1
Потому что Volt?
является действительной командой для генератора функции, значение успешно считывается.
volt1 = fscanf(g1) volt1 = +1.00000E-01
Однако операция считывания осциллографа истекает через 1 секунду.
volt2 = fscanf(g2) Warning: GPIB: NI: An I/O operation has been canceled, most likely due to a timeout. volt2 = ''
Отсоедините и очистите - когда вам больше не нужно g1
и g2
, следует отсоединить их от приборов, и удалить их из памяти и из MATLAB® рабочей области.
fclose([g1 g2]) delete([g1 g2]) clear g1 g2