Уважаемые знатоки! Помогите разобраться в вопросе.
Решил освоить работу с dll и в качестве примера сначала dll создавал для простой арифметики и ПИД регуляторов - все работает.
Но, как только перешел к фильтрам, все попытки заставить dll работать оказались безрезультатными.
Как правильно передать информацию dll о параметре len, который добавляется при создании dll из фильтра, чтобы он заработал?
Фильтрация и dll
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Фильтрация и dll
Ну, очевидно, что len - это длина выходного массива Filtered X, используемая для предварительного выделения памяти. Размерность выходного массива такая же, как и у входного, поэтому можно извлечь Y из Waveform через Get Waveform Components и далее взять размер с помощью Array Size - это и будет длина массива. Можно выделить массив вручную через Initialize Array и подать на вход arg2, а можно сделать так: В таком случае память будет выделена автоматически при вызове функции.Alex Dem писал(а):Как правильно передать информацию dll о параметре len, который добавляется при создании dll из фильтра, чтобы он заработал?
Но вообще, по идее, вызывать DLL, созданную в , из самого - это большое извращение, т.к. происходит двойная конвертация параметров при передаче на стек и отсюда возрастают накладные расходы на вызов функции. Создавать DLL в имеет смысл, только когда нужно вызывать её из другой IDE (C/C++, Delphi, VB). А в самом гораздо проще и удобнее создавать SubVI, в том числе и при необходимости подключения разных подпрограмм (плагинов).
-
- assistant
- Сообщения: 119
- Зарегистрирован: 06 май 2015, 22:24
- Версия LabVIEW: 2014, 2018
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
- Контактная информация:
Re: Фильтрация и dll
Большое спасибо, понял Вашу мысль, попробую.
У меня уже есть работающая программа для управления вибростендом в автоматическом режиме (Вы когда-то мне помогали советом с синхронизацией параллельных циклов для нее),
в ней используется для анализа и регулировок 100 фильтров. Быстродействия ноутбука впритык хватает для работы программы.
Я думал, что использование dll даст мне прирост в быстродействии, но видимо ошибся. Не стоит даже пытаться?
P.S.: все заработало, еще раз благодарю за науку.
У меня уже есть работающая программа для управления вибростендом в автоматическом режиме (Вы когда-то мне помогали советом с синхронизацией параллельных циклов для нее),
в ней используется для анализа и регулировок 100 фильтров. Быстродействия ноутбука впритык хватает для работы программы.
Я думал, что использование dll даст мне прирост в быстродействии, но видимо ошибся. Не стоит даже пытаться?
P.S.: все заработало, еще раз благодарю за науку.
- Вложения
-
- Безымянный2.png (5.45 КБ) 2380 просмотров
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Фильтрация и dll
В данном случае в этом нет смысла, т.к. все VI для анализа сигнала являются обёртками над функциями из lvanlys.dll. Смысл был бы, если бы у вас была библиотека, написанная скажем на C/C++, с альтернативными реализациями фильтров, обеспечивающими большее быстродействие, нежели фильтры LabVIEW. Но такой библиотеки нет, и вряд ли удалось бы написать алгоритм фильтра, работающего быстрее, чем фильтр из lvanlys. Так что по сути выход один: оптимизируете насколько возможно собственную программу, выявляете и устраняете "узкие" места, утечки памяти, лишние операции с массивами/кластерами и т.д., лишние сдвиговые регистры... Если после всех апгрейдов у вас всё равно не хватает производительности, то сами понимаете...Alex Dem писал(а):Не стоит даже пытаться?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение