Как отобразить данные в элементе управления в LabVIEW - PullRequest
2 голосов
/ 17 сентября 2010

У меня есть числовой элемент управления (не индикатор) и цикл for (предел 5)

Мне нужно отобразить [Индекс текущей петли + значение в числовом элементе управления] в числовом элементе управления Я новичок в LabVIEW. Есть ли идея сделать это?

Ответы [ 5 ]

3 голосов
/ 18 сентября 2010

Есть ли какая-либо конкретная причина, по которой вам нужно обновлять элемент управления так часто?
Если его нужно регулярно обновлять, возможно, было бы лучше изменить его на индикатор.
Если вы обновляете элемент управления, который частоу пользователя будет ощущение, что он не «контролирует».

3 голосов
/ 17 сентября 2010

Чтобы записать значение в элемент управления, вам необходимо создать из него локальную переменную (щелкните правой кнопкой мыши терминал управления на блок-схеме и выберите «Создать»> «Локальная переменная»).Чтобы он обновлял каждую итерацию цикла For, поместите терминал локальной переменной внутри цикла For и подключите к терминалу все, что вы хотите отобразить.Я не уверен, что это будет хороший дизайн пользовательского интерфейса, но это ответ на ваш вопрос.

Вы также можете использовать локальные переменные для записи индикаторов из более чем одного места в вашей блок-диаграммеи читать из индикаторов или элементов управления.Вы можете иметь более одного терминала локальной переменной для любого данного элемента управления или индикатора.Каждый терминал локальной переменной предназначен либо для чтения, либо для записи - щелкните правой кнопкой мыши локальную переменную и выберите «Изменить на чтение» или «Изменить на запись».

Следует соблюдать осторожность при использовании локальных переменных для передачи данных, поскольку поток программыпоток данных больше не будет контролироваться, как при передаче данных по проводам, и это может привести к непредсказуемому поведению (условия гонки).Запись в одном месте и чтение в нескольких местах - это нормально, если читателям нужно знать текущее значение только во время выполнения, и поэтому запись в индикатор выполняется из нескольких мест, где индикатор используется только для отображения информации для пользователя..

2 голосов
/ 24 сентября 2010

Как уже упоминалось, вы можете использовать локальные переменные и узлы proerty для установки значения вашего элемента управления или индикатора.Если вы пытаетесь сохранить данные, есть гораздо лучший способ.

Google "функциональный глобальный" или "глобальный стиль labview 2".Основной шаблон - использовать цикл while, жестко запрограммированный для остановки после одной итерации.Добавьте унифицированный регистр сдвига.Добавить структуру дела внутри цикла.Используйте элемент управления (логическое значение, перечисление или строку), чтобы выбрать структуру дела.Отбросьте пару управления / индикатора того же типа данных на вашем ВП.Подключите индикатор к внешнему выходу правого переключателя на внешней стороне петли.Поместите элемент управления ВНУТРИ петли в «установленный» (обычно истинный, не по умолчанию) корпус и подключите его из корпуса к входу правого переключателя.Перейдите к другому пустому (ым) корпусу (ам) и подключите внутренний выход левого переключателя через корпуса к разъему, который подключается к внутреннему входу.

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

Три основных преимущества - это сохранение потока данных, безопасность потоков и производительность.Вы получаете поток данных, добавляя ошибку IO к вашему VI.Безопасность потока гарантирована, потому что выполнение VI гарантированно будет атомарным.Производительность улучшается, потому что данные LV хотят жить по проводам.Каждый раз, когда вы записываете данные в проэртивный узел элемента управления, среда выполнения LV записывает эти данные в поток пользовательского интерфейса.Я думаю, что аналогичное снижение производительности на основе потоков также для местных жителей, но я не уверен.


За первый комментарий ...

Скопировано здесь по ссылке для вашей выгоды(да, вы, мистер читатель).Проблема: я рассматриваю использование локальных или глобальных переменных;в каком потоке выполняются переменные?

Решение: Распространенным заблуждением является то, что локальные и глобальные переменные операции выполняются в потоке пользовательского интерфейса или требуют замены потока в потоке пользовательского интерфейса - это не так.Далее описывается поведение операций записи и чтения локальных и глобальных переменных:

Запись: при записи в локальную или глобальную переменную LabVIEW не переключается в поток пользовательского интерфейса сразу.Вместо этого LabVIEW записывает значение в буфер передачи, который является защищенной областью памяти.Пользовательский интерфейс обновляется в следующее запланированное время обновления.Можно обновить переменную несколько раз, прежде чем произойдет обновление одного потока или обновление пользовательского интерфейса.Это возможно, потому что переменные работают исключительно в потоке выполнения.

Чтение: при чтении из локальной или глобальной переменной операция будет выполняться в потоке, который выполняет ВП, поэтому вы можете быть уверены, что он это делаетне возникает в потоке пользовательского интерфейса, если установить для системы выполнения в свойствах VI стандарт.Существует механизм защиты потоков, который гарантирует, что ни один из авторов глобальных данных не изменяет данные, пока вы их читаете, но это делается с помощью мьютекса, а не путем перехода к потоку пользовательского интерфейса.Однако, если панель глобальных переменных открыта, то публикуется сообщение для перерисовки глобального элемента управления, и перерисовка будет происходить в потоке пользовательского интерфейса.


nekomatic является правильным.Смена потока не происходит, когда вы пишете местным жителям.

1 голос
/ 20 сентября 2010

Если вы хотите сохранить поток данных для управления потоком программы, вы можете вместо этого использовать узел свойства элемента управления и установить свойство «Значение».

Чтобы создать узел свойства, щелкните правой кнопкой мыши элемент управлениятерминала на блок-схеме и выберите «Создать» Свойства узла »Значение.Теперь вы можете придерживаться программирования потока данных, используя провода ошибок для управления потоком программы.

Опять же, чтобы еще раз подчеркнуть точку Тона - если вы собираетесь часто менять значение элемента управления, это может бытьвместо этого стоит поменять его на индикатор.

1 голос
/ 19 сентября 2010

Я согласен с Тон.Если вы изменяете значение элемента управления программно, то вам следует подумать, должен ли он быть индикатором или иметь псевдоиндикатор элемента управления.

Было бы неплохо опубликовать изолированную версиювашего кода, чтобы мы могли понять, что именно происходит.

...