Wybór odpowiedniej architektury dla programu

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
Jamal79
Posty: 289
Rejestracja: 01 maja 2012 14:14
Wersja środowiska: LabVIEW 2012
Lokalizacja: Farum

Wybór odpowiedniej architektury dla programu

Post autor: Jamal79 »

Witam

Poszukuje dzialu dla osob, hmm bardziej wtajemniczonych.

Mam problem i potrzebowal bym porady developera albo i architekta.

Problem.
Tworze zlozony program i chcialbym porady co do wyboru najlepszej struktury.
Troche danych:
Karta na 64 wejscia + 32 wyjscia
Pobor temp z Agilenta oraz z analizatora
Wszystkie dane sa pobierane przez DataSocketa z dwoch DataServerow.

Generalnie wszystko smiga ale niepodoba mi sie sam "kod" oparty na rownoleglych WhileLoopach. (Dostalem takowy w spadku).
Chcialem wykorzystac StacedSequence z eventami i casami tak aby kod mi sie zmiescil na "jednym" wyswietlaczu.

Ktos chetny aby podjac wyzwanie??
Awatar użytkownika
smiga
Administrator
Posty: 799
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk

Re: Problem

Post autor: smiga »

Trochę mało informacji wrzuciłeś - nie wiemy jaka jest wzajemna zależność pobierania danych między analizatorem i Agilentem, co się później dzieje z danymi ... itd.]
Ogólnie nie cierpię "Stacked Sequence" - moim zdaniem zaciemnia obraz. Jedyne wytłumaczenie użycia tej struktury to wykonywanie niepowiązanych kawałków kodu (niepowiązanych drutem) w określonej kolejności ... np. jakieś procedury wstępnej inicjalizacji, które robimy normalnie przy pomocy Flat Sequence, a później zmieniamy na Stacked, żeby mniej miejsca zajmowało.

Może dwie pętle sprzętowe nie są złym pomysłem... ?... jeżeli do tego potrzebujesz analizować wspólne wyniki, to architektura producent-konsument z dwiema kolejkami, po jednej z każdej pętli produkującej dane...

Powyższe to tylko hipotetyczne rozwiązanie, bo jak pisałem wcześniej brak wystarczającej informacji.
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Awatar użytkownika
Pitol
Moderator
Posty: 982
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Re: Problem

Post autor: Pitol »

Witaj kolego Jamal79.

Na wstępie chciałbym zwrócić Ci uwagę na kilka rzeczy:
1. Dział "Sprawy Forum" nie jest od poszukiwania chętnych do zrobienia programu
2. Nazwanie tematu "Problem" nie jest wystarczające.

Temat został przeniesiony i poprawiony. Następnym razem proszę o umieszczanie tematów w odpowiednich działach i poprawne ich opisywanie. W przeciwnym wypadku będę takie posty usuwał.

Co do Twojego problemu. "Złożony program" to ja mogę nazwać mój budzik z czasów studiów, co miał 7 wątków. Nie zmienia to faktu, że to tylko budzik. Zgadzam się ze smiga, że za mało informacji o Twoim programie. Jeśli udzielisz więcej informacji na temat programu i tego, co chcesz osiągnąć, to będziemy w stanie pomóc Ci w doborze odpowiedniej architektury.
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
Jamal79
Posty: 289
Rejestracja: 01 maja 2012 14:14
Wersja środowiska: LabVIEW 2012
Lokalizacja: Farum

Re: Wybór odpowiedniej architektury dla programu

Post autor: Jamal79 »

1. Na wstepie posta zapytalem o istnienie odpowiedniego miejsca na forum. Nie szukam chetnych do zrobienia programu tylko o porade doswiadczonych userow.
2. Fakt slowo problem tu niepasuje, nalezalo uzyc "zadanie", "wyzwanie".

Mam labolatorium przystosowane do badania warunkow komfortowych w pomieszczeniach z dzialajaca wentylacja. Tzn budowane jest pomieszczenie w ktorym umieszczany jest obiekt testowy, powiedzmy w suficie.
Podczas testu pobierane sa dane:
1. z Agilenta (30szt PT1000)
2. z Kart: 64- sygnaly wejsciowe mieszanka: cisnienie, temperatura, poziom polozenia zaworow itd
wyjsciowymi sterowana jest regulacja temperatur, cisnien, itd. Calosc jest dosc skaplikowana, mieszanka roznych sygnalow od +5/-5V, przez 0-10v do mv. Wszystko uzaleznione bylo od dostepnosci w owych czasach sprzetu.
3. Z analizatora anometrow- 24 czujniki mierzace temp i predkosc z analizatora dodatkowo otrzymujemy DraftRates i Turbulencje.

