Шаблон непрерывного сбора данных

Общие принципы, проектирование, модуляризация, темплейты и шаблоны
Ответить
Vadoss
beginner
beginner
Сообщения: 11
Зарегистрирован: 11 май 2010, 19:16
Версия LabVIEW: 8.5
Контактная информация:

Шаблон непрерывного сбора данных

Сообщение Vadoss »

Всем привет!

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

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

Кратко об аппаратно-программном комплексе:
Железо все от NI. Из основного: генератор аналоговых сигналов произвольной формы PXI-5422, модули АЦП PXIe-6368 и LabVIEW 2009. Предназначено все это для измерения характеристик многоканальных антенн.

Краткая структура программы:
structure.jpg
Коммуникация между потоками организована, через упрощенную библиотеку типа Tasking2, где убраны нотифаеры, т.к. не нашел им применения.

Как происходит работа программы:
При запуске все потоки инициализируются. Оператор выбирает режим измерения, меняет необходимые параметры и запускает работу. Работа начинается с посылки команды start потоку Output, который подготавливает лицевую панель, свои переменные и шлет команду потоку Write into file, который открывает файл для записи и ожидает данных с потока Receiver. После этого в нужной последовательности запускаются потоки Generator, Receiver и Counter, которые служат для управления модулями NI. Поток Receiver получает данные с 96 каналов АЦП в виде двумерного массива и передает их через очередь потоку, который пишет в файл. После окончания записи, поток Write into file дает команду потоку Output, чтобы тот начал процесс обработки полученных данных согласно алгоритму выбранного метода измерений и тут же все отобразил. Пришлось сначала писать в файл, а уже потом работать с ними, по причине большого числа каналов, изменяемой частоты дискретизации и возможно длительному сбору данных, что может привести к переполнению очереди.
Чувствую, что код сделал громоздким, возможно переборщил с потоками. Конечно же, хочется сделать оптимизацию ПО.

Жду критики от знатоков.
Заранее спасибо.
Аватара пользователя
Andrew Lunev

Activity Professionalism
VIP
VIP
Сообщения: 957
Зарегистрирован: 11 дек 2010, 12:31
Награды: 2
Версия LabVIEW: 2014-2021
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 10 раз

Re: Шаблон непрерывного сбора данных

Сообщение Andrew Lunev »

У вас вся программа делится на несколько этапов: инициализация, настройка, измерения, обработка, визуализация. Думаю вариант шаблона "Машина состояний" здесь больше подойдет. Зачем делать инициализацию и настройку в отдельных циклах, которые выполняются только один раз? Хотя для точного выбора варианта шаблона надо знать еще много чего о требованиях к системе. Например периодичность ваших измерений и обработки, требования к синхронизации и скорости визуализации. Думаю в результате оптимальным шаблоном будет вариант совмещения шаблонов "производитель/потребитель" и "машина состояний".
Vadoss
beginner
beginner
Сообщения: 11
Зарегистрирован: 11 май 2010, 19:16
Версия LabVIEW: 8.5
Контактная информация:

Re: Шаблон непрерывного сбора данных

Сообщение Vadoss »

Andrew Lunev писал(а):Зачем делать инициализацию и настройку в отдельных циклах, которые выполняются только один раз?
Инициализация всех потоков происходит последовательно после инициализации потока Events, который обладает кластером с параметрами всей программы.
Если были внесены изменения в настройке программы, то соответствующие потоки вновь получают команду на инициализацию, но уже с новыми параметрами.
Andrew Lunev писал(а):Хотя для точного выбора варианта шаблона надо знать еще много чего о требованиях к системе. Например периодичность ваших измерений и обработки, требования к синхронизации и скорости визуализации.
Требования не сложные, вот основные из них:
- формирование и генерация излучаемых сигналов;
- прием сигналов с выходов измерительного приемника и испытуемой антенны;
- фильтрация и измерение уровней принятых сигналов;
- обработка принятых сигналов, реализующая алгоритм выбранного метода измерений;
- отображение на экране монитора текущего результата измерений.

Излучаемые сигналы могут быть непрерывными гармоническими или радиоимпульсными с некоторой длительностью импульса, частотой заполнения и периодом следования.

Синхронизация нужна только при излучении радиоимпульсов. Она обеспечивается аппаратными возможностями модулей, при помощи DAQmx.

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

Сбор данных проводится пока вращается антенна.
Andrew Lunev писал(а):Думаю в результате оптимальным шаблоном будет вариант совмещения шаблонов "производитель/потребитель" и "машина состояний"
Как я понимаю, Tasking2 и есть это совмещение.
Vadoss
beginner
beginner
Сообщения: 11
Зарегистрирован: 11 май 2010, 19:16
Версия LabVIEW: 8.5
Контактная информация:

Re: Шаблон непрерывного сбора данных

Сообщение Vadoss »

Уже подумываю объединить в один - потоки, которые работают с железом. Вот с визуализацией пока туго.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Модели программирования»