Запаковать Actor

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

Activity Автор
professor
professor
Сообщения: 3586
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 57 раз
Поблагодарили: 194 раза
Контактная информация:

Запаковать Actor

Сообщение Artem.spb »

Задача: сделать максимально модульную программу, чтобы новые запчасти добавлять через пакеты, не перекомпилируя весь exe. Более того (наглость какая), распараллелить разработку.
идея: "скомпилировать" AF, каждому разработчику дать пакет для наследования и от него уже плясать.

Дальше хуже, я сделал базовый UI класс, в котором основные/общие функции уже реализованы.
Т.е. такая иерархия: AF -> UIbase -> module1..2...3...

Сначала запаковал UIbasе, но он отказывается работать с AF в исходниках.
Нашёл эту статью и запаковал до кучи сам AF
https://knowledge.ni.com/KnowledgeArtic ... 0015A6NSAU
Так что теперь это должно выглядеть так
AF.PPL -> UIbase.PPL -> module1.PPL

Но тут началась полная ерунда.
UIbase весь поломан. Ок, возможно, я там ещё смогу починить, он мог что-то старое подтянуть.
Но и module не хочет толком работать пока.
И ещё одна странность этого подхода: каждый раз, когда я делаю create actor message система спрашивает у меня 3-4 AF - файла, т.е. скрипт, который строит сообщения всё ещё пытается найти оригинальный AF (я его пока удалил из program files, чтобы хвосты все убрать). Это мягко говоря не удобно, вместо того, чтобы выбрать 5 vi и сделать махом для всех сообщения, я сижу и 5*4 раз тыкаю нужную функцию из ppl.

Собственно вопрос: как это всё по-человечески сделать?
Думаю в том числе про интерфейсы, из тоже буду собирать в PPL, но мне нужны реализации некоторых функций, а не только шаблоны.
Этот проект в LabVIEW 25 делаю.
Исходники не жалко, могу скинуть, там пока ничего секретного нет.
Аватара пользователя
taras_33

Activity
professional
professional
Сообщения: 395
Зарегистрирован: 31 окт 2009, 18:25
Награды: 1
Версия LabVIEW: 2019
Поблагодарили: 14 раз
Контактная информация:

Re: Запаковать Actor

Сообщение taras_33 »

Я в некоторых проектах использую нечто похожее. Преследовал идею изменения внешнего вида и алгоритма работы отдельного модуля, без компиляции всего проекта — получилось.
Структура следующая, см скриншот — это проект отдельного модуля.
Default.PNG
Все скомпилировано в *.lvlip , включая сам Actor Framework. Модуль представляет собой UI с кнопками, графиками и прочей лабудой, причем у каждого модуля свои кнопки и графики. Создаешь новый UI, компилируешь и удаленно copy/paste в папку Plagins на таргет машине. Основная программа при запуске из этой папки создает список в Combobox. Юзер щелкнув в этом списке на строчку, останавливает старый (если он там был) и запускает новый модуль, который вставляется в SubPanel. См скриншот
Load UI.PNG
Для каждой PPL свой проект, хотя видел как нормальные люди работают в одном проекте со всем хозяйтсвом — очень удобно при отладке. Но переделывать не буду, поскольку уже все отлажено и работает.

Это проект основной программы на стадии отладки, в котором подгружены скомпилированные модули… break point хрен поставишь :)
Main.PNG
Что не нравится: Запускаешь программу, выбираешь нужный модуль, работаешь с ним, выбираешь другой модуль, предыдущий удаляется из SubPanel и загружается новый. НО! Удаленный модуль из SubPanel остается в памяти. В моем случае не критично, размер модуля небольшой, основной код сосредоточен в Root и Main. Но факт остается фактом. Вот собственно как то так..
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!
Artem.spb

Activity Автор
professor
professor
Сообщения: 3586
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 57 раз
Поблагодарили: 194 раза
Контактная информация:

Re: Запаковать Actor

Сообщение Artem.spb »

