Конкурс на лучшее дополнение к LabVIEW

Различные конкурсы нашего портала
Аватара пользователя
Pavel Krivozubov

Activity Bronze
professor
professor
Сообщения: 4421
Зарегистрирован: 07 фев 2008, 16:39
Награды: 3
Версия LabVIEW: 7.0 - 2013
Откуда: г. Электросталь
Благодарил (а): 24 раза
Поблагодарили: 9 раз
Контактная информация:

Re: Конкурс на лучшее дополнение к LabVIEW

Сообщение Pavel Krivozubov »

Да, конечно возможно.
Аватара пользователя
Pavel Krivozubov

Activity Bronze
professor
professor
Сообщения: 4421
Зарегистрирован: 07 фев 2008, 16:39
Награды: 3
Версия LabVIEW: 7.0 - 2013
Откуда: г. Электросталь
Благодарил (а): 24 раза
Поблагодарили: 9 раз
Контактная информация:

Re: Конкурс на лучшее дополнение к LabVIEW

Сообщение Pavel Krivozubov »

Вы слышали о том, что на сайте NI можно размещать свои тулкиты и addons для LabVIEW и продавать?
Вот тут можете про это почитать - http://www.ni.com/labviewtools/.
Аватара пользователя
Pavel Krivozubov

Activity Bronze
professor
professor
Сообщения: 4421
Зарегистрирован: 07 фев 2008, 16:39
Награды: 3
Версия LabVIEW: 7.0 - 2013
Откуда: г. Электросталь
Благодарил (а): 24 раза
Поблагодарили: 9 раз
Контактная информация:

Re: Конкурс на лучшее дополнение к LabVIEW

Сообщение Pavel Krivozubov »

Напоминаю, осталось меньше недели до завершения конкурса!
Явные лидеры уже определились, но у вас еще есть возможность повлиять на исход голосования!
Голосуем здесь:
Голосование в категории "Полезность".
Голосование в категории "Сложность".
Аватара пользователя
Pavel Krivozubov

Activity Bronze
professor
professor
Сообщения: 4421
Зарегистрирован: 07 фев 2008, 16:39
Награды: 3
Версия LabVIEW: 7.0 - 2013
Откуда: г. Электросталь
Благодарил (а): 24 раза
Поблагодарили: 9 раз
Контактная информация:

Re: Конкурс на лучшее дополнение к LabVIEW

Сообщение Pavel Krivozubov »

И так, завершилось голосование в конкурсе на лучшее дополнение LabVIEW - 2010.
111.PNG
222.PNG
Абсолютным победителем в обоих номинациях стал Андрей Дмитриев со своим замечательным AD Vision Toolkit !!! :1stplace:
Его работа признана большинством пользователей LabVIEW одновременно и самой сложной и самой полезной. И это неудивительно, ведь обработка изображений - одна из основных специализаций применения LabVIEW на данный момент и поэтому очень много пользователей работает в этой области.
Мои поздравления победителю и огромное спасибо! Твоя работа станет украшением нашего портала и следующей научно практической конференции NI 2010.
Остальные призовые места распределились следующим образом:
2 место в категории "Полезность" занял Евгений Граф и его библиотека "Tasking 2 Library".
3 место в категории "Полезность" занял Руслан Гимазетдинов и его "TrayIcon Librirary Toolkit".
Мои поздравления победителям! :1stplace:
Остальным участникам большое спасибо за участие! Все работы, номинированные на конкурс будут записаны на диск Best LabVIEW Addon 2010, который будет распространяться на конференции. Так же все работы будут добавлены для скачивания в существующую библиотеку кода, которая есть на нашем сайте.
В общем конкурс я считаю удавшимся, и огромное спасибо Руслану за идею его проведения!
Осталось выяснить только один вопрос. В категории сложность несомненно самой сложной работой был признан тулкит Андрея. Но при этом второе и третье места остались вакантны. Поэтому объявляется:
Голосование за 2 и 3 места в категории"Сложность".
Там присутствуют все работы в порядке следования, с сохранённой нумерацией, за исключением работы Андрея Дмитриева, которая и так стала абсолютным лидером.
Поэтому просьба голосовать. Опрос будет длится неделю. Поехали! :D
AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1327
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Версия LabVIEW: 6.1 - 2024
Откуда: Германия
Благодарил (а): 1 раз
Поблагодарили: 37 раз
Контактная информация:

Re: Конкурс на лучшее дополнение к LabVIEW

Сообщение AndreyDmitriev »

Спасибо, коллеги, я даже не ожидал.

