Actor Framework

Общие принципы, проектирование, модуляризация, темплейты и шаблоны

Actor Framework

Postby taras_33 on 12 Dec 2015, 19:04

Доброго времени суток народ.
Хотел поинтересоваться: Почему на форуме не обсуждается Actor Framework? Это я про это Невероятно мощный инструмент, особенно полезный в больших проектах. Ведь на форуме кроме студентов, полно настоящих профессионалов. Просто "за державу обидно". На буржуйских форумах полно информации, а у нас кроме скромного упоминания ничего нет. Я как то задал вопрос пару месяцев назад, ответа не последовало. Думаю причины могут быть две. Либо никто не пользуется данным инструментом, либо просто не хотят делиться информацией, последняя более вероятная, хотелось бы понять почему.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
User avatar
taras_33
developer
developer
 
Posts: 283
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 130
CLD VIP

Re: Actor Framework

Postby Borjomy_1 on 12 Dec 2015, 19:20

Скорее всего первая причина. Во первых действительно больших проектов не так много. Во-вторых для разработчика приложений объекты вообще излишество... они востребованы больше при системном программировании.
Borjomy_1
expert
expert
 
Posts: 1872
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 321
VIP

Re: Actor Framework

Postby Kosist on 13 Dec 2015, 15:08

Честно говоря, хотел бы начать им пользоваться, но все руки не доходят... Хочется еще и HAL "поковырять", и испробывать на "боевом" проекте, но на все нужно время, и когда дело доходит до проекта - то приходится все делать галопом, и "традиционными" методами, привычными шаблонами...
Мы делили апельсин - много наших полегло...
User avatar
Kosist
leader
leader
 
Posts: 936
Joined: 21 Feb 2011, 23:44
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 259
CLAD I/O VIP students

Re: Actor Framework

Postby taras_33 on 13 Dec 2015, 17:45

В принципе, в качестве урока можно опубликовать небольшой проектик использующий AF, с картинками и пошаговыми инструциями. Вот только инструктор и писатель из меня никакой, да и времени это отнимет достаточно, возникает вопрос: A это кому нибудь нужно?
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
User avatar
taras_33
developer
developer
 
Posts: 283
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 130
CLD VIP

Re: Actor Framework

Postby dadreamer on 13 Dec 2015, 18:00

taras_33 wrote:A это кому нибудь нужно?

Конечно, я бы сам не прочь взглянуть на пример. Тем более что на портале подобных уроков нет.
User avatar
dadreamer
professor
professor
 
Posts: 3272
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2019
Karma: 822
I/O VIP vision internet

Re: Actor Framework

Postby taras_33 on 20 Dec 2015, 06:37

Поскольку я в первую очередь электронщик а уж потом програмист, вспомил как в детстве мигал светодиодом PIC контроллером и несказанно радовался. Чтобы не отступать от традиций решил помигать и сейчас. Только это будет не древний PIC и даже не любимый и везде используемый мною сейчас ARM, это будет LabVIEW и Actor Framework.
Сразу скажу что пример писал в LV2013, поэтому у кого LV2014 увидят вот такой крест.
LV2014.PNG
LV2014.PNG (696 Bytes) Viewed 12346 times

Работать будет, но могут быть глюки. Это из за того что в LV 2014 другая версия AF. Там еще проще работать с AF. Но лично мне больше по душе 2013 (контроля над проектом чуть побольше). О LV2015 ничего не скажу не пробовал и никогда не работал.
Что такое Actor? по сути дела это обычный Produser-Consumer, который по усмотрению пользователя может быть с UI и ивент структурой или без нее, без UI а заодно и без "верхнего while loop"
Сам проект разбит на программные модули. Кликаем VIEW -> LabVIEW Class Hierarchy.
Class Hierarchy.jpg
Class Hierarchy.jpg (17.98 KiB) Viewed 12346 times

