dynamiczne otwieranie VI
dynamiczne otwieranie VI
Witam po raz kolejny
Chciałbym się dowiedzieć czy w LV 8.6 istnieje możliwość, żeby z głównego VI kilka razy otwierać inne VI wykonujące dane czynności. Może opis do czego mi to potrzebne:
w głównym VI chcę mieć button pt. Wczytaj zdjęcie. Po kliknięciu na nim, wyskakuje Load Image Dialog, a po wybraniu zdjęcia otwiera się ono w nowym oknie. To nowe okno to osobny VI, który umożliwia pobranie współrzędnych klikniętego piksela na focie i wykonuje na tej podstawie pewne obliczenia. Chciałbym też, żeby wyniki tych obliczeń były dostępne dla głównego VI, w którym byłyby obliczenia wykonywane na podstawie danych otrzymanych z kilku podrzędnych VI z fotami (musi być ich minimum 2 - bez górnego progu), te ostatnie wyniki najprawdopodobniej do pliku. Zamiast osobnych okien mogłoby być coś w stylu zakładek, jeśli to uprościłoby sprawę ;)
Dałoby radę coś takiego wyczarować czy muszę się ograniczyć do statycznej liczby ładowanych fot?
Pozdrawiam
Chciałbym się dowiedzieć czy w LV 8.6 istnieje możliwość, żeby z głównego VI kilka razy otwierać inne VI wykonujące dane czynności. Może opis do czego mi to potrzebne:
w głównym VI chcę mieć button pt. Wczytaj zdjęcie. Po kliknięciu na nim, wyskakuje Load Image Dialog, a po wybraniu zdjęcia otwiera się ono w nowym oknie. To nowe okno to osobny VI, który umożliwia pobranie współrzędnych klikniętego piksela na focie i wykonuje na tej podstawie pewne obliczenia. Chciałbym też, żeby wyniki tych obliczeń były dostępne dla głównego VI, w którym byłyby obliczenia wykonywane na podstawie danych otrzymanych z kilku podrzędnych VI z fotami (musi być ich minimum 2 - bez górnego progu), te ostatnie wyniki najprawdopodobniej do pliku. Zamiast osobnych okien mogłoby być coś w stylu zakładek, jeśli to uprościłoby sprawę ;)
Dałoby radę coś takiego wyczarować czy muszę się ograniczyć do statycznej liczby ładowanych fot?
Pozdrawiam
Ostatnio zmieniony 29 gru 2009 19:37 przez m3wm3, łącznie zmieniany 1 raz.
-
- Posty: 383
- Rejestracja: 17 lis 2006 00:00
- Wersja środowiska: LabVIEW 2009
- Lokalizacja: Warszawa
Re: dynamiczne otwieranie VI
Robi się to w następujący sposób:
Zakładek dodawać dynamicznie nie można. Można co najwyżej utworzyć ich dużo i dynamicznie je ukrywać/pokazywać.
Flaga 0x08 oznacza "prepare for reentrant run" co oznacza, że będzie można odpalić kilka niezależnych instancji VI-ja (Za każdym razem trzeba robić Opene Reference). Parametry wejściowe przekazuje się do kontrolek odpowienią metodą (jak na rysunku). W podobny sposób można odebrać wyniki pracy, bądź też za pomocą kolejek, notifierów, zmiennych globalnych, LV2glb, czy czego tam jeszcze. Pamiętać należy żeby do informacji zwrotnej VI dołączał jakiś swój identyfikator, żeby można było rozróżnić informacje od różnych jego klonów.Zakładek dodawać dynamicznie nie można. Można co najwyżej utworzyć ich dużo i dynamicznie je ukrywać/pokazywać.
dynamiczne otwieranie VI
Łokej, dzięki, pokombinuję, ale jak tak na to patrzę, to pewnie troszkę się będę musiał dopytać ;)
Re: dynamiczne otwieranie VI
Tak jak się spodziewałem - coś nie gra W załącznikach pliczki: otwieranie vi.vi - w zamiarze miało otwierać test2.vi i pobrać dane z 1 z tablic. Niestety, nie jest kolorowo, bo nawet nie otwiera i oczywiście nie rozumiem dlaczego... Mógłby mi ktoś wytłumaczyć co zrobić, żeby jednak zadziałało?
Vugie pisał, żeby do informacji zwrotnej VI dołączał swój identyfikator, żeby można było rozróżnić informacje od różnych jego klonów - do czego byłoby potrzebne to rozróżnienie?
Kolejne pytanie: jak już się uda odbierać te dane z kilku klonów, to w jaki sposób je wszystkie zgromadzić w jednym miejscu (najchętniej tablicy)? Dane ze wszystkich 'dynamicznych' vi-jów potrzebne mi będą do dalszych obliczeń (układów równań), wykonywanych na bieżąco, tzn. wyniki muszą być aktualizowane (a więc dane pobierane) po każdym kliknięciu na zdjęcie w dowolnej otwartej kopii pliczku test2.vi.
Z góry dzięki za pomoc
Vugie pisał, żeby do informacji zwrotnej VI dołączał swój identyfikator, żeby można było rozróżnić informacje od różnych jego klonów - do czego byłoby potrzebne to rozróżnienie?
Kolejne pytanie: jak już się uda odbierać te dane z kilku klonów, to w jaki sposób je wszystkie zgromadzić w jednym miejscu (najchętniej tablicy)? Dane ze wszystkich 'dynamicznych' vi-jów potrzebne mi będą do dalszych obliczeń (układów równań), wykonywanych na bieżąco, tzn. wyniki muszą być aktualizowane (a więc dane pobierane) po każdym kliknięciu na zdjęcie w dowolnej otwartej kopii pliczku test2.vi.
Z góry dzięki za pomoc
- Załączniki
-
- test2.vi
- (69.13 KiB) Pobrany 372 razy
-
- otwieranie vi2.vi
- (12.13 KiB) Pobrany 375 razy
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: dynamiczne otwieranie VI
- Jeśli chcesz zareagować na zmianę wartości przycisku, używaj eventu Value Change (zamiast Mouse Down)
- Do tworzenia ścieżek masz do dyspozycji funkcję Build Path (zamiast zabaw z Format Into String)
- Panel subviaja możesz otworzyć korzystając z metody VIaja Front Panel:Open
Na przykład... do niczego.Vugie pisał, żeby do informacji zwrotnej VI dołączał swój identyfikator, żeby można było rozróżnić informacje od różnych jego klonów - do czego byłoby potrzebne to rozróżnienie?
Ot, taki adres nadawcy na kopercie tradycyjnego listu - czasem niepotrzebny, czasem przydatny a czasem niezbędny.
Jeśli chodzi o samo przesyłanie danych między viajami dynamicznymi a viajem głównym, to są lepsze metody, niż Control Value:Get, ale może najpierw zapytam tak: jaki jest powód tego, żeby te viaje były dynamiczne?
Uprościłoby znacząco.Zamiast osobnych okien mogłoby być coś w stylu zakładek, jeśli to uprościłoby sprawę
Ostatnio zmieniony 18 sty 2010 18:56 przez jogurt_owocowy, łącznie zmieniany 2 razy.
Re: dynamiczne otwieranie VI
Dzięki za pomocne informacje.
Dynamiczne dlatego, że nigdy nie wiadomo ile zdjęć użytkownik chce załadować - raz może to być 3 a innym razem np. 10, żeby mieć dokładniejsze pomiary. Nie chciałbym robić ograniczenia ilości, bo z założenia im więcej zdjęć tym lepiej. Chyba, że jest jakaś lepsza metoda niż zewnętrzny VI, nie wpadłem do tej pory na jakiś lepszy pomysł, który by się nadawał... Jaka w tym przypadku metoda komunikacji byłaby bardziej optymalna?
Dynamiczne dlatego, że nigdy nie wiadomo ile zdjęć użytkownik chce załadować - raz może to być 3 a innym razem np. 10, żeby mieć dokładniejsze pomiary. Nie chciałbym robić ograniczenia ilości, bo z założenia im więcej zdjęć tym lepiej. Chyba, że jest jakaś lepsza metoda niż zewnętrzny VI, nie wpadłem do tej pory na jakiś lepszy pomysł, który by się nadawał... Jaka w tym przypadku metoda komunikacji byłaby bardziej optymalna?
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: dynamiczne otwieranie VI
A czy jest konieczne, żeby otwierał je jednocześnie? Nie może otworzyć ich po kolei?nigdy nie wiadomo ile zdjęć użytkownik chce załadować - raz może to być 3 a innym razem np. 10
dynamiczne otwieranie VI
Niestety tak, bo obliczenia powinny być dokonywane na bieżąco z klikaniem użytkownika na zdjęcia, czyli: użytkownik otwiera wszystkie zdjęcia i kolejno klika w załadowane zdjęcia, odpowiednie kopie test2.vi robią obliczenia (w załączonych przeze mnie pliczkach to na razie pominąłem, żeby najpierw spróbować przesłać cokolwiek), a następnie główny VI na podstawie przesłanych obliczeń znowu liczy co innego. Teraz np. użytkownik dochodzi do wniosku, że jednak kliknął na jednym zdjęciu troszkę za bardzo w lewo i poprawia to - kopia test2 od razu przelicza i znowu wysyła do głównego i ten znowu liczy i wyświetla wynik końcowy.
Dlatego dobrze by było, gdyby wszystkie były otwarte jednocześnie, bo jak już sobie zapisze do pliku wyniki jednego pomiaru to od razu może zacząć pomiary innego punktu.
Jeszcze jakoś trzeba zadbać o odpowiednie 'usunięcie' danej kopii test2 przy zamknięciu zdjęcia, żeby nie zajmowało pamięci i wyniki przesłane z tej kopii nie były brane pod uwagę.
Dlatego dobrze by było, gdyby wszystkie były otwarte jednocześnie, bo jak już sobie zapisze do pliku wyniki jednego pomiaru to od razu może zacząć pomiary innego punktu.
Jeszcze jakoś trzeba zadbać o odpowiednie 'usunięcie' danej kopii test2 przy zamknięciu zdjęcia, żeby nie zajmowało pamięci i wyniki przesłane z tej kopii nie były brane pod uwagę.