Obsługa DLL i wskaźnik do funkcji jako parametr
Obsługa DLL i wskaźnik do funkcji jako parametr
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
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
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
Re: Obsługa DLL i wskaźnik do funkcji jako parametr
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
%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
Czyli jako Event Source podpinam wejście na wskaźnik do DLL ?
Obsługa DLL i wskaźnik do funkcji jako parametr
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 ?
-- 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
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.
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
I teraz pytania ? Jak utworzyć tą bibliotekę .NET ? Visual Studio ? Czy może jakieś narzędzie NI ?
-
- Administrator
- Posty: 1315
- Rejestracja: 30 lip 2003 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Ruda Śląska
- Kontakt:
Obsługa DLL i wskaźnik do funkcji jako parametr
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
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
W podanym przeze mnie rozwiązaniu nie chodzi o stworzenie .NET assembly pod LabVIEW, ale stworzenie biblioteki .NET z kodu C#.bogdani pisze:Potrzebujesz LabVIEW Application Builder - w zależności od tego który pakiet LabVIEW poosiadasz, możesz to mieć lub nie.
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 tutajlycon5 pisze:I teraz pytania ? Jak utworzyć tą bibliotekę .NET ? Visual Studio ? Czy może jakieś narzędzie NI ?
-
- Administrator
- Posty: 1315
- Rejestracja: 30 lip 2003 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Ruda Śląska
- Kontakt:
Obsługa DLL i wskaźnik do funkcji jako parametr
ups. niedoczytałem całego wątku
Re: Obsługa DLL i wskaźnik do funkcji jako parametr
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 ?
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 ?