Разархивируем проект и запускаем "Launcher" Launcher запускает UI (Main Panel) и Controller, который в свою очередь запускает два модуля LED1 и LED2. Оба модуля override update метод от модуля таймер. В этом вся прелесть OOP один раз написав код, можно его использовать как есть, наследуя от родителя, или изменять(override). Конечно в этом микроскопическом проекте это трудно оценить, да я и не ставил такую цель. В данном случае модуль таймера создает копию (clone) для каждого LED со своим временем (poll rate). Когда изменяюм частоту мигания (Time delay) мы посылаем сообщение в controller, который останавливает модуль LED записывает новый pool rate и снова запускает. Понимаю что сделано через задницу, но я повторюсь хотел показать возможности AF. Конечно можно подумать "чтобы помигать двумя светодиодами достаточно одного while loop и пары функций задержки времени" Согласен, только вот если проект разрастается, добавляются все новые и новые возможности, начинаешь понимать всю мощь и удобство AF
В реальных проектах используются Handle error, где очень удобно сделать Error logger или Last ACK, когда перед выходом из модуля необходимо произвести определнные действия, закрыть порты, выключить реле и т.д. и многие другие фишки AF. Здесь этого ничего нет, пытался сделать как можно проще.
P.S. извиняюсь за сумбур. Я предупреждал ранее, что писатель из меня плохой, я больше на обыкновенного буржуйского инженера смахиваю :)
Attachments
AF Blinking LED.rar
(526.56 KiB) Downloaded 164 times
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
User avatar
taras_33
developer
developer
 
Posts: 283
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 130
CLD VIP

Re: Actor Framework

Postby taras_33 on 27 Dec 2015, 02:46

Судя по "многочисленным коментариям" в этой теме, решил я сделать еще одну попытку донести до народа, что такое Actor Framework. Идея такая: создание простейшего проекта с одной кнопкой и одним индикатором, используя pattern называемый producer-consumer, затем шаг за шагом повторить тоже самое, только используя AF. Что ж приступим.

Часть первая: Template
Думаю что каждый знаком с pattern producer – consumer, блок диаграмма которого представлена ниже
Classic Producer-Consumer.jpg
Template

В приложении подопытный проект, над которым мы будем проводить эксперименты.
Attachments
AF for Dummies Part 1.zip
(20.45 KiB) Downloaded 169 times
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
User avatar
taras_33
developer
developer
 
Posts: 283
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 130
CLD VIP

Re: Actor Framework

Postby taras_33 on 27 Dec 2015, 02:59

Часть вторая: Добавление AF библиотеки к проекту
Надеюсь Вы скачали template из предыдущего поста и даже его где то сохранили :) Находим это место на диске и внутри папки “AF for Dummies” создадим папку “AF”, внутри которой добавим еще одну папку, обозвав ее “Main Class”.
В окне проекта клацаем правой кнопкой мыши (далее ПКМ) по My Computer и в выпадающем меню выбираем New -> Virtual Folder, назовем ее “AF”.
Virtual Folder.jpg

ПКМ по AF далее New -> VI. Сразу сохраним его Ctrl+S в созданную нами папку AF обозвав “Launcher.vi” Откроем блок диаграмму этого vi и перетащим на нее несколько функций из палитры Data Communication -> Actor Framework
LV 2013 AF Functions.jpg

LabVIEW 2013 нам нужны: Launch Actor, Obtain Message Queue, Read Enqueuer, Release Message Queue. Последние три можно найти Data Communication -> Actor Framework -> Message Queue

LabVIEW 2014 достаточно одной функции Launch Root Actor. Закройте Launcher.vi, сохранив его, провода соединим позже.
Как только мы добавили функции из палитры Actor Framework, LabVIEW автоматически добавит к проекту библиотеку Actor Framework.lvlib (можно посмотреть в окне проекта Dependencies -> vi.lib)
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
User avatar
taras_33
developer
developer
 
Posts: 283
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 130
CLD VIP

Re: Actor Framework

Postby taras_33 on 27 Dec 2015, 03:07

Часть третья: Создание класса

