tworzenie listy obiektów z klastra

Jeśli masz coś do powiedzenia w sprawie LabVIEW napisz. Tutaj są tematy, których nie można uściślić do innych działów.
kicaj
Posty: 26
Rejestracja: 30 mar 2008 20:39
Wersja środowiska: LabVIEW 2013
Kontakt:

tworzenie listy obiektów z klastra

Post autor: kicaj »

Witam,

może ktoś doradzi w sprawie zagwozdki...

mam klaster o budowie zdefiniowanej zgodnie z konkretnym typem dokumentu XML. każdy element tego klastra ma określoną nazwe zgodnie z nazwami elementow w XML. Chciałbym teraz wyciągnąć z tego klastra nazwy tych obiektów łącznie z hierarchią i utworzyć obiekt tak by mozna było poprzez property node zmieniać wartość tylko poszczególnego elementu a nie za każdym razem całość unbundle...
jest to o tyle wazne że w przyszłości przy zmianie struktury nie trzeba będzie znow poprawiać wszystkich programów...
jak się do tego zabrać?

Oryginalna funkcja text<-->xml w LV nie jest niestety pomocna.

dzięki za wszelkie sugestie...
Robię co lubię, lubię co robię: satysfakcja gwarantowana dla mnie i dla szefa...
SNT
Posty: 56
Rejestracja: 18 lip 2013 13:23
Wersja środowiska: LabVIEW 2013

tworzenie listy obiektów z klastra

Post autor: SNT »

Witaj.
Ja to widzę tak: tworzysz referencję do klastra, następnie przez property node (Allobjects[]) sprawdzasz w pętli for class name i do odpowiedniej użyj to more specific class, następnie sprawdzasz label lub caption (zależy co ustawiłeś) i wyciągasz to co Cię interesuje.
Opis może być trochę niejasny więc za chwilę dorzucę przykład.
Załączniki
subVI_get_cluster_ref.vi
(13.86 KiB) Pobrany 359 razy
MAIN.vi
(9 KiB) Pobrany 339 razy
kontrloka_przyklad.ctl
(4.46 KiB) Pobrany 348 razy
kicaj
Posty: 26
Rejestracja: 30 mar 2008 20:39
Wersja środowiska: LabVIEW 2013
Kontakt:

Re: tworzenie listy obiektów z klastra

Post autor: kicaj »

OK, dzieki. jutro już na spokojnie zaglądnę i się odezwę... próbowałem z opisu ale coś chyba pomieszałem i nie chciało wyjść ;)
Robię co lubię, lubię co robię: satysfakcja gwarantowana dla mnie i dla szefa...
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: tworzenie listy obiektów z klastra

Post autor: PiDi »

Możesz jakiś przykład takiego klastra i xml-a zamieścić? I pokazać dokładnie, co chciałbyś z tym zrobić?
ObrazekObrazekObrazekObrazek
kicaj
Posty: 26
Rejestracja: 30 mar 2008 20:39
Wersja środowiska: LabVIEW 2013
Kontakt:

tworzenie listy obiektów z klastra

Post autor: kicaj »

W załącznikach oba pliki

z jednej strony chciałbym by można było wyciagnąć poszczególne nazwy i strukturę z drugiej utworzyć obiekt albo metodę do wprowadzania/zmiany poszczególnych elementów

***
OK, ciąg dalszy zabawy. Poprzez property node, podobnie jak SNT pokazał (dzięki) wyciagam nazwę obiektu w klastrze, ale oprócz boolean i cluster. Przy boolean nie ma błedu ale zamiast nazwy z label.text dostaje tylko Boolean a w przypadku klastra mam błąd podczas użycia "to more specific class". Może to ktos wytłumaczyć?
Załączniki
test file-xml.txt
plik XML (jako tekstowy)
(7.53 KiB) Pobrany 436 razy
XML file structure_DZ.vi
klaster (w formie control i indicator)
(20.99 KiB) Pobrany 342 razy
Robię co lubię, lubię co robię: satysfakcja gwarantowana dla mnie i dla szefa...
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: tworzenie listy obiektów z klastra

Post autor: PiDi »

z jednej strony chciałbym by można było wyciagnąć poszczególne nazwy i strukturę z drugiej utworzyć obiekt albo metodę do wprowadzania/zmiany poszczególnych elementów
Nadal do końca nie rozumiem: skąd chcesz wyciągać nazwy i strukturę - z xml czy z klastra? Gdzie chcesz wprowadzać zmiany? Kiedy te zmiany chcesz wprowadzać - w działającym programie?
Przy boolean nie ma błedu ale zamiast nazwy z label.text dostaje tylko Boolean a w przypadku klastra mam błąd podczas użycia "to more specific class". Może to ktos wytłumaczyć?
Pewnie może wytłumaczyć, jak kod pokażesz :D
ObrazekObrazekObrazekObrazek
kicaj
Posty: 26
Rejestracja: 30 mar 2008 20:39
Wersja środowiska: LabVIEW 2013
Kontakt:

tworzenie listy obiektów z klastra

Post autor: kicaj »

