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

Используя Функцию spoll

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

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

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

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

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

Обратитесь к Состоянию и Событию, Сообщающему для получения дополнительной информации о линиях шины GPIB и бите RQS.

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

Этот пример показывает вам, как выполнить последовательный опрос для функционального преобразователя на 33120 А Keysight™ и осциллографа Tektronix® TDS 210. При этом пример показывает вам, как сконфигурировать многие биты состояния, описанные в Стандартном Регистре состояния События:

  1. Создайте инструментальные объекты — Создают объект GPIB, сопоставленный с функциональным преобразователем Keysight 33120 А в первичном адресе 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