Страница 1 из 1

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

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

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

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

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

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

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

Добавлено: 23 мар 2016, 10:56
dadreamer
Alex Dem, по картинкам не совсем понятна архитектура программы и то, сколько циклов у вас в main vi. На второй картинке я вижу цикл в цикле, да ещё и sequence. Подозреваю, что из-за подобной спонтанной структуры программа и не работает, как нужно.
Alex Dem писал(а):не умею пока синхронизировать должным образом процессы в параллельных циклах
Как я писал выше,
dadreamer писал(а):Синхронизировать циклы можно через очереди, уведомители и прочие инструменты.
В интернете полно примеров по передаче данных между параллельными циклами. Изучите, как работают механизмы синхронизации, на примере http://www.ni.com/white-paper/3023/en/ (подход "Producer - Consumer"). Посмотрите схожие темы на форуме, например http://www.labviewportal.org/viewtopic. ... 096#p66096 , http://labviewportal.org/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 выносите в один цикл, получение данных с железки - в другой, логику - в третий.