Strona 1 z 1

Obsługa DLL i wskaźnik do funkcji jako parametr

: 26 paź 2014 17:56
autor: lycon5
Tworzę aplikację do pewnego stanowiska. Aplikacja będzie przeznaczona na komputer przemysłowy z zainstalowanymi kartami pomiarowymi. Do obsługi kart pomiarowych producent udostępnia biblioteki DLL i wszystko grało póki nie natrafiłem na przeszkodę-ścianę. Muszę obsłużyć kartę szybkich wejść analogowych APCI-3600. Aby ją zainicjalizować muszę podać wskaźnik do funkcji która wywoływać się będzie przy wystąpieniu przerwania. Tylko tak mogę odczytać bufor FIFO. Znalazłem taką wskazówkę na stronie ni.com ale nie za bardzo wiem jak go dokładnie zrealizować ? czy znalazłby się ktoś kto miał styczność z takim problemem ?

Obsługa DLL i wskaźnik do funkcji jako parametr

: 27 paź 2014 15:25
autor: TMa
Miałem styczność. W skrócie wygląda to tak: Napisz wrapper dla DLL pod .NET w postaci biblioteki, który udostępnia rejestrację zdarzeń. Wtedy z poziomu LV rejestrujesz się na dane zdarzenie podając VI, który ma zostać wywołany przy obsłudze :) Przetestowane i działa z przepustowością kilkuset tysięcy kS/s.

Obsługa DLL i wskaźnik do funkcji jako parametr

: 27 paź 2014 15:56
autor: lycon5
No już nieco mi to rozjaśniło sprawę, jednak teraz pojawia się problem jak napisać ten wrapper. Czy to ma być inna DLL-ka napisana w innym środowisku która będzie wywoływać DLL docelową ? Proszę o wersją rozszerzoną tego rozwiązania :) A w ogóle to wszystko bym oddał za jakiś przykładowy VI do tego zagadnienia :D

Re: Obsługa DLL i wskaźnik do funkcji jako parametr

: 27 paź 2014 16:55
autor: TMa
Przykłady znajdziesz tutaj (Help->Find Examples...-> Search -> Enter keyword: ".NET"):

%LabVIEW_Folder%\examples\comm\dotnet\Events.llb\NET Event Callback for DataWatcher.vi
%LabVIEW_Folder%\examples\comm\dotnet\Events.llb\NET Event Callback for Calendar Control.vi

Re: Obsługa DLL i wskaźnik do funkcji jako parametr

: 27 paź 2014 18:59
autor: lycon5
Czyli jako Event Source podpinam wejście na wskaźnik do DLL ?

Obsługa DLL i wskaźnik do funkcji jako parametr

: 30 paź 2014 12:33
autor: lycon5
Ponawiam prośbę o pomoc. Powyższy post był pomocny ale nie wiem dokładnie jak spiąć DLL z EventSource. Poza tym wywoływana funkcja przyjmuje argumenty w których podana jest np. wartość bufora. Pomoc będzie nieoceniona :)

-- EDIT --
http://forums.ni.com/t5/LabVIEW/LabView ... d-p/726883
Znalazłem coś takiego i sporo można z tego wyczytać. Czy ktoś może ocenić czy dobrze rozumuje ? Najpierw piszę wrapperową DLL-ke przez LabView. Wrapper ładuje docelową DLL i podaje wskaźnik do swojej funkcji. Gdy wystąpi przerwanie, Wrapper wywołuje GenerateLVEvent a to już można obsłużyć w LabView, czy tak ?

Obsługa DLL i wskaźnik do funkcji jako parametr

: 30 paź 2014 18:37
autor: TMa
Po kolei czyli ustalmy fakty. Biblioteka do obsługi urządzania wymaga podania wskaźnika do funkcji. Funkcja ta będzie wywoływana gdy nastąpi przerwanie od przyjścia danych. W tej funkcji bedzie można odczytać dane i przesłać je dalej do przetwarzania. Będzie wywoływana asynchronicznie (w osobnym wątku) i operować na właściwościach dostarczonych na etapie jej inicjalizacji przez aplikację. To są fakty. Teraz przejdźmy do LabVIEW i .NET:)

W bibliotece .NET tworzysz sobie klasę, która z jednej strony podpina się pod funkcję z biblioteki C a z drugiej wywołuje zdarzenie na zarejestrowanych callback. W LabVIEW natomiast tworzysz sobie obiekt tej klasy (constructor node), rejestrujesz się na zdarzenie (Reg Event) i.... podajesz mu referencję do VI, który będzie wywoływany przy obsłudze zdarzenia pochodzącego od .NET czyli od biblioteki C. Jak wspominałem VI bedzie wywoływany w osobym wątku, więc potrzebne są mechanizmy asynchroniczego przesyłania danych między (np. popularne kolejki). Callback VI zaczyna być producentem danych, a osobny wątek konsumentem do pobierania przetwarzania/wyświetlania/logoania danych.

Re: Obsługa DLL i wskaźnik do funkcji jako parametr

: 13 lis 2014 15:55
autor: lycon5
I teraz pytania ? Jak utworzyć tą bibliotekę .NET ? Visual Studio ? Czy może jakieś narzędzie NI ?

Obsługa DLL i wskaźnik do funkcji jako parametr

: 14 lis 2014 07:44
autor: bogdani
Witaj

Potrzebujesz LabVIEW Application Builder - w zależności od tego który pakiet LabVIEW poosiadasz, możesz to mieć lub nie.

Tu jest przykład stworzenia DLL
http://digital.ni.com/public.nsf/allkb/ ... E00043C1A7

Re: Obsługa DLL i wskaźnik do funkcji jako parametr

: 14 lis 2014 09:27
autor: TMa
bogdani pisze:Potrzebujesz LabVIEW Application Builder - w zależności od tego który pakiet LabVIEW poosiadasz, możesz to mieć lub nie.
W podanym przeze mnie rozwiązaniu nie chodzi o stworzenie .NET assembly pod LabVIEW, ale stworzenie biblioteki .NET z kodu C#.
lycon5 pisze:I teraz pytania ? Jak utworzyć tą bibliotekę .NET ? Visual Studio ? Czy może jakieś narzędzie NI ?
Tak, Visual Studio jest odpowiednie. Zwróć uwagę na wersję .NET Framework podczas budowania biblioteki. Różne wersje LabVIEW obsługują różne wersje .NET. Podpowiedź znajdziesz tutaj

Obsługa DLL i wskaźnik do funkcji jako parametr

: 15 lis 2014 00:21
autor: bogdani
ups. niedoczytałem całego wątku :-)

Re: Obsługa DLL i wskaźnik do funkcji jako parametr

: 06 gru 2014 13:30
autor: lycon5
Przepraszam za powrót do wątku po tak długim czasie ale wciąż z tym walczę. Jestem na etapie budowania wrappera. Korzystam z tego fajnego przykładu:
http://www.ni.com/example/26480/en/
Jednak nie mogę skompilować DLL. Wyrzuca mi: "Error 2 error LNK1104: cannot open file 'labview.lib' ". Upewniłem się i ten plik istnieje, a folder jest dodany do bibliotek projektu. Ktoś spotkał się z podobnym problemem ?