Как сделать счетчик в labview

Добавил пользователь Alex
Обновлено: 04.10.2024

У меня возникли реальные проблемы с кажущейся легкой задачей в LabView году. Итак, задача состоит в том, что у вас есть какой-то счетчик, который идет от 0 до 60 и кнопка. Если вы нажмете кнопку, счетчик должен подняться на единицу, это должно продолжаться до 60, где при следующем нажатии кнопки счетчик сбрасывается до 0, чтобы начать все сначала.

У меня уже есть какое-то решение, но моя проблема в том, что он продолжает считать путь к быстрому. Если я нажму кнопку, счетчик подскочит 10-12 раза, а не one-by-one.

3 ответа

Здравствуйте, мне нужно сделать программу для управления шаговым двигателем в LabVIEW. Я использую LabVIEW ver.11, и у меня есть диаграмма, написанная в LabVIEW ver.5 (я полагаю), но я не могу найти (распознать) все функции там. Может кто-нибудь указать мне на них, пожалуйста. Я загружу скриншот.

Как использовать обнаружение объектов для измерения размеров и определения местоположения circle/line/rectangle на изображении на LABVIEW ? Например, предположим, что я вставил изображение в labview , я хочу, чтобы labview обнаружил, есть ли в нем какая-либо форма!

Никогда не используйте локальную переменную в LabVIEW.

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

Есть два инструмента, которые, по-видимому, отсутствуют в вашем наборе инструментов: структура событий и регистр сдвига. Вот твое решение: (Возможно, вам придется изменить этот кадр на 61 вместо 60. Из ваших указаний мне было неясно, имеете ли вы в виду 60 нажатий кнопок или отображаемое значение "60". Я сделал 60 нажатий на кнопки.)

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

enter image description here

enter image description here

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

У меня уже есть какое-то решение, но моя проблема в том, что он продолжает считать слишком быстро. Если я нажму кнопку, счетчик подскочит 10-12 раза, а не one-by-one.

Вы также должны учитывать то, о чем упоминал srm, я бы поставил, по крайней мере, структуру последовательности вокруг приращения числа (поместите сброс числа затем в другой кадр этой последовательности), чтобы определить, что выполняется первым, увеличение или сброс числа.

Или вы можете сделать такое решение только для случая, как это

enter image description here

Похожие вопросы:

Мне нужно проехать тестовый стенд с labview. Тестовые сценарии написаны на языках, которые могут быть автоматически переведены в диаграммы labview. Это API, который позволяет создавать labview.

У меня есть следующий простой код, реализованный в LabVIEW для Windows PC. Кроме того, у меня есть приложение на другой машине, которое отправляет пакеты длиной 18 байт UDP. Когда отправитель.

Здравствуйте, мне нужно сделать программу для управления шаговым двигателем в LabVIEW. Я использую LabVIEW ver.11, и у меня есть диаграмма, написанная в LabVIEW ver.5 (я полагаю), но я не могу найти.

Как использовать обнаружение объектов для измерения размеров и определения местоположения circle/line/rectangle на изображении на LABVIEW ? Например, предположим, что я вставил изображение в labview.

У меня есть очень простой, но очень важный вопрос: Существует файл labview (VI), который содержит некоторые VIs, связанные с осциллографом Tektronix и драйвером двигателя. Я скачал драйверы и VIs.

У меня есть файл, содержащий программу LabView, и мне нужно понять, что она делает. Конечно, он не может быть выполнен без LabView. Но можно ли читать программу LabView без Labview?

Я использую тот же код, который все еще работает для новой версии оборудования, купленного компанией. Я не могу общаться с оборудованием в vb на visual studio (язык последнего кода, который я.

На моем Windows 10 ПК установлен LabVIEW 2017. Файл, созданный мной в LabVIEW 2016 году в моем университете, не будет открыт. Когда я дважды щелкаю, LabVIEW запускается нормально, но только так, как.

Я унаследовал какой-то LabVIEW, на котором есть счетчик времени. Хотя я не совсем понимаю это, потому что я не знаком с LabVIEW и в какой-то степени добился успеха. Но вот чего я не смог сделать.

В LabVIEW, как и в других языках программирования, тоже есть циклы. И функции, и подпрограммы, и даже переменные. LabVIEW - это тоже язык программирования, только графический:) В этом уроке мы рассмотрим цикл While (While Loop). Это цикл, аналогичный циклам "Do Loop" и "Repeat-Until Loop" в обычных текстовых языках программирования. Чтобы было понятнее, посмотрите на картинку:


Чтобы создать такой цикл, нужно зайти в палитру Functions>>Execution Control и выбрать там While Loop соответственно. Затем нужно растянуть рамку по полю до нужных вам размеров, вставить что-нибудь (например, кнопку), что будет условием завершения - и все, цикл готов. - это терминал завершения цикла. Цикл будет выполняться до тех пор, пока этот терминал не получит определенное булевское значение (в данном случае - пока на терминал не поступит true). - счетчик итераций, начальное значение всегда 0 (на первом шаге цикла), в дальнейшем при каждом проходе увеличивается на 1. Вообще, есть два условия завершения цикла - Stop If True и Continue if True. Переключение между ними делается просто - щелчок правой кнопкой мыши по значку терминала, и выбрать нужное из контекстного меню. Давайте рассмотрим два примера, чтобы было понятнее:


