6. Синхронизация измерения

Синхронизация измерения является одним из важнейших аспектов, которые необходимо принимать во внимание при написании приложений дистанционного управления. Несоблюдение этого аспекта приводит к непредсказуемому поведению вашей программы, неповторяемым результатам и множеству отрицательных эмоций. Явным признаком неверной синхронизации измерения является ситуация, когда вам приходится вставлять постоянные паузы в ваше приложение, чтобы запустить его.

Для начала давайте определим понятие синхронизация измеренияв рамках данного раздела:

Современные измерительные приборы представляют собой сложные устройства с собственной операционной системой. Ваше измерительное приложение не должно непрерывно контролировать состояние прибора. С помощью синхронизации измерения вы можете гарантировать, что в важных точках вашей программы (SyncPoints, точки синхронизации) ваш прибор находится в ожидаемом состоянии.

Пример синхронизации измерения для осциллографа и испытуемого устройства, генерирующего непериодический сигнал:

CH6_MeasSyncWithScope_16x9.png

Как показано на рисунке выше, в вашей программе имеются неактивные интервалы, в которых происходит ожидание готовности прибора. Эти интервалы ожидания имеют динамическую длину. Они должны подстраиваться под различные условия (например, скорость вашего ПК, различные значения времени установления и времени сбора данных на приборе). Как достичь этого? В идеальном случае прибор сообщает вам о своей готовности. После дополнительных примечаний будут рассмотрены различные методы синхронизации.

Дополнительные примечания:

  • Прибор (осциллограф, анализатор спектра, измеритель мощности и пр.) всегда должен работать в режиме одиночного сбора данных. Только в этом случае вы можете быть уверены в том, что ваши результаты измерений получены от последнего завершенного сбора данных, а не от предыдущего или незавершенного сбора данных. Особенно важно помнить, что все методы синхронизации правильно работают только в режиме одиночного сбора данных.
  • Базовые настройки и настройки запуска не требуют синхронизации. Единственная важная ключевая точка находится в конце, когда вы хотите убедиться в том, что были применены все настройки (точка синхронизации "SettingsApplied").
  • После поступления запуска осциллограф начинает сбор данных. Ваша программа должна дождаться завершения сбора данных (точка синхронизации "AcquisitionFinished").
  • Считывание осциллограммы после этой точки синхронизации гарантирует, что результаты получены из последнего сбора данных.

Обзор механизмов синхронизации

В следующих четырех разделах мы рассмотрим различные механизмы синхронизации, начиная с самого простого:

  • Запрос *OPC?
  • Опрос байта состояния (STB)
  • Ожидание служебного запроса (SRQ)
  • Событие служебного запроса (SRQ)

Синхронизация по запросу *OPC?

Это самый простой и часто используемый метод синхронизации.

Когда вы отправляете запрос *OPC? на прибор, он откладывает ответ, пока не будут завершены все текущие операции. Поэтому интервалы ожидания в вашей программе находятся в операциях чтения VISA, когда программа ожидает от прибора ответ на запрос *OPC? . Здесь важен не ответ, а связанное с ним время ожидания.

Внимание! *OPC? является запросом, поэтому не забудьте считать ответ прибора с помощью функции VISA Read(). В противном случае прибор генерирует ошибку "Query Interrupted" (запрос прерван) при последующем запросе. Это важно помнить не только для запроса *OPC? , но и для всех остальных запросов.

Здесь следует упомянуть дополнительный параметр VISA Timeout. Таймаут VISA предоставляет механизм, с помощью которого вы можете определить максимальное время ожидания в операциях чтения VISA, по истечении которого формируется ошибка таймаута VISA. Это индивидуальное значение зависит от длительности вашей текущей задачи, поэтому необходимо правильно задать таймаут VISA. Слишком малый таймаут приводит к нежелательным ошибкам во время нормальной работы, а слишком большой таймаут предотвращает реакцию вашей программы при возникновении реальных ошибок.

Преимущества:

  • Простота и эффективность в большинстве ситуаций.
  • Не использует канал управления сеанса (см. метод опроса STB), поэтому также подходит для соединений RawSocketи последовательныхсоединений.

Недостатки:

  • Блокирует связь с прибором до получения ответа. Это может быть критично при длительных операциях, т. к. приложение не реагирует.

Синхронизация путем опроса байта состояния (STB)

Данный метод применяется в драйверах приборов Rohde & Schwarz. Если вы используете прямые команды SCPI, в конце этого раздела вы найдете примеры реализации. Сначала давайте рассмотрим блок-схему процедуры. Объяснение последует далее.

