dynamiczne otwieranie VI

Sprawy związane z interfejsem użytkownika - kontrolki, wskaźniki, wyświetlacze, wykresy oraz inne zagadnienia tego typu...
Awatar użytkownika
m3wm3
Posty: 22
Rejestracja: 10 gru 2009 22:33
Wersja środowiska: LabVIEW 8.6

dynamiczne otwieranie VI

Post autor: m3wm3 »

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
Ostatnio zmieniony 29 gru 2009 19:37 przez m3wm3, łącznie zmieniany 1 raz.
vugie
Posty: 383
Rejestracja: 17 lis 2006 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Warszawa

Re: dynamiczne otwieranie VI

Post autor: vugie »

Robi się to w następujący sposób:
dynvi.png
dynvi.png (3.31 KiB) Przejrzano 9178 razy
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ć.
Awatar użytkownika
m3wm3
Posty: 22
Rejestracja: 10 gru 2009 22:33
Wersja środowiska: LabVIEW 8.6

dynamiczne otwieranie VI

Post autor: m3wm3 »

Łokej, dzięki, pokombinuję, ale jak tak na to patrzę, to pewnie troszkę się będę musiał dopytać ;)
Awatar użytkownika
m3wm3
Posty: 22
Rejestracja: 10 gru 2009 22:33
Wersja środowiska: LabVIEW 8.6

Re: dynamiczne otwieranie VI

Post autor: m3wm3 »

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 :)
Załączniki
test2.vi
(69.13 KiB) Pobrany 338 razy
otwieranie vi2.vi
(12.13 KiB) Pobrany 367 razy
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: dynamiczne otwieranie VI

Post autor: jogurt_owocowy »

  • 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
calling subvi with and opening its front panel after pressing button.png
calling subvi with and opening its front panel after pressing button.png (10.71 KiB) Przejrzano 9016 razy
Osobną rzeczą jest odebranie danych z tak otwartego viaja.
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?
Na przykład... do niczego.
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?
Zamiast osobnych okien mogłoby być coś w stylu zakładek, jeśli to uprościłoby sprawę
Uprościłoby znacząco.
Ostatnio zmieniony 18 sty 2010 18:56 przez jogurt_owocowy, łącznie zmieniany 2 razy.
Awatar użytkownika
m3wm3
Posty: 22
Rejestracja: 10 gru 2009 22:33
Wersja środowiska: LabVIEW 8.6

Re: dynamiczne otwieranie VI

Post autor: m3wm3 »

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?
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: dynamiczne otwieranie VI

Post autor: jogurt_owocowy »

nigdy nie wiadomo ile zdjęć użytkownik chce załadować - raz może to być 3 a innym razem np. 10
A czy jest konieczne, żeby otwierał je jednocześnie? Nie może otworzyć ich po kolei?
Awatar użytkownika
m3wm3
Posty: 22
Rejestracja: 10 gru 2009 22:33
Wersja środowiska: LabVIEW 8.6

dynamiczne otwieranie VI

Post autor: m3wm3 »

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ę.
ODPOWIEDZ