Этот цикл будет выполняться до тех пор, пока число, которое выдает SubVI не станет больше 10, при значении регулятора Enable равном true. Тогда два true в сумме дадут тоже true, и цикл завершится (Stop if true).


А здесь ситуация обратная - цикл будет выполняться до тех пор, пока на выходе получается значение true. Как только получится False, цикл завершится (Continue if True). В общем-то, все довольно просто и логично.

Небольшое, но важное замечание. В LabVIEW такие вот "рамочные" структуры встречаются довольно часто (есть еще цикл For, case structure и т.п.). Данные могут пересекать границу рамки по "туннелям". Посмотрите на картинку:


Синий квадратик на границе цикла - это и есть тот самый туннель. Прим этом важно понимать, что данные пойдут по туннелю только тогда, когда цикл закончится. Поэтому, в результате выполнения этой программы на индикаторе Iteration Number будет показан только номер последней итерации.

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

Сначала рассмотрим метод описания счетчика путем описания его схемы на D-триггерах:

Схема счетчика на D-триггерах

Как видите нам понадобились 4 D-триггера. В идеале нужны триггеры с двумя выводами (прямым и инверсным). У меня в библиотеке таких не нашлось, поэтому я взял еще четыре элемента НЕ (инвертора). Данную схему можно назвать классической, ею пользуются уже много лет. Тем не менее она не теряет свою актуальность.
Вот так выглядят временные диаграммы работы сего устройства:

Временная диаграмма работы счетчика на D-триггерах

Все просто и без лишней возни. В схеме присутствует сигнал сброса счетчика CLRN.
Недостатком такого метода можно назвать разве что плохую переносимость (ну и конечно для большей разрядности надо больше триггеров, что не всегда удобно). К примеру если вы захотите сменить производителя ПЛИС, вам придется заново набирать схему в новой среде разработки.

Второй метод (описание счетчика при помощи VHDL кода) лишен данного недостатка, но предполагает наличие хотя бы начальных знаний в области программирования на VHDL.
Код счетчика четырехразрядного счетчика с прямым счетом на VHDL:

Такой подход безусловно более выгоден. Вы можете наращивать значение счетчика простым изменением разрядности переменных cnt и q.
Смысл этого кода в том, что по приходу на вход CLK импульса, увеличивается переменная хранящая значение счетчика - cnt.
При установке 1 на вход reset, счетчик сбрасывается.

Описываемое ниже устройство представляет собой измеритель потребляемой мощности для дома или квартиры.

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

Счётчик электрической энергии

Устройство работает следующим образом: контроллер Arduino считывает частоту миганий светодиода электросчетчика и передает данные через беспроводной модуль XBee. Модуль USB/Xbee, установленный на компьютере, принимает данные на ПК и передает их в LabView, позволяющей отображать и мониторить данные энергопотребления в реальном времени.
Контроллер Arduino пересылает данные о среднем энергопотреблении за последние 5 минут, а также данные энергопотребления в реальном времени.

Для детектирования мигания светодиода в схеме устройства применен фоторезистор. Он устанавливается на счетчик и прикрепляется к нему темным скотчем. Для чтения аналоговых данных от фоторезистора, применен простейший делитель напряжения.

Схема устройства

При мигании светодиода счетчика, на фоторезисторе создается падение напряжения. Arduino считывает это значение через АЦП и сравнивает его с значением напряжения после потенциометра, который подключен к выводу A0.
Полученные данные обрабатываются в программе, а затем передаются к компьютеру через Xbee модуль.

Фрагмент кода для сбора данных с счетчика:

В приведённом выше коде происходит сравнение двух напряжений, первое - снимаемое с делителя с фоторезистором, второе напряжение - с потенциометра. Если первое значение напряжения превышает значение напряжения с потенциометра, то устанавливается флаг "flag_acquire = 1". Затем происходит подсчет времени, которое прошло с последнего мигания светодиода.
Для этого, считывается значение внутреннего программного счетчика, которое возвращает количество миллисекунд, прошедшее с момента включения питания контроллера. Для этого, используется команда millis(), см. урок 3 (тайминг)

Здесь задействовано две переменных pre_tmS и cur_tmS, переменная "cur_tmS" необходима для чтения значения внутреннего счетчика: cur_tmS = millis (); Если условие cur_tmS> pre_tmS выполняется, то происходит замер времени между двумя циклами (вспышками светодиода на энергосчетчике), значение которого записывается в переменную "tm_diffS".
Далее, данные посылаются в ПК через модуль Xbee.

Arduino посылает флаг S, чтобы LabView понял, что передаваемые данные - это значения в реальном времени, а затем сами данные цикла в миллисекундах.
Теперь можно сбросить флаг, когда светодиод счетчика погас:

Здесь мы проверяем установлен ли flag_acquire в 1, и если флаг установлен и напряжение на фоторезисторе упало ниже заданного, то сбрасываем флаг в ноль. Далее идет инкрементируем переменную impulsi , которая служит для подсчет среднего энергопотребления за последние 5 минут.
Данное значение в дальнейшем также передается в LabView с меткой "L".

Полный код программы:

LabView

Для приема данных использовался модуль XBee UartSbee V3.1.

Интерфейс программы очень простой:

LabView

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

Читайте также: