Страница 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 выносите в один цикл, получение данных с железки - в другой, логику - в третий.