To wszsytko obslugiwane jest przez jeden DataServer i rozpowszechniane poprzez DataSocketa. Niepowiem to akurat rozwiazanie mi sie podoba ale ciezko dokonac zmian. Tego nawet Kodu bal bym sie ruszac, duzo technik kodowania (GOOP) i kilku roznych programistow probowalo to "ulepszyc", obecnie jest ok 200 sVI'ow. Program zostal stworzony na 6.1.

Do ogarniecia calasci jest klient, za pomoca ktorego mozemy pobierac poszczegolne dane. analizowac je i eksportowac do excela. Predkosc i synchronizacja niesjest tu kluczowym warunkiem, bo i tak wszsytkie dane sa usredniane(3 min).

I tu sie zaczny wyzwanie.
Dozbrajamy sie w dodatkowe wyposazenie, tzn nowe karty oraz nowe anometry (stare maja po 25-30lat). Chce zrobic to tak aby rownolegle chodzily oba DataServery do czasu przejecia wszystkich funkcji przez nowy Server.
Pytalem o architekture bo na wstepie musze zainicjowac wszystkie urzadzenia zewnetrzne, poczekac na odpowiedz i dopiero wtedy zapuscic udostepnianie przez siec...

Dlatego pisalem ze chcialbym to miec w sekwencjach itd. Poniewaz podczas pobierania danych z "analizatora" reszta danych jest usredniana. moglbym podzielic te procesy np. na dwa rozne rdzenie i dograc odpowiednio taktowanie itd. ale docelowo chodzi to na starym jednordzeniowym kompie...

To tak po krotce, sry za zbut dluga wypowiedz, jak bedzie trzeba wiecej info to moge dopisac, wszystko zalezy od rozwoju sytuacjii.

PS. Wiem ze budowa budzika w porowninu z moim "problemem" moze wydawac sie blachostka ale prosze o wyrozumialosc, jestem nowicjuszem.
Jamal79
Posty: 289
Rejestracja: 01 maja 2012 14:14
Wersja środowiska: LabVIEW 2012
Lokalizacja: Farum

Wybór odpowiedniej architektury dla programu

Post autor: Jamal79 »

Hmmm

Wlasnie tego sie obawialem, zlozonosc tematu wystraszyla wszystkich :(

Planuje to zrobic tak:
1. Od lewej CaseStruktre, w ktorej odbeda sie inicjacje tabel, wczytanie ICF i UCF, zainicjowanie DSTP; zainicjowanie danych i stworzenie class (GOOP) oraz start DataSocketServera.
2. Nastepnie StackedSequenceStructure:
- w pierwszym oknie ustalenie parametrow, takich jak czestotliwosc pobierania danych, sciezka zapisu danych, zakres wykozystywanych resorsow(tzn po puzniejszym podpieciu nowego sprzetu)
- W kolejnym CaseStructure z Loopem w ktorym jest event do wykonania np: zapisow, pomiarow, czyszczen tablic itd. Ta opcja daje mi elastycznosc w przyszlym eventualnym rozbudowaniu programu
- Ostatnie do zamkniecia i zniszczenia procesow i buforow.

Moge zrobic ewentualnie troche screenow, macie jakies sugestie albo zastrzezenia co do mojej teorii?? Moze ktos robil cos zblizonego i ma jakies doswiadczenia z tym zwiazane... :-ss
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: Wybór odpowiedniej architektury dla programu

Post autor: PiDi »

Złożoność może nie wystraszyła, tylko raczej wskazuje na to, że projekt nie należy do "załatwialnych" na forum. Tu może być niezbędne bardziej... Hmmm... Komercyjne podejście ;)
Inna sprawa, że jakieś obrazki by pomogły - aż się prosi jakiś pokomentowany zarys VIja zamiast tych opisów słownych w ostatnim poście. Nie po to LV jest graficzne, żeby o nim pisać :D Szczególnie, że nie mam pojęcia, o co Ci chodzi z tymi Case Structure porozrzucanymi z prawej, lewej, góry, czy tam z dołu.
Co do ogólnych założeń, z tego co zrozumiałem - chcesz koniecznie mieć Stacked Sequence Structure, które moim zdaniem jest pierwszą rzeczą do wywalenia z LV (no dobra, ukrycia, co by zachować kompatybilność z już beznadziejnie napisanym kodem). Ta struktura w każdej sytuacji jest z powodzeniem zastępowalna architekturą maszyny stanów i jest to dobre dla wszystkiego - przejrzystości, skalowalności, itp, itd.
ObrazekObrazekObrazekObrazek
Awatar użytkownika
smiga
Administrator
Posty: 799
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk

Re: Wybór odpowiedniej architektury dla programu

Post autor: smiga »