Так много вопросов, так мало ответов :)
Это именно то, что мне надо и то, как я пытаюсь это сделать.

1) куда вы запрятали casting*.vim файл? У меня дочерние авторы требуют его, но запаковать в библиотеку его тоже невозможно, поэтому я копирую его рядом с библиотекой.
2) оригинальный актор на месте остался? не мешает при работе, система не подтягивает его вместо библиотеки по ошибке?
3) как обстоят дела с построением сообщений?
Аватара пользователя
taras_33

Activity
professional
professional
Сообщения: 395
Зарегистрирован: 31 окт 2009, 18:25
Награды: 1
Версия LabVIEW: 2019
Поблагодарили: 14 раз
Контактная информация:

Re: Запаковать Actor

Сообщение taras_33 »

Отлучился по бизнес делам. Нарисуюсь в пятницу. Если сильно не напрягут, то попробую набросать пример в LV2025
1 Никакого файла *.vim Аctor-ы у меня не требуют.
2 Скомпилированный AF у меня находится рядом с оригинальной AF библиотекой. Имена одинаковые, но расширения то разные.
3 Сообщения строятся без задавания лишних вопросов и выскакивания окон.
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!
Artem.spb

Activity Автор
professor
professor
Сообщения: 3586
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 57 раз
Поблагодарили: 194 раза
Контактная информация:

Re: Запаковать Actor

Сообщение Artem.spb »

Спасибо за ответы, работа сдвинулась со стопора.
taras_33 писал(а): 15 май 2025, 04:54 2 Скомпилированный AF у меня находится рядом с оригинальной AF библиотекой. Имена одинаковые, но расширения то разные.
Видимо, этот шаг сильно упрощает дальнейшие действия. Всё то, что у меня система требовала теперь находится без проблем.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3586
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 57 раз
Поблагодарили: 194 раза
Контактная информация:

Re: Запаковать Actor

Сообщение Artem.spb »

Что-то у меня сломалось.
1) есть несколько base и интерфейсов. Каждый отдельно запакован в библиотеку. Все, кроме AF лежат в /proj/data/
l1.png
l1.png (5.16 КБ) 556 просмотров
2) делаю модуль для дебага, он наследует интерфейс и base. Этот модуль тоже собираю в .lvlibp
l2.png
l2.png (4.85 КБ) 556 просмотров
Естесвенно при сборке все зависимости копируются в /build/ каталог.

3) переношу .lvlibp в /proj/modules/ но без зависимостей, потому что они и так в проекте.
И ещё, в конечной сборке планирую все зависимости хранить в /data/, а модули в /modules/

4) теперь пытаюсь запустить это из файла (файлов)
l3.png
Но программа ругается, что для этого придётся загрузить в память конфликтующие библиотеки, те самые базовые, но из других папок (где их на самом деле нет)
Ну и до кучи все эти собранные библиотеки ищут сборку AF в той же папке, а не в program files
l4.png
собственно вопрос, как исправить все эти зависимости, чтобы всё грузилось, откуда должно грузиться?
Artem.spb

Activity Автор
professor
professor
Сообщения: 3586
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 57 раз
Поблагодарили: 194 раза
Контактная информация:

Re: Запаковать Actor

Сообщение Artem.spb »

В процессе трабл-шутинга нашёл эту статью
https://forums.ni.com/t5/Actor-Framewor ... -p/3776945
если кому-то понадобится, там
This is not a step-by-step tutorial but rather a bunch of examples on different Actor Framework concepts
однако,
I have created several Actor Framework examples that I want to share with you. They go from a basic example to an example with packed project library plugins.
даёт хорошее представление, как это надо делать (с поправкой на реальные интерфейсы, которые добавили позже, чем появился этот пример)

В моём случае ключевой галкой оказалась эта
l5.png
После этого предыдущие (родители) пакеты остались на месте и программа перестала грузить их откуда попало.
Ответить

Вернуться в «Модели программирования»