В этом уроке я покажу вам, как спрограммировать запрос данных из параллельного потока/цикла. Для начала вам надо прочитать и понять вот этот урок:
/viewtopic.php?f=23&t=153
И так задача состоит в том, чтобы нижний цикл по запросу из верхнего цикла отправлял какое либо значение обратно в верхний цикл. Получается что при нажатии какой либо кнопки на лицевой панели верхний цикл регистрирует это нажатие кнопки, отправляет сигнал через очередь в нижний цикл. Нижний цикл получает команду, генерирует число и отправляет это число в верхний цикл. Верхний цикл получает это число и выдаёт его на лицевую панель.
Если вы зададитесь вопросом где это применять, то отвечу вам:
такая конструкция применяется если вы например пишите программу визуализации данных какого либо реального прибора. При этом верхний цикл отвечает за лицевую панель программы, а нижний цикл за коммуникацию с реальным прибором.
Запрос данных из параллельного потока
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Запрос данных из параллельного потока
Для начала создаём два цикла, в верхнем располагаем ивент структуру, а в нижнем выбираем очередь в качестве получателя команд. Ивент структура может регистрировать не только ивенты лицевой панели, она может так же получать команды из других циклов. Это называется динамичные ивенты (dynamic events). В общем, для начала, приводим нашу программу в такой вид:
А кто не может, тот может скачать готовый темплейт (но всё таки рекомендую разобраться что к чему):
А кто не может, тот может скачать готовый темплейт (но всё таки рекомендую разобраться что к чему):
- Вложения
-
- FP_Dev.vi
- LV 8.0
- (8.96 КБ) 272 скачивания
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Запрос данных из параллельного потока
Как вы замметили мы обменялись референсами между циклами. Это нужно для коммуникации данными в обе стороны. Т.е. верхний цикл может посылать команды в нижний цикл используя референс очереди нижнего цикла, а нижний может отправлять данные в верхний используя референс юзер ивента.
ПОПРАВКА кроме всего нужно задать строковой тип очереди:
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Запрос данных из параллельного потока
Располагаем на нашей лицевой панели две кнопки и один цифровой индикатор:
Кнопка "get" будет запрашивать значение из нижнего цикла
Кнопка "stop" будет останавливать нашу программу, т.е. оба цикла
Цифровой индикатор "value" будет отображать запрошенное значение из нижнего цикла
Кнопка "get" будет запрашивать значение из нижнего цикла
Кнопка "stop" будет останавливать нашу программу, т.е. оба цикла
Цифровой индикатор "value" будет отображать запрошенное значение из нижнего цикла
- Вложения
-
- FP_Dev_3.png (11.15 КБ) 6920 просмотров
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Запрос данных из параллельного потока
Заменяем Timeout Event на Stop Value Change Event кнопки "stop". Сделать это можно нажав правой кнопкой мыши на рамку ивент структуры и выбрав Edit Event. Получится примерно такое:
Обратите так же внимание на нижний цикл, в нём обрабатывается команда "stop", которая заканчивает цикл (подробнее в первом уроке - линк в начале темы).
Обратите так же внимание на нижний цикл, в нём обрабатывается команда "stop", которая заканчивает цикл (подробнее в первом уроке - линк в начале темы).
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Запрос данных из параллельного потока
А так же добавляем ивент "get" верхний цикл а так же реакцию в нижний цикл на получение комады "get" из верхнего цикла:
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Запрос данных из параллельного потока
А теперь нажимаем правой кнопкой мыши на ивент структуру, выбираем Add Event, а потом как на картинке - выбираем динамический ивент "FP":
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Запрос данных из параллельного потока
Ну а содержимое этого ивента показано здесь:
- Вложения
-
- FP_Dev_7.png (5.49 КБ) 6899 просмотров
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Запрос данных из параллельного потока
Ну если всё сделано правильно, то программа должна уже работать. Важно понять что разделение программы на параллельные циклы, даёт возможность разбить программу на несколько/много независимых друг от друга модулей. Эти модули можно применять в других проектах, их можно использовать в отдельных виртуальных подприборах. В общем плюсов достаточно много, т.к. похожие структуры применяются большинством продвинутых программистов LabVIEW. Об этом в наших следующих уроках.
Скачать конечный прибор этого урока можно здесь:
Скачать конечный прибор этого урока можно здесь:
- Вложения
-
- FP_Dev.vi
- (19.27 КБ) 340 скачиваний
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 3 Ответы
- 855 Просмотры
-
Последнее сообщение IvanLis
-
- 13 Ответы
- 1191 Просмотры
-
Последнее сообщение Boxa
-
- 0 Ответы
- 486 Просмотры
-
Последнее сообщение Juri
-
- 3 Ответы
- 263 Просмотры
-
Последнее сообщение AndreyDmitriev
-
- 13 Ответы
- 2439 Просмотры
-
Последнее сообщение rsv