Przechowywanie danych między różnymi vi'jami

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
Awatar użytkownika
spec.kolombo
Posty: 126
Rejestracja: 20 sie 2008 06:33
Wersja środowiska: LabVIEW 2009
Lokalizacja: Gdynia
Kontakt:

Przechowywanie danych między różnymi vi'jami

Post autor: spec.kolombo »

Aktualnie tworzę taki programik który uruchamia po kolei różne vi'je (coś a'la Test Stand). Te vi'je generują różne dane. Dane te mają być widoczne we wszystkich uruchamianych vi'jach. W związku z tym zastanawiam się nad sposobem przekazywania danych między tymi vi'jami. Miałbym do tego dodatkowo tablicę zawierającą nazwy zmiennych i ich typy. Mam 3 kandydatów:
1. CVT (Current Value Table) - jest taka biblioteka, którą można sobie ściągnąć. Opis znajduje się na stronie: http://zone.ni.com/devzone/cda/epd/p/id/5326
Tak ogólnie i w skrócie, polega to na przechowywaniu danych w tablicy (jedna dla każdego rodzaju, przechowywana jako Functional Variable) i dostęp do danych odbywa się poprzez podanie "adresu" do komórki w tablicy.
2. Functional Global Variable, ale używane w trybie reentrant - musiałbym przechowywać referencję do każdej zmiennej i stworzyć jakieś api do w miarę komfortowego używania.
3. (mój faworyt) Przechowywanie danych w kolejkach. Każdy typ danej by miał swój rodzaj kolejki, a nazwa zmiennej określałaby nazwę kolejki.

Pytanie jednak najważniejsze: która z metod jest najwydajniejsza? Albo pytania alternatywne: czy metoda 3 jest w miarę wydajna? jakie ma wady?
Dodatkowym problemem może być to że co jakiś czas chciałbym dodawać nowe rodzaje zmiennych (w miarę jak będę dodawał nowe uruchamiane vi'je)
Lepiej być bogatym i zdrowym, niż biednym i chorym.
Spec Kolombo
Awatar użytkownika
smiga
Administrator
Posty: 799
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk

Re: Przechowywanie danych między różnymi vi'jami

Post autor: smiga »

Do tego świetnie nadaje się nowy Actor Framework - poczytaj:
http://decibel.ni.com/content/docs/DOC-17193
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Awatar użytkownika
spec.kolombo
Posty: 126
Rejestracja: 20 sie 2008 06:33
Wersja środowiska: LabVIEW 2009
Lokalizacja: Gdynia
Kontakt:

Przechowywanie danych między różnymi vi'jami

Post autor: spec.kolombo »

Dzięki, ale widziałem już to, ale to chyba nie chodzi pod LV2009.

Swoją drogą w rezultacie i tak zmieniłem koncepcję i to 2 razy...
Próbowałem to zrobić na Data Value Reference, ale napotykałem różne trudności.
Np. każdą wartość (niezależnie od typu danej) chciałem konwertować do stringa. Każdy program który chciał to robić najpierw musiał określać typ danej.
a zakładałem że typy danych będą z czasem dodawane, więc trzeba by zmieniać też te wszystkie inne programy które robią konwersję do stringa...
Jeszcze gorsze było to, że trzeba było zmieniać program główny (bo tam kasowałem te dane, a żeby skasować trzeba było dopisywać obsługę nowych zmiennych). Co prawda miałem to wszystko w specjalnym silniku zmiennych, ale to już inna historia...
Ogólnie nie godząc się na stopień skomplikowania szukałem dalej, aż trafiłem na obiektowe podejście do sprawy.
I jak zbawienie objawił mi się dynamic dispatching rozwiązując 3582 problemy.
Na razie dopiero się uczę podejścia obiektowego, ale opiszę jak to robię teraz:
Mam klasę główną "zmienna" która ma nazwę, oraz metody "init" "destroy" oraz "To String" (i one są zrobione dynamic dispatching).
gdy tworzę nową zmienną to dziedziczę z tej klasy i nadpisuję/dopisuję te metody. Każda nowa zmienna ma daną oraz atrybuty (zrobione na zasadzie DVR). Do tego mam stworzoną tablicę (functional variable), która przechowuje te obiekty i różne programy mogą sobie je pobierać i działać na nich.
Teraz jak jakiś program wywoła metodę "To String" to LV samo sobie znajduje odpowiedniego VI'ja którego ma użyć dla danej zmiennej.
Tak samo nie trzeba zmieniać programu głównego. I do tego łatwo skopiować całą klasę i stworzyć nowy rodzaj danych.
Lepiej być bogatym i zdrowym, niż biednym i chorym.
Spec Kolombo
ODPOWIEDZ