Вывод звука для управления вибростендом

Обсуждение вопросов, связанных с обработкой аудио и видео информации
Ответить
Alex Dem
assistant
assistant
Сообщения: 109
Зарегистрирован: 06 май 2015, 22:24
Репутация: 0
Версия LabVIEW: 2014, 2018
Контактная информация:

Вывод звука для управления вибростендом

Сообщение Alex Dem »

waves.zip
3 wave файла, необходимые для работы ВП
(1.78 МБ) 148 скачиваний
Здравствуйте! Нужен совет, как обеспечить вывод звука во время работы цикла While loop таким образом, чтобы не тормозила работа схемы автоматической регулировки на ПИД-регуляторах .
Логика работы ВП следующая. Выбирается папка, где находятся 3 wave файла, которые затем загружаются каждый в свой канал регулирования. В готовом ВП данные о RMS будут получены с помощью USB 6009, но на этапе отладки они берутся с выходов каналов регулирования. Если не выводить сигнал на выход звуковой карты, ВП работает ка необходимо, то есть по каждому из каналов достигается заданный уровень RMS, затем выходы каналов складываются. Когда я пытаюсь вывести результат на звуковуху, сам процесс вывода работает, но "подвешивает" работу цикла While loop, ВП уже не может работать нормально, регулирование становится невозможным. Помогите справиться с этой проблемой.
Вложения
waves.png
waves.vi
(40.4 КБ) 138 скачиваний

Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3486
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Репутация: 0
Версия LabVIEW: 2.5 — 2020
Контактная информация:

Re: Вывод звука для управления вибростендом

Сообщение dadreamer »

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

Alex Dem
assistant
assistant
Сообщения: 109
Зарегистрирован: 06 май 2015, 22:24
Репутация: 0
Версия LabVIEW: 2014, 2018
Контактная информация:

Re: Вывод звука для управления вибростендом

Сообщение Alex Dem »

Решил не создавать новой темы, так как вопрос по той же тематике. В готовую работающую систему управления вибростендом потребовалось добавить управление 8-ю генераторами синусоид, частоты которых качаются от минимальной до максимальной частоты в обе стороны (за 15 минут в одну сторону). Расчет опорной частоты генерации осуществил в параллельном цикле и попытался передать ее значение с помощью локальной переменной 1 раз в секунду. Но в результате получил прерывание колебаний на выходе звуковой карты как раз с частотой 1Гц, как я понимаю из-за того, что не умею пока синхронизировать должным образом процессы в параллельных циклах. Прошу помощи у уважаемых знатоков, подскажите решение. Проект срочен, а я у разбитого корыта.
Вложения
Цикл генерации и измерения
Цикл генерации и измерения
Расчет опорных частот
Расчет опорных частот

Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3486
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Репутация: 0
Версия LabVIEW: 2.5 — 2020
Контактная информация:

Re: Вывод звука для управления вибростендом

Сообщение dadreamer »

Alex Dem, по картинкам не совсем понятна архитектура программы и то, сколько циклов у вас в main vi. На второй картинке я вижу цикл в цикле, да ещё и sequence. Подозреваю, что из-за подобной спонтанной структуры программа и не работает, как нужно.
Alex Dem писал(а):не умею пока синхронизировать должным образом процессы в параллельных циклах

Как я писал выше,
dadreamer писал(а):Синхронизировать циклы можно через очереди, уведомители и прочие инструменты.

В интернете полно примеров по передаче данных между параллельными циклами. Изучите, как работают механизмы синхронизации, на примере http://www.ni.com/white-paper/3023/en/ (подход "Producer - Consumer"). Посмотрите схожие темы на форуме, например http://www.labviewportal.ru/viewtopic.p ... 096#p66096 , viewtopic.php?p=68893#p68893

А также вот вам литература и примеры:
1) "LabVIEW Основы II: Разработка" : шаблон «Производитель-потребитель» + материал в главе 2 "Передача данных между несколькими циклами"
2) Питер Блюм "LabVIEW: стиль программирования", в частности глава 8 "Шаблоны" и раздел 8.3.1 "Параллельные циклы"
3) примеры в папке C:\Program Files (x86)\National Instruments\LabVIEW 2014\examples\Synchronization

Также следует подумать над архитектурой приложения. У вас есть неплохой задел, так что будет несложно доделать до "конечного автомата". Работу с GUI выносите в один цикл, получение данных с железки - в другой, логику - в третий.

Ответить

Вернуться в «Работа с графикой и звуком»