Архитектура Plug-in

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

Архитектура Plug-in

Postby arevhamb on 15 Jan 2017, 20:24

Иногда требуется расширить функциональные возможности программного обеспечения, когда оно уже скомпилировано и установлено. В этом случае часто используется архитектура Plug-in, которая позволяет добавление функциональных блоков в виде plug-in-ов.

Прикрепленная презентация описывает plug-in архитектуру с использованием packed project библиотек. Такие библиотеки позволяют передавать коды в скомпилированном виде, без блок диаграмм. Таким образом возможно добавить новые функции в ПО, только передавая библиотеку plug-in-ов.
Attachments
PPL_and_Plugin.pdf
(397.57 KiB) Downloaded 111 times
arevhamb
interested
interested
 
Posts: 9
Joined: 15 Feb 2016, 15:36
Medals: 1
Bronze (1)
LabVIEW Version: 2014
Karma: 20
VIP

Re: Архитектура Plug-in

Postby taras_33 on 15 Jan 2017, 21:37

Меня интересует эта тема давно, где простейший пример посмотреть? Используя в своих проектах 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
adviser
adviser
 
Posts: 230
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 118
CLD VIP

Re: Архитектура Plug-in

Postby Kosist on 15 Jan 2017, 23:18

taras_33 wrote:Меня интересует эта тема давно, где простейший пример посмотреть?

Посмотрите ссылки здесь - https://forums.ni.com/t5/Mass-Compilers ... -p/3490662, последний ответ в той теме. Мне оттуда пример https://forums.ni.com/t5/LabVIEW-Develo ... -p/3514395 помог был.
Насчет вопроса удаления дочерних классов при Factor Pattern - вполне возможно, что ситуация так и не поменялась; так что прошлые ссылки валидны - такие, как https://lavag.org/topic/17726-factory-p ... om-memory/.
Но вот я подумал - при использовании классов типа GOOP, что работают через Memory Reference - для них есть метод Destoy. Может он "униичтожает" ссылку на класс, а значит, и освобождает память? Вы пробовали играться с GOOP-ными классами?
Мы делили апельсин - много наших полегло...
User avatar
Kosist
leader
leader
 
Posts: 871
Joined: 21 Feb 2011, 23:44
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 245
CLAD I/O VIP students

Re: Архитектура Plug-in

Postby taras_33 on 16 Jan 2017, 04:03

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

Далее попытаюсь прикрутить к нему Actor Framework, посмотрю что из этого выйдет, придвижу много "граблей".
Attachments
Post-Build Action.png
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
adviser
adviser
 
Posts: 230
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 118
CLD VIP

Re: Архитектура Plug-in

Postby alex3f on 16 Jan 2017, 08:39

taras_33,
Attachments
Post-Build Action.png
alex3f
beginner
beginner
 
Posts: 15
Joined: 23 Aug 2016, 09:16
LabVIEW Version: 2016
Karma: 10

Re: Архитектура Plug-in

Postby Kosist on 16 Jan 2017, 08:57

taras_33 wrote:Все работает, только не совсем понял что делать с этим файлом в библиотеку он не включен, нигде не вызывается.. назначение его понятно, не понятно как использовать (см картинку)

Далее попытаюсь прикрутить к нему Actor Framework, посмотрю что из этого выйдет, придвижу много "граблей".

Это ведь Post Build Action,
viewtopic.php?f=84&t=9034
Если правильно помню, в это случае он удаляет "лишние" виайки после компиляции; чтобы не было конфликта при загрузке плагинов.
Мы делили апельсин - много наших полегло...
User avatar
Kosist
leader
leader
 
Posts: 871
Joined: 21 Feb 2011, 23:44
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 245
CLAD I/O VIP students

Re: Архитектура Plug-in

Postby taras_33 on 16 Jan 2017, 15:14

Спасибо, буду знать. В который раз убеждаюсь в верности пословицы "Век живи, век учись, а дурнем здохнешь" :haha:
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
adviser
adviser
 
Posts: 230
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 118
CLD VIP

Re: Архитектура Plug-in

Postby taras_33 on 21 Jan 2017, 00:25

