LabView: передать значение между циклами while - PullRequest
1 голос
/ 14 марта 2012

У меня есть ви с двумя бесконечными циклами while.Левый цикл непрерывно считывает данные с устройства и строит их, правый цикл вызывает пользовательскую DLL и использует выходные данные для управления другим устройством.DLL вызывает блоки примерно на секунду, поэтому два цикла не синхронизируются *.Теперь я хотел бы использовать мгновенное значение из первого цикла в качестве входных данных для библиотеки DLL во втором.Я попытался просто соединить их - LabVIEW вставляет терминалы на границах цикла - но затем второй цикл не запускается.(Если это имеет значение, тип данных «динамические данные» - измерение напряжения).Как мне это сделать?

(* На самом деле изначально был только один цикл, и график обновлялся только между вызовами DLL, что было неудовлетворительно.)

Ответы [ 3 ]

6 голосов
/ 15 марта 2012

То, что вы ищете, - это цикл "Producer Consumer".

Есть шаблон, который поставляется с LabVIEW (Файл >> Новый ... >> VI >> Из шаблона >> Шаблоны проектирования), который является хорошей отправной точкой.

Также, дополнительная информация здесь:

http://zone.ni.com/devzone/cda/tut/p/id/3023

http://zone.ni.com/wv/app/doc/p/id/wv-1295

PS - причина, по которой второй цикл не запускается, из-за концепции под названием «Поток данных». Узел (ваш второй цикл) не может работать, пока не будут получены все его входные данные, включая данные из первого цикла. Узел (первый цикл) ничего не выводит из него до тех пор, пока не завершит выполнение, то есть до конца цикла.

По сути, ваш второй цикл не будет работать до тех пор, пока первый цикл не завершится и не завершит цикл.

6 голосов
/ 14 марта 2012

Это стандартное поведение, поскольку первый цикл не завершил, данные на выходном вентиле недоступны для запуска следующего цикла.

Самый быстрый способ получить данные из одного цикла - использовать локальную переменную:

  1. Создать индикатор для ваших данных
  2. Щелкните правой кнопкой мыши терминал индикатора и выберите «создать \ локальную переменную»
  3. Переместить локальную переменную в правый цикл
  4. Возможно, вам нужно изменить цикл с записи на чтение (используя контекстное меню)

Есть несколько других способов распространения ваших данных, и местные жители могут пока работать, но вы захотите двигаться дальше, если вы масштабируетесь на более крупные приложения. Другими вариантами являются очереди (без потерь или без потерь), уведомления или глобальные переменные, и если вы перейдете в LabVIEW, вы придумаете свои собственные схемы.

0 голосов
/ 15 июля 2012

На самом деле, вам может не понравиться этот дополнительный индикатор на передней панели, только для использования его значения через локальные переменные.Затем вы можете использовать глобальную переменную.Вы можете найти его в разделе «Конструкции».Это создает новый ВП, где вы можете опускать различные индикаторы или элементы управления только для записи и чтения данных из них.Вы можете поместить эту глобальную переменную VI в блок-схему, чтобы получить доступ к данным.Затем, при необходимости, вы можете использовать ту же глобальную переменную VI и ее значения в других VI.

...