пятница, 19 февраля 2016 г.

Просмотр регистраций осциллографов Tektronix MSO-40xx

Парк контрольно-измерительных приборов нашей лаборатории пополнился цифровым осциллографом Tektronix MSO-4054. Хороша железка, но стандартное ПО не обеспечивает должного комфортного просмотра и работы с записанными осциллограммами. Мало того, объем памяти на 10 млн точек при частоте выборок до 5 гигасэмплов создает просто огромнейшие файлы архивов, которые хоть и идут в классическом текстовом формате CSV, но требуют немалых оперативных ресурсов ПК при открытии в том же Excel-е (при RAM 4GB до 10-ти минут только на прорисовку). В контексте предыдущей разработки по выборке и визуализации регистраций с осциллографов Agilent, было решено прокачать наш бенчмарк в части всеядности архивов осциллографов двух вендоров (отличия в CSV лишь в шапке). Нюансы под катом...

Попутно пришлось решить* следующую проблему - при выборке регистраций с числом точек более сотни тысяч (а их порядок легко переваливает десятки и сотни миллионов точек на длительности 0.2 сек) и их визуализации на тренде очень хорошо съедается RAM. Это неверный подход как с точки зрения проектирования приложения, так и рационального использования ресурсов. Ведь нет никакого смысла выводить тренд с количеством точек большим разрешения экрана вашего монитора и тем более хранить их в памяти. Простой пример: разрешение вашего монитора по-горизонтали 1920 пкс, по-вертикали 1080 пкс, а количество точек в тренде 10 млн. Вы просто их не увидите физически. Так зачем их пихать в контейнер тренда? Правильно, нет никакого смысла. Необходимо прореживание выборок с поиском характерных экстремумов.
* Собственно, уже решил 15 лет тому назад при работе с БД 6-ти месячной длительности от SCADA TraceMode и сотней каналов I/O через урезанные SQL-запросы и визуализацией трендов в своих приложениях. Так что расписываю так подробно для тех, кто с этим уже столкнулся или столкнется в будущем.

 Алгоритм выборки и визуализации трендов в бенчмарке следующий:
  1. Сканируем весь архив через файловые потоки для определения количества точек регистраций по всем каналам. С цифровыми осциллографами все проще - их регистрация в CSV-файле содержится в виде амплитуд всех каналов в одной строке с одной временной меткой, отделенных запятыми. Таких строк - неограниченное число. Таким образом по-горизонтали количество точек по каналам АЦП одинаковое.
  2. Определяем текущее разрешение экрана пользователя и расчитываем количество интервалов STEP, в каждом из которых будем производить поиск максимального пика (экстремума) по модулю. Количество экстремумов равно количеству сканируемых интервалов, т.е. отображаемых точек на экране. Фактически, какой бы временной интервал не выбрал пользователь для визуализации, количество точек на экране для каждого канала не превысит разрешения монитора по-горизонтали. Т.е. размер архива с регистрациями не имеет значения, будь он хоть пару килобайт, хоть десяток гигабайт. 
  3. Парсим регистрацию и выдаем в тренд максимальный экстремум из каждого интервала STEP при проходе по всей длине временной выборки.
  4. Пользователь видит на экране прореженный архив по времени начала и конца записи.
  5. При необходимости более подробного просмотра участка тренда, пользователь выделяет необходимый участок на экране левой кнопкой мыши и клавишами навигации +/-/Left/Right. Алгоритм определяет новый минимум и максимум временного участка и производит новый перерасчет необходимого интервала STEP, но уже для конкретной временной выборки, которую парсер и визуализирует на экране. Таким образом, малый участок из большего тренда с N-точками разворачивается на весь тренд с подгрузкой ранее прореженных точек по каждому из каналов до разрешения экрана пользователя.
  6. Пользователь имеет возможность вернуть картинку тренда в исходное состояние, выполнив UnZoom или отмену через "горячую клавишу" Escape, либо загрузив регистрации заново.
  7. Пользователь имеет возможность экспорта и печати картинки тренда.
  8. Пользователю доступны файлы регистраций как осциллографов Agilent, так и Tektronix.
  9. В пределах каждого канала по всему полю тренда проводится визуализация "бегающими маркерами" с отображением амплитудно-временных параметров и номера точки (с возможностью выбора абсолютных или относительных показателей амплитуды по-вертикали согласно сдвигу каналов относительно нуля).
  10. Количество отображаемых каналов на тренде неограниченно, но управление сдвигом по-вертикали доступно для 4-х (для самых распространенных моделей).
забрать бенчмарк себе.

Ссылки по тематике
  1. Реализация "бегающих" маркеров и линейки над стандартным TChart 
  2. Просмотр регистраций осциллографов Agilent MSO-60xx 
  3. Просмотр регистраций осциллографов Tektronix MSO-40xx
  4. Анализатор спектра регистраций осциллографов Agilent MSO-60хх/Tektronix MSO-40хх
  5. Интерактивные маркеры для анализатора спектра регистраций осциллографов Agilent MSO-60хх/Tektronix MSO-40хх
 

9 комментариев:

  1. Здраствуйте ! А исходником не поделитесь?

    ОтветитьУдалить
    Ответы
    1. Здравствуйте, Unknown. Напишите о своем интересе в форму обратной связи в подвале блога.

      Удалить
  2. У меня задача собирать данные с трасс mssql и оформить в виде графиков. данных очень много . Хотелось бы посмотреть на ваш код. И линейка тоже нужна . У меня есть вариант, но он как мне кажется не оптимальный

    ОтветитьУдалить
    Ответы
    1. Здравствуйте, Григорий. Алгоритм визуализации большого объема данных расписан выше. Методика же вывода и отрисовки линейки с маркерами с кодом приведена в первой ссылке.

      Удалить
  3. А как вы выбираете step? И почему каждую step выводите? Ведь пик можно потерять?

    ОтветитьУдалить
    Ответы
    1. Когда количество точек в выводимом временном интервале меньше разрешения экрана, шаг становится нулевым. При этом все точки заданного интервала будут выведены и ни один экстремум не будет потерян. Т.е. при увеличении просматриваемого интервала подробности только растут.

      Однако при увеличении интервала вывода действительно некоторые пики будут потеряны, поэтому изначально при сканировании проводится поиск экстремумов (об этом выше упомянуто). Чем искать экстремумы? Например самое простое - скользящим окном с базой на три точки.

      Удалить
    2. Рад был помочь.

      Удалить
    3. Скорректировал алгоритм поиска так, чтобы не терять пики (экстремумы) при любых условиях (архив перезалит). Суть заключается в том, что вначале определяем как обычно тот же шаг = количеству интервалов = количеству точек на экране, но по ходу сканирования выборки в каждом из интервалов ищем максимальный пик по модулю и запоминаем его временное положение (которое может быть любым в пределах каждого интервала). Этот найденный пик и будет отображаемой одной точкой из всего интервала. Набор таких пиков и будет образовывать тренд для каждого из каналов в пределах разрешения монитора.

      Удалить

В комментариях уважайте собеседника, внимательно читайте посты и не додумывайте. Просьбы и предложения из разряда: «можно ваш Skype/Viber/телефон», «напишите мне в vk/FB», а также другие им подобные — игнорируются. Выход новых версий ПО, внешняя ссылка, переставшая работать с течением времени и т.п. не является основанием для претензий. Желающие спокойно подискутировать и высказаться — Welcome. Желающие спонсировать блог — Donate. Нарушение этих простых правил ведет к бану и удалению комментариев без предупреждения.