Inicjalizacja kamery poprzez dll.

Tematyka związana z tworzeniem aplikacji w LabVIEW do obsługi wizji oraz wszelkich operacji na obrazie.
Zyga
Posty: 76
Rejestracja: 26 sty 2012 23:36
Wersja środowiska: LabVIEW 2011

Inicjalizacja kamery poprzez dll.

Post autor: Zyga » 08 sie 2012 11:27

Witam.
Są to moje początki z LabVIEW, a tym bardziej z C, więc z góry proszę o wyrozumiałość.
Mam problem z prawidłowym wywołaniem funkcji Camera_Open z biblioteki camera.dll. Próbowałem już na wszystkie możliwe kombinacje jakie wpadły mi do głowy, niestety otrzymuje praktycznie zawsze ten sam błąd: "Cannot creato TCamera object". Już nie mam siły się z tym zmagać - odnoszę wrażenie że w moim wypadku to jak walenie głową w mur. Załączam wszystkie wymagane biblioteki do uruchomienia oraz plik CameraUnit1.cpp w którym opisany jest nagłówek funkcji. Jest tam jeden wskaźnik typu void. O ile dobrze zrozumiałem jakieś netowe notatki, to nadal jest wskaźnik typu numerycznego, ale z nieokreślonym rozmiarem do zaalokowania(?). Odnosi się do struktury, której definicja znajduje się w pliku struktura.txt.
Jeśli ktoś z Was znalazł by chwilkę będę wdzięczny za wszelkie wskazówki.
Załączniki
camera_doc.rar
(1.16 MiB) Pobrany 243 razy

Zyga
Posty: 76
Rejestracja: 26 sty 2012 23:36
Wersja środowiska: LabVIEW 2011

Re: Inicjalizacja kamery poprzez dll.

Post autor: Zyga » 08 sie 2012 15:40

Wersja dla LV 2009
Załączniki
camera_doc.rar
(1.16 MiB) Pobrany 239 razy

Awatar użytkownika
vugie
Posty: 383
Rejestracja: 17 lis 2006 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Warszawa

Inicjalizacja kamery poprzez dll.

Post autor: vugie » 08 sie 2012 16:24

Na to jakiego typu ma być opt pośrednio wskazuje opis:

Kod: Zaznacz cały

struct TCameraOptions
{
        int liczba_kamer;
        int tryb_wyzwalania;
        int tempo_ramek;
        int (*light_function)(bool contin, bool single);
        int light_search;
        int pixel_format;
};
Musisz taką strukturę zdefiniować w LV i przekazać jako pointer do DLL. Przy czym 4 pozycja to niewątpliwie adres funkcji (tzw. callback), który trzeba wyciągnąć z DLL (tej lub innej) za pomocą funkcji systemowej. Jak to zrobić technicznie jest tutaj: http://lavag.org/topic/13507-labview-qu ... indows-dll

Generalnie wygląda na to, że robisz wrapper do wrappera, który już ktoś zrobił w Borland C, a który jest dość nieczytelny na poziomie kodu. Bo co oznacza liczba kamer jako WEJŚCIE? Albo dlaczego H,W i sn są wejściami, skoro przekazuje się wskaźniki? Z reguły jak inicjuję jakąś kamerę, to chciałbym się dowiedzieć jaką ma rozdzielczość, a nie ją narzucać. sn jeszcze rozumiem - kamerę można wybierać po numerze seryjnym, ale po co w takim razie SetHandle? Wymyśla się go? Zakłada? Iteruje po nim aż się coś znajdzie?
Generalnie radziłbym albo nawiązać bliższą współpracę z autorem camera.dll, który najwyraźniej coś o tej kamerze wie, albo zinterfejsować się do niej bezpośrednio przy użyciu oryginalnej dokumentacji.

Zyga
Posty: 76
Rejestracja: 26 sty 2012 23:36
Wersja środowiska: LabVIEW 2011

Inicjalizacja kamery poprzez dll.

Post autor: Zyga » 08 sie 2012 17:47

Dzięki wielkie za wyczerpującą odpowiedź. Wiele mi wyjaśniła.
Zabieram się do edukacji :)

ODPOWIEDZ