Вообщем попытки прикрутить Actor Framework и работать с PPL архитектурой принесли свои плоды. После трехдневных экспериментов и хождений по форумам от NI кое что получилось. Вот пара ссылок (ссылка раз, ссылка два), где люди описывают хождения по граблям и возможные решения
Если в двух словах, то:
первое - делать библиотеку Actor Framework.lvlibp из библиотеки Actor Framework.lvlib , нужно в проекте ссылаясь на source где эта библиотека расположена при установке LabVIEW , в моем случае это C:\Program Files (x86)\National Instruments\LabVIEW 2016\vi.lib\ActorFramework\Actor Framework.lvlibp , если скопировать в другое место и скомпилировать то message maker не работает - выскакивает ошибка 1448.
Второе это заменить Actor Framework.lvlib на Actor Framework.lvlibp по упамянутому выше адресу, а также щелкнуть правой кнопкой в Dependencies (Project Explorer) на Actor Framework.lvlib и в выпадающем меню выбрать "replace with Actor Framework.lvlibp" кажется так называется.
Все!!! Можно пользоваться, работает на ура.
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
adviser
adviser
 
Posts: 230
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 118
CLD VIP

Re: Архитектура Plug-in

Postby Kosist on 14 Dec 2017, 08:49

taras_33, a у Вас есть простенький пример, как именно с акторами сделать плагин для ран-тайма? Если есть, можете поделиться, пожалуйста? Т.к. плагин с просто классами - получается сделать, все работает. А с акторами не могу понять, что и как билдить... Каждый актор отдельно в свою ppl? С другой стороны, в исходном коде не хотелось бы использовать ppl вообще, т.к. тогда будут проблемы, если серьезно в ней что-то менять + если менять версию LabVIEW. В случае просто классов, я делаю Source Distribution классов, и включаю это в exe; то же хотелось бы сделать и для либы актора...
Заранее спасибо за любой ответ :thank:
Мы делили апельсин - много наших полегло...
User avatar
Kosist
leader
leader
 
Posts: 871
Joined: 21 Feb 2011, 23:44
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 245
CLAD I/O VIP students

Re: Архитектура Plug-in

Postby taras_33 on 14 Dec 2017, 22:01

AF_Lib.png


Далее в проект добавляете эту скомпилированную либу и наследуете от нее своих актеров.
А дальше работаете как обычно.
В Вашей PPL может быть сколько угодно актеров. Вот здесь почитайте, должно помочь
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
adviser
adviser
 
Posts: 230
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 118
CLD VIP

Re: Архитектура Plug-in

Postby taras_33 on 21 Dec 2017, 05:39

taras_33, a у Вас есть простенький пример, как именно с акторами сделать плагин для ран-тайма? Если есть, можете поделиться, пожалуйста? Т.к. плагин с просто классами - получается сделать, все работает. А с акторами не могу понять, что и как билдить...


Проникся просьбой, нашел время, так как простенького примера небыло, пришлось сделать. Разархивируем и видим папку с проектами. Открываем проект PPL и запускаем Launcher. В выпадающем меню выбираем какой плагин (Actor) загрузить(запустить). Появится предупреждение -> нажимаем Add. Появятся куча предупреждений в Dependencies - игнорируем. В исполняемом файле никаких предупреждений нет. Народ борется с этим, я приводил ссылку в предыдущем посте. Собственно поиграйтесь поймете.

Ну вот поигрались, теперь скопируем папку Actor C из папки To Add в папку Plugins. Запустим Launcher - теперь дополнительно в двум Аctor-ам появился третий. Вот именно в этом вся красота. Независимо от главной программы скомпилировали библиотеку, положили ее в нужную папку и все. Программа подхватит ее при старте.

Теперь насчет build. Когда будете билдить не забывайте удалять дубликаты, либо пользуйтесь Post Build Action, если надоест удалять вручную. На примере: Открываем проект Actor A который лежит в LV_Test_PPL\PPL_Projects\Actor A. Чего то там меняем и билдим. В папке LV_Test_PPL\Plugins\Actor_A (если пути билда не менялись) помимо Actor_A.lvlibp Появятся еще две либы Actor Framework.lvlibp и Abstract.lvlibp вот собственно их и нужно удалить. Они уже есть и лежат в LV_Test_PPL\LIB\Abstract.
Если посмотрите иеархию класов (после добавления их в main),
Class Hierarchy.png

