Задача: сделать максимально модульную программу, чтобы новые запчасти добавлять через пакеты, не перекомпилируя весь 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 делаю.
Исходники не жалко, могу скинуть, там пока ничего секретного нет.
Запаковать Actor
-
taras_33
- professional
- Сообщения: 395
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 14 раз
- Контактная информация:
Re: Запаковать Actor
Я в некоторых проектах использую нечто похожее. Преследовал идею изменения внешнего вида и алгоритма работы отдельного модуля, без компиляции всего проекта — получилось.
Структура следующая, см скриншот — это проект отдельного модуля. Все скомпилировано в *.lvlip , включая сам Actor Framework. Модуль представляет собой UI с кнопками, графиками и прочей лабудой, причем у каждого модуля свои кнопки и графики. Создаешь новый UI, компилируешь и удаленно copy/paste в папку Plagins на таргет машине. Основная программа при запуске из этой папки создает список в Combobox. Юзер щелкнув в этом списке на строчку, останавливает старый (если он там был) и запускает новый модуль, который вставляется в SubPanel. См скриншот Для каждой PPL свой проект, хотя видел как нормальные люди работают в одном проекте со всем хозяйтсвом — очень удобно при отладке. Но переделывать не буду, поскольку уже все отлажено и работает.
Это проект основной программы на стадии отладки, в котором подгружены скомпилированные модули… break point хрен поставишь
Что не нравится: Запускаешь программу, выбираешь нужный модуль, работаешь с ним, выбираешь другой модуль, предыдущий удаляется из SubPanel и загружается новый. НО! Удаленный модуль из SubPanel остается в памяти. В моем случае не критично, размер модуля небольшой, основной код сосредоточен в Root и Main. Но факт остается фактом. Вот собственно как то так..
Структура следующая, см скриншот — это проект отдельного модуля. Все скомпилировано в *.lvlip , включая сам Actor Framework. Модуль представляет собой UI с кнопками, графиками и прочей лабудой, причем у каждого модуля свои кнопки и графики. Создаешь новый UI, компилируешь и удаленно copy/paste в папку Plagins на таргет машине. Основная программа при запуске из этой папки создает список в Combobox. Юзер щелкнув в этом списке на строчку, останавливает старый (если он там был) и запускает новый модуль, который вставляется в SubPanel. См скриншот Для каждой PPL свой проект, хотя видел как нормальные люди работают в одном проекте со всем хозяйтсвом — очень удобно при отладке. Но переделывать не буду, поскольку уже все отлажено и работает.
Это проект основной программы на стадии отладки, в котором подгружены скомпилированные модули… break point хрен поставишь

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!
So far, the Universe is winning!
-
- professor
- Сообщения: 3586
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 57 раз
- Поблагодарили: 194 раза
- Контактная информация:
Re: Запаковать Actor
Так много вопросов, так мало ответов 
Это именно то, что мне надо и то, как я пытаюсь это сделать.
1) куда вы запрятали casting*.vim файл? У меня дочерние авторы требуют его, но запаковать в библиотеку его тоже невозможно, поэтому я копирую его рядом с библиотекой.
2) оригинальный актор на месте остался? не мешает при работе, система не подтягивает его вместо библиотеки по ошибке?
3) как обстоят дела с построением сообщений?

Это именно то, что мне надо и то, как я пытаюсь это сделать.
1) куда вы запрятали casting*.vim файл? У меня дочерние авторы требуют его, но запаковать в библиотеку его тоже невозможно, поэтому я копирую его рядом с библиотекой.
2) оригинальный актор на месте остался? не мешает при работе, система не подтягивает его вместо библиотеки по ошибке?
3) как обстоят дела с построением сообщений?
-
taras_33
- professional
- Сообщения: 395
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 14 раз
- Контактная информация:
Re: Запаковать Actor
Отлучился по бизнес делам. Нарисуюсь в пятницу. Если сильно не напрягут, то попробую набросать пример в LV2025
1 Никакого файла *.vim Аctor-ы у меня не требуют.
2 Скомпилированный AF у меня находится рядом с оригинальной AF библиотекой. Имена одинаковые, но расширения то разные.
3 Сообщения строятся без задавания лишних вопросов и выскакивания окон.
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!
So far, the Universe is winning!
-
- professor
- Сообщения: 3586
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 57 раз
- Поблагодарили: 194 раза
- Контактная информация:
Re: Запаковать Actor
Спасибо за ответы, работа сдвинулась со стопора.
Видимо, этот шаг сильно упрощает дальнейшие действия. Всё то, что у меня система требовала теперь находится без проблем.
-
- professor
- Сообщения: 3586
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 57 раз
- Поблагодарили: 194 раза
- Контактная информация:
Re: Запаковать Actor
Что-то у меня сломалось.
1) есть несколько base и интерфейсов. Каждый отдельно запакован в библиотеку. Все, кроме AF лежат в /proj/data/ 2) делаю модуль для дебага, он наследует интерфейс и base. Этот модуль тоже собираю в .lvlibp Естесвенно при сборке все зависимости копируются в /build/ каталог.
3) переношу .lvlibp в /proj/modules/ но без зависимостей, потому что они и так в проекте.
И ещё, в конечной сборке планирую все зависимости хранить в /data/, а модули в /modules/
4) теперь пытаюсь запустить это из файла (файлов) Но программа ругается, что для этого придётся загрузить в память конфликтующие библиотеки, те самые базовые, но из других папок (где их на самом деле нет)
Ну и до кучи все эти собранные библиотеки ищут сборку AF в той же папке, а не в program files собственно вопрос, как исправить все эти зависимости, чтобы всё грузилось, откуда должно грузиться?
1) есть несколько base и интерфейсов. Каждый отдельно запакован в библиотеку. Все, кроме AF лежат в /proj/data/ 2) делаю модуль для дебага, он наследует интерфейс и base. Этот модуль тоже собираю в .lvlibp Естесвенно при сборке все зависимости копируются в /build/ каталог.
3) переношу .lvlibp в /proj/modules/ но без зависимостей, потому что они и так в проекте.
И ещё, в конечной сборке планирую все зависимости хранить в /data/, а модули в /modules/
4) теперь пытаюсь запустить это из файла (файлов) Но программа ругается, что для этого придётся загрузить в память конфликтующие библиотеки, те самые базовые, но из других папок (где их на самом деле нет)
Ну и до кучи все эти собранные библиотеки ищут сборку AF в той же папке, а не в program files собственно вопрос, как исправить все эти зависимости, чтобы всё грузилось, откуда должно грузиться?
-
- professor
- Сообщения: 3586
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 57 раз
- Поблагодарили: 194 раза
- Контактная информация:
Re: Запаковать Actor
В процессе трабл-шутинга нашёл эту статью
https://forums.ni.com/t5/Actor-Framewor ... -p/3776945
если кому-то понадобится, там
В моём случае ключевой галкой оказалась эта После этого предыдущие (родители) пакеты остались на месте и программа перестала грузить их откуда попало.
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.
В моём случае ключевой галкой оказалась эта После этого предыдущие (родители) пакеты остались на месте и программа перестала грузить их откуда попало.