ok, odezwę się jak będę miał coś do pokazania ;)
prosze o cierpliwość...
Robię co lubię, lubię co robię: satysfakcja gwarantowana dla mnie i dla szefa...
kicaj
Posty: 26
Rejestracja: 30 mar 2008 20:39
Wersja środowiska: LabVIEW 2013
Kontakt:

Re: tworzenie listy obiektów z klastra

Post autor: kicaj »

Dzięki waszej pomocy juz potrafię wyciągnąć nazwy z elementów klastra. natomiast problem pozostaje gdy jednym z elementów klastra jest inny klaster. Próbuję to zapętlić, jak w załączonym pliku ale niestety LabView nie pozwala na wywołanie tej samej funkcji z funkcji... Odpowiedź jest w ustawieniach pamięci do wywolania...
VI properties/execution/ shared clone reentrant execution

a czy mozna to inaczej rozwiązać?
próbowalem event'ami ale nie poszło...
Załączniki
Cluster2list.vi
(12.64 KiB) Pobrany 340 razy
Robię co lubię, lubię co robię: satysfakcja gwarantowana dla mnie i dla szefa...
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: tworzenie listy obiektów z klastra

Post autor: PiDi »

To ja konsekwentnie będę się pytał o to, co Ty w ogóle chcesz osiągnąć. Bo cały czas mam wrażenie, że wszystko co się tu dzieje prowadzi w jakiś okropnie skomplikowany sposób do efektu, który można osiągnąć podstawowymi funkcjami ;)

Jeśli chcesz wywoływać funkcję rekursywnie, to trzeba ją ustawić na shared clone reentrant. Nie ma innego wyjścia. Co mają eventy do tego?

ed. I jeszcze jedno pytanie - dlaczego nie po prostu Flatten To XML?
ObrazekObrazekObrazekObrazek
kicaj
Posty: 26
Rejestracja: 30 mar 2008 20:39
Wersja środowiska: LabVIEW 2013
Kontakt:

Re: tworzenie listy obiektów z klastra

Post autor: kicaj »

dlaczego nie flatten to xml? bo nie podoba mi się to jaki jkest format dokumentu XML póżniej. A format pliku, co prawda zgodny ze standardem XMl, ale specyficzny...
Dlatego sie pytam czy nie można tego w jakiś prostszy sposób zrobić, a potrzebuję w takiej postaci, by w przypadku zmiany formatu, np. poprzez dodanie dodatkowych parametrów, móc automatycznie uwzględnić ją w programie...
Idea jest taka: plik ze zdefiniowaną strukturą XML + lista wszystkich parametrów, która służy jako baza nazw parametrów, łącznie ze strukturą, wykorzystywana później w innych programach jako źródło
Robię co lubię, lubię co robię: satysfakcja gwarantowana dla mnie i dla szefa...
TMa
Posty: 203
Rejestracja: 07 sty 2010 12:56
Wersja środowiska: LabVIEW 2017

Re: tworzenie listy obiektów z klastra

Post autor: TMa »

A próbowałeś palety XML Parser? Udostępnia takie cuda jak "Get All Matched Nodes.vi" szukająca po XPath czy invoke node Get Elements by Tag Name. Przydają się jak chcesz w całej strukturze XML znaleźć konkretny element.
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: tworzenie listy obiektów z klastra

Post autor: PiDi »

kicaj pisze:dlaczego nie flatten to xml? bo nie podoba mi się to jaki jkest format dokumentu XML póżniej. A format pliku, co prawda zgodny ze standardem XMl, ale specyficzny...
Co w tym formacie jest nie tak, co to znaczy "specyficzny"? Co Ci się nie podoba?
kicaj pisze: Dlatego sie pytam czy nie można tego w jakiś prostszy sposób zrobić, a potrzebuję w takiej postaci, by w przypadku zmiany formatu, np. poprzez dodanie dodatkowych parametrów, móc automatycznie uwzględnić ją w programie...
Masz na razie skomplikowaną nie do końca działającą własną implementację (patrzę na ostatni twój załącznik). Odrzucasz wykorzystanie jednego, powszechnie dostępnego bloczka w LabVIEW. Po czym pytasz, czy da się prościej? ;)
kicaj pisze: Idea jest taka: plik ze zdefiniowaną strukturą XML + lista wszystkich parametrów, która służy jako baza nazw parametrów, łącznie ze strukturą, wykorzystywana później w innych programach jako źródło
O ile się nie mylę, to do definiowania struktury XML służy XML Schema. Można taki dokument chyba dopiąć w labwjowym parserze, o którym mówi TMa. To a propos tej listy/bazy parametrów.
A w samym temacie: pokaż mi jeden rysunek/fragment kodu obrazujący, co chcesz osiągnąć. Cały czas nie widzę twojego celu. Nie rozumiem, co to znaczy, że ten XML ma służyć jako "źródło" (źródło czego?) w "innych" (innych niż?) programach.



Sorry, jakoś tak się uwziąłem od początku i będę nachalnie prowadził dochodzenie w tym wątku :D
ObrazekObrazekObrazekObrazek
kicaj
Posty: 26
Rejestracja: 30 mar 2008 20:39
Wersja środowiska: LabVIEW 2013
Kontakt:

Re: tworzenie listy obiektów z klastra

Post autor: kicaj »

Poprawcie mnie jeśli się myle...
TMa pisze:A próbowałeś palety XML Parser?
Taki mam zamiar, ale do tego potrzeba już plik ze strukturą XML, jak się mi wydaje.
Idea taka - najpierw definiuję strukturę pliku, z parametrami, tworze plik, który potem w zalezności od potrzeb otwieram i zapisuje/odczytuję odpowiednie parametry/dane
PiDi pisze:Co w tym formacie jest nie tak, co to znaczy "specyficzny"? Co Ci się nie podoba?
a widziałeś jaka jest struktura pliku XML tworzonego przez LabView? http://thinkinging.com/2008/01/21/using ... w-is-hard/ i wszystko jasne ;)
PiDi pisze:Masz na razie skomplikowaną nie do końca działającą własną implementację (patrzę na ostatni twój załącznik). Odrzucasz wykorzystanie jednego, powszechnie dostępnego bloczka w LabVIEW. Po czym pytasz, czy da się prościej?
możesz to rozwinąć?
PiDi pisze:O ile się nie mylę, to do definiowania struktury XML służy XML Schema. Można taki dokument chyba dopiąć w labwjowym parserze, o którym mówi TMa. To a propos tej listy/bazy parametrów.
A w samym temacie: pokaż mi jeden rysunek/fragment kodu obrazujący, co chcesz osiągnąć. Cały czas nie widzę twojego celu. Nie rozumiem, co to znaczy, że ten XML ma służyć jako "źródło" (źródło czego?) w "innych" (innych niż?) programach.
zgadza się, ale jak pisałem wczesniej - nie podoba mi się format LabView, chcę stworzyć własny który będę mógł potem na własny uzytek modyfikować, chcę sie czegoś więcej nauczyć w LabView ;) ...

XML file structure.vi tam masz strukturę pliku w postaci klastra, z tego klastra chcę wyciągnąć nazwy poszczególnych elementów... to pierwszy problem
nadal nie rozumiem dlaczego boolen jest traktowany jako obiekt złożony, tak samo jak cluster. Może to ktoś wyjaśnić?
Robię co lubię, lubię co robię: satysfakcja gwarantowana dla mnie i dla szefa...
kicaj
Posty: 26
Rejestracja: 30 mar 2008 20:39
Wersja środowiska: LabVIEW 2013
Kontakt:

Re: tworzenie listy obiektów z klastra

Post autor: kicaj »

wracam do problemu.
kwestie tworzenia struktury rozwiązana - program, tak jak opisałem tworzy strukturę pliku XML zgodnie ze standardem http://www.panalytical.com/XRDMLInforma ... 201.5.html oraz tworzy plik XML (załącznik) w oparciu o mój zdefiniowany cluster.
niestety nie mogę z takiego pliku wyciągnąć poszczególne pozycje (nodes) tak by móc operować (czytac, zapisać) funkcjami oferowanymi w LabView - XML Parser.
Pytanie - czy to związane jest ze specjalną strukturą pliku czy może coś źle robię. Zwykła próba otwarcia pliku i odczytanie wszystkich nodes (get all matched nodes.vi) zwraca pustą listę... Tak samo read From XML File.vi zwraca pusty string.
Czy da się jakoś "dopasować" istniejące funkcje do mojegio pliku? Czy muszę wszystko od początku sam programować?
dzieki za każdą sugestię, uwagę...
Załączniki
1405090A.xml.txt
pusty plik XML
(1.94 KiB) Pobrany 318 razy
Robię co lubię, lubię co robię: satysfakcja gwarantowana dla mnie i dla szefa...
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: tworzenie listy obiektów z klastra

Post autor: PiDi »

kicaj pisze: niestety nie mogę z takiego pliku wyciągnąć poszczególne pozycje (nodes) tak by móc operować (czytac, zapisać) funkcjami oferowanymi w LabView - XML Parser. Pytanie - czy to związane jest ze specjalną strukturą pliku czy może coś źle robię. Zwykła próba otwarcia pliku i odczytanie wszystkich nodes (get all matched nodes.vi) zwraca pustą listę...
Plik jest prawidłowo sformatowany. Otwiera się przez wbudowany parser prawidłowo, można się też po nim bez problemu poruszać (czy to przez prop i inv node-y, czy to przez zapytania XPath). Get All Matched Nodes.vi zwraca węzły zgodnie z zapytaniem, które do niego podepniesz. Jeśli podepniesz pusty string, to pytasz o nic - stąd nic dziwnego, że zwraca pustą tablicę. Prawidłowe zapytanie o absolutnie wszystko w dokumencie to: /descendant::*. Polecam doczytać dokumentację.
kicaj pisze: Tak samo read From XML File.vi zwraca pusty string.
Ta funkcja służy do odczytu XML zapisanego zgodnie ze schematem LabVIEW. Twój plik nic z tym schematem wspólnego nie ma ;)
ObrazekObrazekObrazekObrazek
ODPOWIEDZ