Faktycznie przydał by się jakiś schemat blokowy działania aplikacji.
"Swoją ulubioną strukturę" możesz wykorzystać do inicjalizacji wszystkiego. Później skorzystaj z jakiejś "normalnej" architektury. Jeżeli użytkownik będzie dużo klikał i na wiele rzeczy miał wpływ to np. producent-konsument z event'em ... ale wciąż niewiele wiemy jak to wszystko działać po kolei i we wzajemnych relacjach ( np. co się dzieje po 10min ... czy system chodzi "non stop", cz kończy po zebraniu pomiarów itd.)
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Jamal79
Posty: 289
Rejestracja: 01 maja 2012 14:14
Wersja środowiska: LabVIEW 2012
Lokalizacja: Farum

Wybór odpowiedniej architektury dla programu

Post autor: Jamal79 »

Obecnie program ma 510 VI'ow 58 DLL'ow. Caly katalog ma 80MB. Jakos ciezko to wstawic na Forum.

PIDI: Case structure mozna przedstawic jako flat i stacked, LV wykonuje dzialania w kolejnosci od lewej do prawej.
Myslalem nad StateMachine ale mialem tam male komplikacje...
SMIGA: Tak program chodzi "Non stop", ale nieprzechowuje zadnych danych tylko je "udostepnia w sieci".
Uparlem sie na eventa bo moge do niego podlaczyc referencje z GOOP'a i automatycznie moge stworzyc eventy do kazdej tam zawartej wartosci...

Dorzucam fotke z panelu i klka PrsCreenow z obslugi Danteca...
Calosc jest po Dunsku tak dla ulatwienia :)
Załączniki
Dantec dataopsamling.doc
doc zawierajacy fotki czesci kodu do obslugi Analizera ananometrow
(701 KiB) Pobrany 450 razy
fotka Panelu
fotka Panelu
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: Wybór odpowiedniej architektury dla programu

Post autor: PiDi »

Jamal79 pisze: PIDI: Case structure mozna przedstawic jako flat i stacked, LV wykonuje dzialania w kolejnosci od lewej do prawej.
Myslalem nad StateMachine ale mialem tam male komplikacje...
Chodzi Ci oczywiście o Sequence Structure, a nie Case, dlatego nie rozumiałem, co mówisz ;) O jakie komplikacje z maszyną stanów chodzi?
Jamal79 pisze:Dorzucam fotke z panelu i klka PrsCreenow z obslugi Danteca...
Calosc jest po Dunsku tak dla ulatwienia :)
Dobrze by było, żebyś pokazał jakiś zarys swojego pomysłu, skoro już pokazałeś, jak to w tej chwili wygląda (a wygląda faktycznie nie najlepiej). Generalnie wygląda to tak, że proponowany przez smige prod-kons z obsługą eventów wpasowuje się w wiele punktów tej aplikacji i rozwiązuje sporo problemów (także z wydajnością, na co zapewne ta aplikacja cierpi).
ObrazekObrazekObrazekObrazek
Jamal79
Posty: 289
Rejestracja: 01 maja 2012 14:14
Wersja środowiska: LabVIEW 2012
Lokalizacja: Farum

Wybór odpowiedniej architektury dla programu

Post autor: Jamal79 »

Dzis niedam rady postaram sie wstawic zarys w ciagu najblizszych dni. Dzieki za zainteresowanie...
Jamal79
Posty: 289
Rejestracja: 01 maja 2012 14:14
Wersja środowiska: LabVIEW 2012
Lokalizacja: Farum

Wybór odpowiedniej architektury dla programu

Post autor: Jamal79 »

Witam ponownie znalazlem troche czasu wiec wrzucam, Dzialajacego vi jako snippeta. Niewiem czy odpali z SubVIami.
Server jeszcze jest w postaci roboczej...

Dziala ale mam dla porownania inny vi, tez wrzuce snippeta. (Ale u uwaga jest to program do obslugi, configuracji silnikow firmy Belimo, jest to niebezpieczna wersja, przy podlaczeniu regulatora niszczy program sterujacy. Ta wersja zostala stworzona do konkretnego oprogramowania i jest zalozona blokada. Uzywanie moze doprowadzic do zniszczenia silownikow...) Chodzi mi o zastosowanie takiej architektiry aby caly program byl na jednym Screenie...
Załączniki
Program belimo, Korzystac na wlasna odpowiedzialnosc.
Program belimo, Korzystac na wlasna odpowiedzialnosc.
Moj client
Moj client
Jamal79
Posty: 289
Rejestracja: 01 maja 2012 14:14
Wersja środowiska: LabVIEW 2012
Lokalizacja: Farum

Wybór odpowiedniej architektury dla programu

Post autor: Jamal79 »

Dzieki za wszelkie uwagi, postaram sie je wykorzystac... :-?

W cliencie obsluge tabelki w loopie zmienilem na subVI'a bo potrzebuje ich kilka do poszczegolnych Danych z DataSocketow.
ODPOWIEDZ