Wybór odpowiedniej architektury dla programu
-
- Posty: 289
- Rejestracja: 01 maja 2012 14:14
- Wersja środowiska: LabVIEW 2012
- Lokalizacja: Farum
Wybór odpowiedniej architektury dla programu
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??
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??
- smiga
- Administrator
- Posty: 823
- Rejestracja: 04 paź 2009 12:41
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Słupsk
Re: Problem
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.
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.
- Pitol
- Moderator
- Posty: 986
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Re: Problem
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.
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.
-
- Posty: 289
- Rejestracja: 01 maja 2012 14:14
- Wersja środowiska: LabVIEW 2012
- Lokalizacja: Farum
Re: Wybór odpowiedniej architektury dla programu
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.
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.
-
- Posty: 289
- Rejestracja: 01 maja 2012 14:14
- Wersja środowiska: LabVIEW 2012
- Lokalizacja: Farum
Wybór odpowiedniej architektury dla programu
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...
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...

-
- Posty: 641
- Rejestracja: 31 gru 2010 01:36
- Wersja środowiska: LabVIEW 2017
- Lokalizacja: Katowice
Re: Wybór odpowiedniej architektury dla programu
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ć
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.
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ć

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.
- smiga
- Administrator
- Posty: 823
- Rejestracja: 04 paź 2009 12:41
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Słupsk
Re: Wybór odpowiedniej architektury dla programu
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.)
"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.)
-
- Posty: 289
- Rejestracja: 01 maja 2012 14:14
- Wersja środowiska: LabVIEW 2012
- Lokalizacja: Farum
Wybór odpowiedniej architektury dla programu
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
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 544 razy
-
- Posty: 641
- Rejestracja: 31 gru 2010 01:36
- Wersja środowiska: LabVIEW 2017
- Lokalizacja: Katowice
Re: Wybór odpowiedniej architektury dla programu
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: 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...
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).Jamal79 pisze:Dorzucam fotke z panelu i klka PrsCreenow z obslugi Danteca...
Calosc jest po Dunsku tak dla ulatwienia
-
- Posty: 289
- Rejestracja: 01 maja 2012 14:14
- Wersja środowiska: LabVIEW 2012
- Lokalizacja: Farum
Wybór odpowiedniej architektury dla programu
Dzis niedam rady postaram sie wstawic zarys w ciagu najblizszych dni. Dzieki za zainteresowanie...
-
- Posty: 289
- Rejestracja: 01 maja 2012 14:14
- Wersja środowiska: LabVIEW 2012
- Lokalizacja: Farum
Wybór odpowiedniej architektury dla programu
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...
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...
-
- Posty: 289
- Rejestracja: 01 maja 2012 14:14
- Wersja środowiska: LabVIEW 2012
- Lokalizacja: Farum
Wybór odpowiedniej architektury dla programu
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.

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