Всем привет!
Возник вопрос, касающийся правильного выбора подхода к проектированию ПО, которое должно обеспечивать генерацию, сбор данных, обработку, визуализацию и составление отчета о проделанном измерении.
Уже познакомился с моделью программирования, которой поделился Eugen Graf, за что ему спасибо. Интересный шаблон, который я взял на вооружение и стараюсь его придерживаться, но в ходе решения вышеописанной задачи, меня не покидали мысли, что я все дальше лезу в дебри.
Кратко об аппаратно-программном комплексе:
Железо все от NI. Из основного: генератор аналоговых сигналов произвольной формы PXI-5422, модули АЦП PXIe-6368 и LabVIEW 2009. Предназначено все это для измерения характеристик многоканальных антенн.
Краткая структура программы:
Коммуникация между потоками организована, через упрощенную библиотеку типа Tasking2, где убраны нотифаеры, т.к. не нашел им применения.
Как происходит работа программы:
При запуске все потоки инициализируются. Оператор выбирает режим измерения, меняет необходимые параметры и запускает работу. Работа начинается с посылки команды start потоку Output, который подготавливает лицевую панель, свои переменные и шлет команду потоку Write into file, который открывает файл для записи и ожидает данных с потока Receiver. После этого в нужной последовательности запускаются потоки Generator, Receiver и Counter, которые служат для управления модулями NI. Поток Receiver получает данные с 96 каналов АЦП в виде двумерного массива и передает их через очередь потоку, который пишет в файл. После окончания записи, поток Write into file дает команду потоку Output, чтобы тот начал процесс обработки полученных данных согласно алгоритму выбранного метода измерений и тут же все отобразил. Пришлось сначала писать в файл, а уже потом работать с ними, по причине большого числа каналов, изменяемой частоты дискретизации и возможно длительному сбору данных, что может привести к переполнению очереди.
Чувствую, что код сделал громоздким, возможно переборщил с потоками. Конечно же, хочется сделать оптимизацию ПО.
Жду критики от знатоков.
Заранее спасибо.
Шаблон непрерывного сбора данных
-
Andrew Lunev
- VIP
- Сообщения: 957
- Зарегистрирован: 11 дек 2010, 12:31
- Награды: 2
- Версия LabVIEW: 2014-2021
- Откуда: Москва
- Благодарил (а): 4 раза
- Поблагодарили: 10 раз
Re: Шаблон непрерывного сбора данных
У вас вся программа делится на несколько этапов: инициализация, настройка, измерения, обработка, визуализация. Думаю вариант шаблона "Машина состояний" здесь больше подойдет. Зачем делать инициализацию и настройку в отдельных циклах, которые выполняются только один раз? Хотя для точного выбора варианта шаблона надо знать еще много чего о требованиях к системе. Например периодичность ваших измерений и обработки, требования к синхронизации и скорости визуализации. Думаю в результате оптимальным шаблоном будет вариант совмещения шаблонов "производитель/потребитель" и "машина состояний".
-
- beginner
- Сообщения: 11
- Зарегистрирован: 11 май 2010, 19:16
- Версия LabVIEW: 8.5
- Контактная информация:
Re: Шаблон непрерывного сбора данных
Инициализация всех потоков происходит последовательно после инициализации потока Events, который обладает кластером с параметрами всей программы.Andrew Lunev писал(а):Зачем делать инициализацию и настройку в отдельных циклах, которые выполняются только один раз?
Если были внесены изменения в настройке программы, то соответствующие потоки вновь получают команду на инициализацию, но уже с новыми параметрами.
Требования не сложные, вот основные из них:Andrew Lunev писал(а):Хотя для точного выбора варианта шаблона надо знать еще много чего о требованиях к системе. Например периодичность ваших измерений и обработки, требования к синхронизации и скорости визуализации.
- формирование и генерация излучаемых сигналов;
- прием сигналов с выходов измерительного приемника и испытуемой антенны;
- фильтрация и измерение уровней принятых сигналов;
- обработка принятых сигналов, реализующая алгоритм выбранного метода измерений;
- отображение на экране монитора текущего результата измерений.
Излучаемые сигналы могут быть непрерывными гармоническими или радиоимпульсными с некоторой длительностью импульса, частотой заполнения и периодом следования.
Синхронизация нужна только при излучении радиоимпульсов. Она обеспечивается аппаратными возможностями модулей, при помощи DAQmx.
С визуализацией сложнее всего. На данный момент вся информация появляется уже после сбора данных, т.к. ресурсы машины не позволили вести обработку в процессе получения данных (это с самыми экстремальными параметрами).
Сбор данных проводится пока вращается антенна.
Как я понимаю, Tasking2 и есть это совмещение.Andrew Lunev писал(а):Думаю в результате оптимальным шаблоном будет вариант совмещения шаблонов "производитель/потребитель" и "машина состояний"
-
- beginner
- Сообщения: 11
- Зарегистрирован: 11 май 2010, 19:16
- Версия LabVIEW: 8.5
- Контактная информация:
Re: Шаблон непрерывного сбора данных
Уже подумываю объединить в один - потоки, которые работают с железом. Вот с визуализацией пока туго.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 3 Ответы
- 875 Просмотры
-
Последнее сообщение IvanLis
-
- 13 Ответы
- 1226 Просмотры
-
Последнее сообщение Boxa
-
- 0 Ответы
- 503 Просмотры
-
Последнее сообщение Juri
-
- 3 Ответы
- 272 Просмотры
-
Последнее сообщение AndreyDmitriev
-
- 13 Ответы
- 2454 Просмотры
-
Последнее сообщение rsv