Теперь создадим Main Class. ПКМ по виртуальной папке AF -> New -> Class
Create Main Class.jpg

Назовем его Main FP и сохраним в папке Main Class. У меня проект лежит на рабочем столе, поэтому структура папок выглядит так.
Structure.jpg

У Вас должно быть что то похожее. Нет, ну конечно можно все свалить в кучу, в одну единственную папку, это как кому нравиться… Но я настоятельно рекомендую все раскладывать по полочкам, вернее папочкам, поскольку в будущем при Override родительских методов детьми, файлы будут иметь одинаковые имена, а windows, как известно не позволяет иметь два файла с одинаковыми именами в одном месте.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
User avatar
taras_33
developer
developer
 
Posts: 283
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 130
CLD VIP

Re: Actor Framework

Postby taras_33 on 27 Dec 2015, 03:15

Часть четвертая: Негоже быть беспризорным или удочерение класса (а может усыновление?)

Вернемся к нашим баранам, вернее проекту. Сделаем Main FP.lvclass “ребенком” от класса Actor, тем самым унаследовав его свойства и методы. В окне проекта ПКМ по Main FP.lvclass -> Property. Откроется окно свойств класса, где нам нужно изменить Inheritance, щелкнув по соответствующей кнопке

Change Inheritance.jpg


Откроется окошко в котом нужно выделить строчку Actor.lvclass и щелкнуть по кнопке Inherit From Selected, окошко закроется.

Change Inheritance 2.jpg


Закроем окно свойств кликнув Ок. (Можно перед закрытием на вкладке General Setting отредактировать иконку, щелкнув по кнопке Edit Icon, как это сделал я, написав “MAIN”)
Edit Icon.jpg
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
User avatar
taras_33
developer
developer
 
Posts: 283
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 130
CLD VIP

Re: Actor Framework

Postby taras_33 on 27 Dec 2015, 03:24

Часть пятая: Actor Core или окно User Interface
В окне проекта ПКМ по Main FP.lvclass -> New -> VI for override

Override.jpg


В открывшимся окошке выделяем Actor Core и щелкаем Ок

Actor Core.jpg
Actor Core.jpg (57.42 KiB) Viewed 12242 times


Не отходя от кассы, сохраняем его в папку Main Class (имя Actor Core не меняем). Вот этот VI и будет нашей главной Front Panel, из чего следует, что здесь нам нужно построить UI (юзер интерфейс) В нашем случае это кнопка и индикатор. Для начала Hide (спрячем) с FP мешающие нам controls и indicators. На блок диаграмме ПКМ по каждому из них и выбираем из выпадающего меню Hide. Заодно в этом же меню можно убрать птичку View As Icon (если это не сделано в настройках LabVIEW по умолчанию), так они места меньше занимают на блок диаграмме.

Hide controls.jpg
Hide controls.jpg (34.8 KiB) Viewed 12242 times
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
User avatar
taras_33
developer
developer
 
Posts: 283
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 130
CLD VIP

Re: Actor Framework

Postby taras_33 on 27 Dec 2015, 03:36

Часть шестая: Строим UI

Открываем Actor Core. Добавте на FP одну кнопку и один Boolean индикатор, обозвав его LED. Прошлый раз я обновлял индикаторы (мигал светодиодами) используя user event-ы, давайте для разнообразия менять состояние идикатора будем используя его reference, поэтому ПКМ по индикатору LED -> Create -> Reference

LED reference.jpg


Итак Reference мы создали, теперь нужно поместить этот тип данных в Main FP кластер. Для этого двойным щелчком открывает Main FP.ctl, берем с блок диаграммы только что созданный reference (ссылку) и не отпуская кнопку мыши тащим его на FP ctl

Reference to claster.jpg


Переименуем Bool Refnum в LED Ref и переместим внутрь кластера

Into Cluster.jpg
Into Cluster.jpg (46.83 KiB) Viewed 12241 times


