![]() |
Библиотека RshUniDriver
SDK 2.1
Документация по программированию
|
Данная статься относится в большей степени к высокочастотным устройствам сбора данных с собственной памятью (см. RSH_CAPS_SOFT_INIT_MEMORY). Данные устройства, как правило, имеют дополнительные возможности для запуска преобразования по какому-либо событию. Настройка параметров сбора данных, и, в том числе, параметров синхронизации осуществляется посредством структуры инициализации RshInitMemory.
Выбирая способ запуска устройства (поле RshInitMemory::startType) и комбинируя его с другими параметрами (предыстория, задержка старта, гистерезис) можно получить различные варианты работы устройства. Временные диаграммы работы в различных режимах приведены на рисунке:
Размер предыстории задается в поле RshInitMemory::preHistory как целое число от 0 до 15. Весь буфер (заданный объем памяти, RshInitMemory::bufferSize делится на 16 частей, а RshInitMemory::preHistory определяет, сколько этих частей будет использоватья под предысторию, а сколько - под данные. Если размер предыстории равен нулю, весь буфер будет состоять из данных, записанных после прихода события синхронизации. Если же, например, задан размер предыстории 4, 4/16 буфера (четверть) будет занята предысторией, а оставшаяся часть - основными данными.
Принцип работы устройства в режиме синхронизации с предысторией приведен на схеме:
После получения команды IRshDevice::Start() данные постоянно оцифровываются и пишутся в кольцевой буфер. Как только приходит событие синхронизации, дописывается нужный размер (размер буфера за вычетом размера предыстории) и после этого данные отправляются из внутренней памяти устройства в компьютер. Чтобы узнать, поддерживает ли устройство возможность записи предыстории, нужно проверить флаг RSH_CAPS_DEVICE_PREHISTORY.
Задержка старта позволяет отсрочить запуск сбора данных относительно момента срабатывания синхронизации. Это полезно, если нужно, к примеру, отследить отклик на какое-то воздействие, который значительно (не хватит буфер чтобы записать весь сигнал) отстоит от этого воздействия. Задать задержку старта можно в поле RshInitMemory::startDelay. Данная возможность поддерживается не всеми устройствами. Необходимо проверить наличие флага возможностей RSH_CAPS_DEVICE_START_DELAY.
Используя поле RshInitMemory::hysteresis можно добавить "гистерезис" в схему поиска точки срабатывания синхронизации (точка перехода). Данная опция актуальна только при использовании цифровой синхронизации - как правило, данная схема реализована при использовании в качестве источника синхронизации аналоговых входов.
Схема синхронизации с использованием гистерезиса приведена на рисунке (предполагается, что задан некий уровень и ожидается синхронизация по фронту сигнала):
Без использования гистерезиса любой переход через заданный порог вызовет событие синхронизации. Это может привести к ложным срабатываниям, например из-за "дребезга" оцифровки, когда значение скачет вверх-вниз на один или два МЗР. Включив же гистерезис (для этго нужно задать в поле RshInitMemory::hysteresis значение больше нуля, в диапазоне 0-20), можно добиться четкого срабатывания: сигнал должен не только пересечь пороговый уровень, но и превысить дополнительный (как раз и определяемый заданным значением гистерезиса) порог. Если, допустим, сигнал привысил порог, но так и не достиг уровня порог+гистерезис, события синхронизации не произойдет.
Чтобы узнать, поддерживает ли устройство возможность задания гистерезиса нужно проверить флаг RSH_CAPS_DEVICE_HYSTERESIS.
1.8.4