Последовательные опросы

Использование функции spoll

Можно выполнить последовательный опрос с помощью spoll функция. При последовательном опросе контроллер просит (опрашивает) каждого адресуемый прослушиватель отправить назад байт состояния, который указывает, задал ли он линию SRQ и нуждается в обслуживании. Седьмой бит этого байта (бит RQS) устанавливается, если инструмент запрашивает обслуживание.

Контроллер выполняет следующие шаги для каждого адресуемого прослушивателя:

  1. Прослушиватель адресован для разговора, и отправляется байт команды Serial Poll Enable (SPE).

  2. Значение линии ATN устанавливается высоким, и Прослушиватель возвращает байт состояния.

  3. Значение линии ATN устанавливается низким, и байт команды «Отключение последовательного опроса» (SPD) посылается, чтобы завершить последовательность опроса.

Для получения дополнительной информации о линиях GPIB и битах RQS см. раздел «Отчеты о состоянии и событиях».

Выполнение последовательного опроса

В этом примере показано, как выполнить последовательный опрос для генератора Keysight™ 33120A функции и Tektronix® осциллограф TDS 210. При этом в примере показано, как сконфигурировать многие биты состояния, описанные в Standard Event Status Register:

  1. Создайте объекты инструмента - Создайте объект GPIB, сопоставленный с генератором функции Keysight 33120A по первичному адресу 1.

    g1 = gpib('ni',0,1);

    Создайте объект GPIB, сопоставленный с осциллографом Tektronix TDS 210 по первичному адресу 2.

    g2 = gpib('ni',0,2);
  2. Соедините с прибором - Соедините g1 и соедините g2 к осциллографу.

    fopen([g1 g2])
  3. Сконфигурируйте значения свойств - Сконфигурируйте оба объекта на тайм-аут через 1 секунду.

    g1.Timeout = 1;
    g2.Timeout = 1;
  4. Запись и чтение данных - настройте генератор функции для запроса услуги при возникновении ошибки команды.

    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 =
    ''
  5. Отсоедините и очистите - когда вам больше не нужно g1 и g2, следует отсоединить их от приборов, и удалить их из памяти и из MATLAB® рабочей области.

    fclose([g1 g2])
    delete([g1 g2])
    clear g1 g2