Хочу несколько слов добавить. Что касается сложности, то в общем-то основная сложность там заложена вовсе и не в LabVIEW, а в динамических библиотеках (там порядка десяти тысяч строк С кода). То есть по сути это просто большая Wrapper библиотека (причём частично автогенерированная при помощи скриптинга). Удовольствие доставила работа с NVPP библиотекой - по правилам все CUDA функции должны выполняться в одном потоке, и для того, чтобы не вызывать DLL в UI потоке пришлось воспользоваться NI Compute библиотекой. Также позднее были сделаны мостики к библиотекам OpenCV, EZTwain, FreeImage и бесплатным функциям, имеющимся в IMAQ Vision. Также есть наработки в направлении libraw, но это ещё из неопубликованного. Основная идея была - прозрачно совместить несколько свободно-распространяемых библиотек, взяв из каждой самое вкусное и полезное. Что касается полезности, то при практическом использовании скорее всего вы натолкнётесь на кучу ограничений - например библиотекой NVPP поддерживаются далеко не все типы изображений, из OpenCV перенесёна лишь малая часть функций, и т.д. Практически я воспользовался своей библиотекой дважды - при генерации видеофайлов (OpenCV AVI функции работают значительно лучше чем NI) и поддержкой USB камер (простенькая система видеонаблюдения). То есть это также альтернатива платному IMAQdx (платить четыре сотни долларов за захват картинки с Веб камеры - это как-то слишком). Я скорее всего буду время от времени возвращаться к этому проекту и добавлять туда кое-какие функции (для меня это своеобразный "плацдарм" для всяких наработок). Также со мной уже связался один из разработчиков OpenCV. Вот сейчас неспешно занимаюсь переносом в LabVIEW 2010 - там немного другой инсталлятор с парой совершенно кошмарных багов - требует изрядных плясок с бубном.

Что касается возможности размещения тулкитов на сайте NI - то это возможно (я общался с инженером NI - тулкит им понравился и его почти приняли), но для этого тулкит должен отвечать определённым требованиям. Я почти удовлетворяю (есть полноценный инсталлятор, всё достаточно аккуратно сделано). Но в числе требований есть также документация, а у меня далеко не все VI и контролы снабжены описаниями. Возможно я и доделаю это долгими зимними вечерами, тогда он появится на сайте NI.

Тулкиты также можно и продавать, как отмечалось выше, но коммерческая выгода мероприятия представляется мне весьма и весьма сомнительной (тем более что есть по меньшей мере два конкурента). Плюс для продажи там более жёсткие требования, ну и коммерческий тулкит налагает определённую ответственность по тех поддержке купивших пользователей - не думаю, что у меня есть достаточно времени для этого. Впрочем, кто знает...

Из числа других тулкитов, участвующих в конкурсе Tasking 2 Library и TrayIcon Librirary Toolkit мне понравились больше всего. Первый очень похож на то, что я сделал несколько лет назад в рамках большого коммерческого проекта. Единственный небольшой недостаток - в Tasking 2 Library модули связаны друг с другом typedef контролом, в котором перечислены все потоки. То есть добавление ещё одного потока приведёт к необходимости перекомпиляции всего приложения. Если Евгений сделает так, чтобы потоки стали абсолютно независимыми (с целью возможности компиляции каждого процесса в отдельную библиотеку - плагин), то инструмент станет просто бесценный - особенно с точки зрения расширяемости готового продукта. А TrayIcon Librirary Toolkit напомнил мне то, что я делал лет десять назад на LabVIEW 5.1, да так и не доделал (а в то время это был ад кромешный с ShellNotifyIcon и обменом сообщениями из всплывающего меню в приложение). Сейчас с современными средствами это стало чуть проще и приятно видеть более-менее законченный продукт.

В общем конкурс я тоже считаю вполне удавшимся.

PS.
Ну а если быть совсем честным, то меня просто задолбало пить кофе на работе из одноразовых стаканчиков и я всё время забываю купить уже какую-нибудь кружку. Так что когда я увидел что кружка полагается за каждое призовое место, то решил участвовать не раздумывая :))
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Конкурс на лучшее дополнение к LabVIEW

Сообщение Eugen Graf »

AndreyDmitriev писал(а):Единственный небольшой недостаток - в Tasking 2 Library модули связаны друг с другом typedef контролом, в котором перечислены все потоки. То есть добавление ещё одного потока приведёт к необходимости перекомпиляции всего приложения. Если Евгений сделает так, чтобы потоки стали абсолютно независимыми (с целью возможности компиляции каждого процесса в отдельную библиотеку - плагин), то инструмент станет просто бесценный - особенно с точки зрения расширяемости готового продукта.
Спасибо, и поздравляю с победой в конкурсе!

На счёт вышесказанного есть какое нибудь предложение? Ну хоть какой нибудь намёк на решение этой проблемы? Единственное, что я вижу, это заменить Enum Typedef на просто номера (да, кстати в библиотеке используются обычные номера, а еньюмераторы вне библиотеки) или строки, но тогда мне кажется будет не так удобно пользоваться этой библиотекой. Тоже самое касается нумерации команд для каждого потока.

С нас кружка :drink:
AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1327
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Версия LabVIEW: 6.1 - 2024
Откуда: Германия
Благодарил (а): 1 раз
Поблагодарили: 37 раз
Контактная информация:

