Фильтрация и dll

Простейшие вопросы в области инженерной разработки
Ответить
Alex Dem
assistant
assistant
Сообщения: 119
Зарегистрирован: 06 май 2015, 22:24
Версия LabVIEW: 2014, 2018
Благодарил (а): 1 раз
Поблагодарили: 1 раз
Контактная информация:

Фильтрация и dll

Сообщение Alex Dem »

Уважаемые знатоки! Помогите разобраться в вопросе.
Решил освоить работу с dll и в качестве примера сначала dll создавал для простой арифметики и ПИД регуляторов - все работает.
Но, как только перешел к фильтрам, все попытки заставить dll работать оказались безрезультатными.
Как правильно передать информацию dll о параметре len, который добавляется при создании dll из фильтра, чтобы он заработал?
Вложения
1F Folder.zip
(21.8 КБ) 105 скачиваний
Безымянный.png
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Фильтрация и dll

Сообщение dadreamer »

Alex Dem писал(а):Как правильно передать информацию dll о параметре len, который добавляется при создании dll из фильтра, чтобы он заработал?
Ну, очевидно, что len - это длина выходного массива Filtered X, используемая для предварительного выделения памяти. Размерность выходного массива такая же, как и у входного, поэтому можно извлечь Y из Waveform через Get Waveform Components и далее взять размер с помощью Array Size - это и будет длина массива. Можно выделить массив вручную через Initialize Array и подать на вход arg2, а можно сделать так:
2015-09-18_0-27-17.jpg
В таком случае память будет выделена автоматически при вызове функции.

Но вообще, по идее, вызывать DLL, созданную в :labview: , из самого :labview: - это большое извращение, т.к. происходит двойная конвертация параметров при передаче на стек и отсюда возрастают накладные расходы на вызов функции. Создавать DLL в :labview: имеет смысл, только когда нужно вызывать её из другой IDE (C/C++, Delphi, VB). А в самом :labview: гораздо проще и удобнее создавать SubVI, в том числе и при необходимости подключения разных подпрограмм (плагинов).
Alex Dem
assistant
assistant
Сообщения: 119
Зарегистрирован: 06 май 2015, 22:24
Версия LabVIEW: 2014, 2018
Благодарил (а): 1 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Фильтрация и dll

Сообщение Alex Dem »

Большое спасибо, понял Вашу мысль, попробую.
У меня уже есть работающая программа для управления вибростендом в автоматическом режиме (Вы когда-то мне помогали советом с синхронизацией параллельных циклов для нее),
в ней используется для анализа и регулировок 100 фильтров. Быстродействия ноутбука впритык хватает для работы программы.
Я думал, что использование dll даст мне прирост в быстродействии, но видимо ошибся. Не стоит даже пытаться?
P.S.: все заработало, еще раз благодарю за науку.
Вложения
Безымянный2.png
Безымянный2.png (5.45 КБ) 2380 просмотров
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Фильтрация и dll

Сообщение dadreamer »

Alex Dem писал(а):Не стоит даже пытаться?
В данном случае в этом нет смысла, т.к. все VI для анализа сигнала являются обёртками над функциями из lvanlys.dll. Смысл был бы, если бы у вас была библиотека, написанная скажем на C/C++, с альтернативными реализациями фильтров, обеспечивающими большее быстродействие, нежели фильтры LabVIEW. Но такой библиотеки нет, и вряд ли удалось бы написать алгоритм фильтра, работающего быстрее, чем фильтр из lvanlys. Так что по сути выход один: оптимизируете насколько возможно собственную программу, выявляете и устраняете "узкие" места, утечки памяти, лишние операции с массивами/кластерами и т.д., лишние сдвиговые регистры... Если после всех апгрейдов у вас всё равно не хватает производительности, то сами понимаете...
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Для чайников»