Чтобы понять блок-схему, необходимо рассмотреть подсистему состояния прибора— иерархическую структуру регистров, во главе которой находится регистр байта состояния(STB, Status Byte). Этот 8-битный регистр определен стандартом IEEE 488.2. Каждый бит регистра имеет различное значение и служит сводным флагом для прочих регистров, находящихся на нижних ступенях иерархии. Полная структура подсистемы состояния приводится во всех руководствах пользователя по дистанционному управлению приборами Rohde & Schwarz (поиск по слову "Status Byte" или "байт состояния"). Далее на рисунке представлены регистр байта состояния и регистр состояния событий(ESR, Event Status Register):

  • Первая операция на блок-схеме устанавливает фильтр ESEна 1 (бит 0 = 1). Это означает, что нас интересует только ESR бит 0 – OPC. Достаточно отправить эту команду один раз после установления соединения или после команды *RST.
  • Следующая операция запрашивает значение регистра ESR с помощью команды *ESR?. Это регистр события, т. е. его значение очищается при считывании. ESR бит 0 – OPC сбрасывается на 0.
  • Следующая операция передает команду, которую вы хотите синхронизировать. В данном примере это SCPI-команда SING, которая подготавливает осциллограф к единичному сбору данных. *OPC (без вопросительного знака!) в конце строки сообщает прибору: после завершения выполнения всех команд в этой строке необходимо установить ESR бит 0 – OPCна 1. По этой причине требуется предварительный сброс этого бита на 0. Бит может быть установлен на 1 какими-либо предыдущими операциями, и, если не сбросить его на 0, опрос STB завершится с ошибкой после первой итерации.
  • Следующей операцией является цикл опроса байта состояния. Байт состояния запрашивается до тех пор, пока бит 5 – сводка состояния событияне будет установлен на 1. Значение байта состояния можно получить двумя способами: с помощью SCPI-команды *STB?или специальной функции VISA ReadSTB(). Чем они отличаются? *STB? — это стандартная SCPI-команда, которая использует буферы ввода-вывода VISA. Функция ReadSTB() работает по отдельному каналу управленияи не конкурирует со стандартными операциями записи и чтения SCPI. Она также оптимизирована для меньшего времени отклика. Мы рекомендуем включить в этот цикл прогрессивную задержку опроса. Например, без задержки первые 10x, затем задержка 1 мс следующие 100x, задержка 10 мс следующие 1000x и т. д. Во избежание бесконечных циклов в драйверах приборов Rohde & Schwarz применяется таймаут OPC.
  • После завершения цикла ESR бит 0 – OPC вновь сбрасывается с помощью SCPI-команды *ESR?

Преимущества:

  • Не блокируется связь с прибором. Параллельно можно отправлять команды SCPI и получать ответы.
  • Подходит для длительных операций. Например, автоюстировка или самодиагностика.

Недостатки:

  • Сложность реализации.
  • Не подходит для соединений RawSocket и последовательных соединений, т. к. они не поддерживают функцию канала управления VISA ReadSTB().

Расширенные методы с применением служебного запроса (SRQ)

Синхронизация путем ожидания служебного запроса (SRQ)

Этот метод работает аналогично синхронизации путем опроса байта состояния, однако вместо опроса байта состояния здесь используется функция VISA WaitOnEvent(), которая настроена на ожидание события служебного запроса. Примеры для данного типа синхронизации приводятся в конце раздела.

Чтобы использовать этот метод, вам необходимо:

  • Один раз выполнить настройку после сброса *ESE 1;*SRE 32(см. выше схему регистров подсистемы состояния прибора). При этом задается фильтр ESE, который реагирует только на бит OPC в регистре ESR по аналогии с предыдущим методом опроса байта состояния. "*SRE 32" задает фильтр SRE, который генерирует служебный запрос, если бит сводки состояния события в регистре STB установлен на 1.
  • Перед отправкой команды, для которой требуется синхронизация, следует активировать событие служебного запроса с помощью функции VISA EnableEvent().
  • Отправить команду, для которой требуется синхронизация, с ;*OPCна конце.
  • Вызвать функцию VISA WaitOnEvent(). Функция ожидает поступления события служебного запроса или истечения времени выдержки.
  • Деактивировать событие служебного запроса с помощью функции VISA DisableEvent().

Преимущества:

  • По сравнению с предыдущим методом, не требуется реализация цикла опроса байта состояния.
  • Трассировка ввода-вывода короче и лучше читается.

Недостатки:

  • Работа приложения в LabVIEW и MATLAB не может быть прервана во время выполнения функции VISA WaitOnEvent(). Это может стать проблемой в случаях, когда для выполнения команды требуется длительное время (например, запрос самодиагностики *TST?).
  • Не подходит для соединений RawSocket и последовательных соединений.

Синхронизация по событию служебного запроса (SRQ)

Основная идея заключается в том, что вы инициируете задачу прибора и переключаетесь на какую-либо другую задачу. Когда прибор завершает выполнение задачи, VISA вызывает выбранную вами функцию. Эта функция носит название обработчик событий.

Примеры для данного типа синхронизации в C# и LabWindows/CVI приводятся в конце раздела.

Чтобы использовать метод синхронизации по событию служебного запроса, вам необходимо:

  • Один раз выполнить настройку после сброса *ESE 1;*SRE 32(см. выше схему регистров подсистемы состояния прибора). При этом задается фильтр ESE, который реагирует только на бит OPC в регистре ESR по аналогии с предыдущим методом опроса байта состояния. *SRE 32задает фильтр SRE, который генерирует служебный запрос, если бит сводки состояния событияв регистре STBустанавливается на 1.
  • Перед отправкой команды, для которой требуется синхронизация, следует зарегистрировать вашу функцию обратного вызова с помощью функции VISA InstallHandler()и активировать механизм служебного запроса с помощью функции VISA EnableEvent().
  • Отправить команду, для которой требуется синхронизация, с ;*OPCна конце. После завершения выполнения команды VISA вызывает зарегистрированную вами функцию.

Преимущества:

  • Возможность параллельного выполнения других задач.
  • Идеально подходит для многопоточных приложений.

Недостатки:

  • Сложность реализации.
  • Не подходит для соединений RawSocket и последовательных соединений.
  • Не поддерживается в LabVIEW и MATLAB.

Примеры прямых команд SCPI

Примеры описываемой выше измерительной задачи с синхронизацией по запросу *OPC? плюс:

  • Синхронизация путем опроса байта состояния
  • Синхронизация путем ожидания служебного запроса
  • Синхронизация по событию служебного запроса (в Python, C# и LabWindows/CVI)

Примеры драйверов приборов

Примеры описываемой выше измерительной задачи:

Request information

Do you have questions or need additional information? Simply fill out this form and we will get right back to you.

Ваш запрос отправлен. Мы свяжемся с вами в ближайшее время.
An error is occurred, please try it again later.