2015-10-16 3 views
3

Если я помещаю блоки, показанные на картинке во время цикла, все не работает, например, кнопка остановки не работает! Кто-то может объяснить мне, как правильно использовать события?Управление событиями-событиями во время цикла

enter image description here

благодарит

+0

Tangent Я заметил, глядя на вашу диаграмму: вы, кажется, не знаете о autoindexing For Loops. Вам не нужно подключать терминал N. Ваш массив цветов имеет необходимый размер, поэтому просто щелкните правой кнопкой мыши по туннелю цикла и выберите «Включить индексирование». Это спасет вас куском логики +1 и -1, чтобы попытаться вычислить этот N-терминал. – srm

ответ

4

Вы не подключили терминал тайм-аут.

Как он всегда ждет события и не позволит вам остановить цикл. Поскольку он не итерации, он ждет.

Чтобы остановить цикл, вы должны указать кнопку «Stop button», поэтому ваш цикл будет итерации при нажатии на остановку, и вы сможете остановить его. ИЛИ вы можете просто указать тайм-аут, скажем, 100 мс, а Loop будет итерации по тайм-ауту один раз каждые 100 мс, даже если нет события.

+0

Я внес изменения в этот ответ, который, надеюсь, будет рассмотрен экспертом. Даже после того, как эти изменения приняты, мой общий ответ заключается в том, что архитектура, которую вы показали выше, не очень хорошая. Он не будет хорошо масштабироваться, и пары будут слишком много вместе. Вместо этого, есть два параллельных цикла while ... у одного есть только структура событий с таймаутом NO; он помещает массивы данных в очередь. Другой цикл while считывает из очереди, чтобы извлекать данные и выводить их по команде. Тогда вы не тратите время на переработку процессорных циклов. Уничтожьте очередь, чтобы остановить второй цикл. – srm

5

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

+1

Спасибо за ваш совет, я буду углубленно изучать этот аргумент –

0

Другие ответы говорят вам, как исправлять код, чтобы ваша текущая архитектура продолжала работать. Но эта архитектура в корне ошибочна, если ваше приложение становится больше - вы будете тратить много времени на перерисовку процессора, и вы закончите с отставанием в пользовательском интерфейсе. Правильное разделение логической логики от графической логики будет выглядеть так, как показано на рисунке ниже. Это изображение представляет собой LV-клип с LV 2015, то есть если вы сохраните изображение на диск, а затем перенесите его прямо на LV 2015 или более поздней версии, код просто снижается напрямую. К сожалению, у меня нет более ранней версии LV со мной в данный момент, поэтому я не могу дать вам клип для предыдущей версии, но приведенный ниже код должен полностью работать с LV 6.1 (около 2001a.d.), если вы его перекодируете. enter image description here