Події (Events) у LabVIEW 2


Як на мене, однією з проблем сучасної освіти є використання дещо неактуальної інформації, в результаті чого студенти порою просто не розуміють яким чином працює та чи інша фіча. Елементарний приклад: програмування. Для більшості нефахівців (тобто студентів, які, хоч і навчаються за технічним спрямуванням, та не є мають стати програмістами) шкільна програма інформатики (привіт, Turbo Pascal) – вершина знань. І це ще у кращому випадку.

А тим часом операційні системи вже давно відійшли від однозадачної матінки MS DOS і почали бодай прикидатися багатозадачними. І заборонений у тому ж Турбо Паскалі “вічний цикл” у сучасних програмах є цілком адекватною і звичною штукою.

Переважно програма собі тихенько робить свою справу, перебуваючи десь у фоні, і чекає, поки їй скажуть якось змінити свою поведінку. Простіше кажучи, програма чекає настання деякої події, або ж івенту (event).

Типовий приклад такого явища – поява якоїсь підказки при наведенні курсора миші на кнопку. Або колись була така жартівлива програма, яка питала у віконечку чи влаштовує Вас зарплата (там були кнопки “Так” і “Ні”, але кнопка “Ні” постійно втікала від миші). Тут не обійшлося без обробки подій, але давайте ближче до LabVIEW.

Уявімо собі, що у нас є якась програма із двома вкладеними циклами. І є якась кнопка “Стоп”, яка має зупиняти роботу програми, але крім цього вона конче мусить керувати ще чимось і має знаходитися у зовнішньому циклі.

Події у LabVIEW

Події у LabVIEW

Ясно, що зупинити програму таким чином не вийде, бо кнопка у нас в зовнішньому циклі, а внутрішній працюватиме вічно, адже команду “стоп” чекає з зовні. Звичайно, кнопка – то дуже простий приклад і насправді все значно складніше, але маємо наочно представлену проблему, яка легко вирішується за допомогою використання подій:

LabVIEW - обробка подій

LabVIEW - обробка подій

Тут ми у внутрішньому циклі розмістили спеціальну структуру Event Structure (пам’ятаємо, що всередині структури можна писати якийсь код) і налаштували її на опрацювання певної події, що генерується нашою кнопкою “STOP”. При цьому не має ніякого значення, де розміщено саму кнопку, бо подія – то аналог переривання, вона має вищий пріоритет і тому при її настанні керування передається до Event Structure.

Загалом Event Structure нагадує Case Structure, тільки перемикання станів тут здійснюється не за допомогою якогось керуючого терміналу, а стан активується при виникненні певних подій, які він має опрацьовувати. Сама іконка цієї структури знаходиться у палітрі All Functions -> Structures і має характерний вигляд рамки з буквою “е” всередині:

Event Structure у LabVIEW

Event Structure у LabVIEW

Відразу після розміщення на блок-діаграмі ця структура вміє опрацьовувати лише одну подію – таймаут (TimeOut). тому відразу ж скористаємося контекстним меню і виберемо там опцію “Add Event Case“.

Додаємо Event Case

Додаємо Event Case

Результатом буде поява вікна “Edit Events”, у якому можна вибрати джерело події, яка нас цікавить, та різновид події від цього джерела.

Вікно "Edit Events"

Вікно "Edit Events"

Вгорі вікна ми можемо бачити список подій, які вже опрацьовуються даним станом структури (їх може бути кілька, додати нову подію можна за допомогою кнопки з плюсом, розташованої зліва від списку). У нижній частині зліва бачимо список джерел (програма – Application, поточний віртуальний прилад – This VI, та список регуляторів – Controls, у якому в нас, наразі, одна кнопка). Вибравши потрібне джерело, справа бачимо події, які можуть для нього виникати. Для кнопки це не просто натискання, а ще й, наприклад, вхід/вихід курсору миші.

В загальному, ніби, все. Наостанок кілька нюансів, які варто мати на увазі. По-перше, відстежувати події треба у циклі (тобто структуру Event Structure розміщувати всередині циклу). По-друге, не варто в одному циклі розміщувати більше однієї Event Structure. По-третє, відстежувати натискання кнопок, які мають здатність “залипати” варто подією Value Change.

Почитайте ще оце:


Залиште коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

2 thoughts on “Події (Events) у LabVIEW