Re: Конкурс на лучшее дополнение к LabVIEW

Сообщение AndreyDmitriev »

eg писал(а): На счёт вышесказанного есть какое нибудь предложение? Ну хоть какой нибудь намёк на решение этой проблемы?
Важно ещё вызывать SubVI потоков динамически через Reference, а не класть их на блок - диаграмму. Понятно, что если в одном потоке Enum Typedef будет иметь три состояния, а вдругом тот же самый typedef будет иметь четыре состояния, то возникнет конфликт. Замена enum на чистые строки в общем-то уже частично решит проблему.

Я сделал вот как: Каждый поток компилируется в llb. Есть небольшое ядро, которое при старте смотрит какие модули инсталлированы (в простейшем случае просто получает список файлов из директории) и динамически запускает основной Top-Level SubVI из каждой llb (его имя совпадает с именем llb). В режиме разработки список модулей ядро получает из проекта, а каждый модуль организован в lvlib. Все SubVI внутри каждого потока помечены как приватные за исключением точки входа - это избавляет от ошибок кросслинковки. Внутри каждого потока есть while цикл, а внутри цикла - case, имеющий состояния Init, Register Inputs, Register Outputs, Run. Терминал Case выведен наружу. Сначала для каждого модуля выполняется Init, где происходит инициализация модуля (резервируется память, читаются установки и т.д.). При этом VI потока завершает работу, но данные хранятся в Shift регистре - то есть каждый поток по совместительству Functional Global. Затем выполняется прогон всех модулей с кейсом Register Input. На этом этапе каждый поток сообщает ядру о своих "входах" (каждый вход по сути именованная очередь вариантов). Имя входа задаётся строкой. Мне это не мешает, некоторые программисты в нашей команде делают это через Typedef, получая имя из Label - в принципе оба метода жизнеспособны. Затем выполняется прогон с кейсом Register Outputs и на этом этапе каждый поток подключает свои выходы ко входам, зарегистрированным на предыдущем этапе. Ну а дальше запускается case Run и каждый поток резидентно выполняется в памяти (поскольку при этом VI не завершает работу, то для запуска для каждого потока создаётся небольшой Daemon, основанный на реентерабельном темплейте). Вот и всё, теперь любой поток может записать данный в свой выход (читай - очередь), а другой поток тут же получит данные на своём входе (он должен ждать данных из входной очереди, разумеется).
Ну ещё из функциональности - точно также регистрируются семафоры (может иногда потребоваться между потоками), глобальные статические переменные и т.д. Функциональность ядра постепенно наращивается, например сейчас ядро также отвечает за локализацию - при инициализации каждый поток сообщает ядру о VI с передними панелями, требующими локализации. При получении внешнего сигнала ядро по референсам получает список всех контролов, читает текстовые данные для перевода и меняет Captions у каждого контрола. Важно то, что ядро на этапе разработки понятия не имеет о имеющихся модулях, равно как один модуль понятия не имеет о другом модуле - они независимы и никак не связаны и связываются друг с другом лишь при запуске приложения (или проекта). Конечно это добавляет определённую долю монструозности, но делает возможным распределённую разработку (у нас несколько человек работают над проектами параллельно и не мешая друг другу), кроме того даёт возможность собрать готовое приложение как из кубиков, без перекомпиляции и даёт возможность сделать что-то особенное для конкретного заказчика, не разбивая при этом проект и оставляя его постоянно работоспособным. Масштабы проекта примерно такие - ядро содержит примерно 300 SubVI, количество модулей - больше 200 (суммарно примерно 2500 SubVI). В типичном приложении используется 30-50 модулей. Где-то так.
Аватара пользователя
Pavel Krivozubov

Activity Bronze
professor
professor
Сообщения: 4421
Зарегистрирован: 07 фев 2008, 16:39
Награды: 3
Версия LabVIEW: 7.0 - 2013
Откуда: г. Электросталь
Благодарил (а): 24 раза
Поблагодарили: 9 раз
Контактная информация:

Re: Конкурс на лучшее дополнение к LabVIEW

Сообщение Pavel Krivozubov »

И так, голосование за серебро и бронзу в категории "Сложность" завершилось!
По его итогам второе место заняла работа Tasking 2 Library (автор eg).
Третье место заняла работа MDI в LabVIEW (автор Crowbar).
Поздравляю победителей!
И еще раз спасибо всем участникам и разумеется тем, кто голосовал!
Конкурс объявляется закрытым!
До новых встреч! :super:
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: Конкурс на лучшее дополнение к LabVIEW

Сообщение rushonda »

Здравствуйте. А где можно посмотреть Tasking 2 Library
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5461
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 27 раз
Поблагодарили: 86 раз

Re: Конкурс на лучшее дополнение к LabVIEW

Сообщение IvanLis »

rushonda писал(а):Здравствуйте. А где можно посмотреть Tasking 2 Library
Здесь: http://labviewportal.org/viewtopic.php?f=142&t=2078
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Конкурсы»