то увидите, что актеры A, В и С потомки класса Abstract, из чего следует вывод что у них должет быть общий интерфейс.
Attachments
LV_Test_PPL.zip
(817.65 KiB) Downloaded 59 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
adviser
adviser
 
Posts: 230
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 118
CLD VIP

Re: Архитектура Plug-in

Postby Kosist on 21 Dec 2017, 13:54

taras_33, спасибо! Прошлую неделю и эту был вне работы, так что буду клацать сейчас...
Мы делили апельсин - много наших полегло...
User avatar
Kosist
leader
leader
 
Posts: 871
Joined: 21 Feb 2011, 23:44
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 245
CLAD I/O VIP students

Re: Архитектура Plug-in

Postby taras_33 on 21 Dec 2017, 15:27

Пожалуйста. Когда архивировал, забыл удалить папку Actor C из папки Plugins так что ничего копировать из папки To Add не нужно, он уже скопирован. Можно наоборот удалить и увидеть что он также пропадает из меню выбора.
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
adviser
adviser
 
Posts: 230
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 118
CLD VIP

Re: Архитектура Plug-in

Postby Kosist on 05 Jan 2018, 09:44

Интерестный пример, спасибо! Я попробывал, все работает. Но разрешите еще один вопрос. В коде, Вы сразу используете уже забилденные либы, или вначале используете их в исходном состоянии. Я о чем - если в основном приложении использовать функции из lvlibp, то тогда при каждой модификации интерфейса плагина нужно будет ребилдить либу. Не очень удобно... Если переходить на lvlibp в конце проекта, когда уже все сделано и работает - тогда шансов на правку меньше. Вы так делаете, или?..
Но если уже перейти на lvlibp, то тогда сложнее переделать все опять под исходный код - например, если нужно будет переходить на другую версию LabVIEW. Ведь lvlibp не подгрузится в другой LV версии.
Или же, имеет смысл делать плагинами только те акторы, которые полностью самостоятельные, и с ними никто "напрямую" не общается, не посылает сообщения? Ведь тогда даже метод посылки сообщения будет в составе lvlibp... Если актор работает сам по себе, как мини-отдельная аппликация, то тогда проблем я не вижу, там будет все проще - нужно будет поменять метод вызова актора, и можно будет вызывать либо из lvlibp, либо из исходной либы. Но, наверное, если общаться с тем актором через сообщения, то функции посылки сообщений будут в составе lvlibp, и тогда в случае чего, нужно будет все менять руками... Я прав?
Заранее спасибо за ответ!
Мы делили апельсин - много наших полегло...
User avatar
Kosist
leader
leader
 
Posts: 871
Joined: 21 Feb 2011, 23:44
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 245
CLAD I/O VIP students

Re: Архитектура Plug-in

Postby taras_33 on 07 Jan 2018, 05:38

Забилденные. В либу Actor Framework.lvlibp нечего вообще лазить, только если четко понимаешь что делаешь. А в приведенном примере либа Abstract.lvlibp, вернее содержащийся в ней клас вообще пустой, посмотрите в папке PPL_Projects->Abctract. Он служит в роли родителя и должен быть включен в главную программу на этапе компиляции. Иначе что подавать на вход target class, функции To More Specific Class? Именно поэтому все плагины, читай дети, должны быть наследованны от этого класса, даже если он не содержит ни каких данных и ни одного метода. Нет, конечно он может содержать методы, которыми будут пользоваться его потомки, тут уж Ваши желания и фантазия будут решать... По поводу переноса на другие версии, тут да, затык. Нужно пересобирать все заново. Да и зачем собственно полностью переходить на эту архитектуру? Я ее использую, когда мне постоянно нужно менять Front Panel, и что самое важное, я не знаю какая она понадобится завтра или через неделю. Так вот что бы исключить постоянное перекомпилирование всего проекта я пользуюсь этой архитектурой.
User avatar
taras_33
adviser
adviser
 
Posts: 230
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 118
CLD VIP

Next

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

Who is online

Users browsing this forum: No registered users and 1 guest

cron