Закрываем нажав на крестик Main FP.ctl соглашаемся сохранить изменения.
Last edited by taras_33 on 27 Dec 2015, 04:40, edited 1 time in total.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
User avatar
taras_33
developer
developer
 
Posts: 283
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 130
CLD VIP

Re: Actor Framework

Postby taras_33 on 27 Dec 2015, 03:46

Часть седьмая: Метод класса и Message Maker

Создаем метод класса, который будет менять состояние индикатора. ПКМ по Main FP.lvclass -> New -> VI from Static Dispatch Template. Откроется новый VI, сохраним его в папку Main Class под именем Update LED.vi и модифицируем блок диаграмму.

update method.jpg


Закрываем, сохранив изменения. Теперь самое интересное. Идем в Tools –> Actor Framework Message Maker

Message Maker.jpg


Откроется окошко, вверху выбираем наш проект с одним единственным методом Update LED, выделяем его и кликаем Build Selected. Ждем пока LabVIEW сгенерирует три Vis. Закрываем Message Maker и три сгенерированных Vis, они пока нам не нужны.

Build Selected.jpg


У нас в проекте появится Update LED Msg.lvclass , на диске рядом с папкой Main Class будет создана еще одна папка с названием Main FP Messages, внутри которой будет еще одна папка с названием нашего метода, внутри которой буду помещены сгенерированные три Vis. Давайте и мы в проекте создадим виртуальную папку, обзовём ее Messages for Main class и поместим (перетащим мышкой) туда Update LED Msg.lvclass ПКМ на AF -> New -> Virtual Folder

Move to VF.jpg
Move to VF.jpg (46 KiB) Viewed 12241 times
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
User avatar
taras_33
developer
developer
 
Posts: 283
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 130
CLD VIP

Re: Actor Framework

Postby taras_33 on 27 Dec 2015, 03:53

Часть восьмая: Блок диаграмма Main FP

Строим блок диаграмму Main FP.
Открываем Actor Core.vi, помещаем на блок диаграмму Read Self Enqueuer.vi, который можно найти в палитре Actor Framework, создаем в Event структуре событие Value Change кнопки и перетаскиваем из окна проекта в это событие сгенерированный на предыдущем шаге Send Update LED.vi, остальное соединяем в соответствии с рисунком.

Send update.jpg


Создаем еще одно событие Panel Close? и помещаем из палитры Actor Framework Send Normal Stop.vi

Panel Close.jpg
Panel Close.jpg (24.26 KiB) Viewed 12241 times
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
User avatar
taras_33
developer
developer
 
Posts: 283
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 130
CLD VIP

Re: Actor Framework

Postby taras_33 on 27 Dec 2015, 04:15

Часть девятая: Start или Launcher

Осталось закончить Launcher.vi , созданный в самом начале. Открываем его блок диаграмму и захватив мышкой в окне проекта Main FP.lvclass перетаскиваем его на блок диаграмму.
LabVIEW 2013 блок диаграмма Launcher.vi выглядит так:

Launcher LV2013.jpg


В LabVIEW 2014 , жизнь упростили, но лишили … впрочем это уже другая история…

Launcher LV2014.jpg
Launcher LV2014.jpg (9.37 KiB) Viewed 12242 times


Вот собственно и все, сохраняем, запускаем Launcher.vi
В приложении проект, над которым мы измывались. Еще посоветую не останавливать запущеный VI этой кнопкой
Stop.jpg
Stop.jpg (2.72 KiB) Viewed 12242 times
Если будете работать с AF, поймете почему. Поскольку данный проект содержит один единственный Actor, то эта проблема здесь не проявится. И все же лучше выключать компьютер через shutdown, а не выдергиванием шнура из розетки

Всех с наступающим Новым Годом, надеюсь что время потратил не зря, писав эту эпопею...
Attachments
AF for Dummies.zip
(721.48 KiB) Downloaded 160 times
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
User avatar
taras_33
developer
developer
 
Posts: 283
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 130
CLD VIP

Next

Return to Модели программирования

Who is online

Users browsing this forum: No registered users and 1 guest

cron