Podział danych

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
napoleon13
Posty: 16
Rejestracja: 10 sie 2010 13:54
Wersja środowiska: LabVIEW 8.5

Podział danych

Post autor: napoleon13 »

Utworzyłem tablice danych. Mam problem z danymi zawartymi w tej tablicy.
Przesyłane są na zmianę bity starsze [H] i młodsze[L]. W jaki sposób mógłbym je ze sobą scalić?
Długość tablicy 1024 pola (512 próbek 2 bajtowych).

Obrazek

Można to jakoś zrobić w tych tablicach? Czy powinienem to zrobić przed zamianą na tablice (String To Byte Array )?
Ale wtedy będzie kłopot ze stworzeniem tej tablicy :)
kisiel
Posty: 6
Rejestracja: 02 gru 2007 16:46
Wersja środowiska: LabVIEW 8.6
Lokalizacja: Kraków
Kontakt:

Re: Podział danych

Post autor: kisiel »

Witam

Spróbuj rzutowania Typecast (Numeric/Data Manipulation pallete). Na wejście podepnij Twoją tablicę 1024 elementów U8. Do terminala type, podłącz deskryptor typu - pustą tablicę U16. Utworzona na wyjściu kopia danych wejściowych będzie posiadała rozmiar 512 elementów U16. Mam nadzieję, iż w interpretacji takiej jakiej oczekujesz.

Pozdrawiam
Artur
napoleon13
Posty: 16
Rejestracja: 10 sie 2010 13:54
Wersja środowiska: LabVIEW 8.5

Re: Podział danych

Post autor: napoleon13 »

kisiel pisze: podłącz deskryptor typu - pustą tablicę U16.
Jak wstawić taką tablicę? "array connstant"? Ale nie bardzo wiem jak ustawić w niej 16 bitów ;/
Awatar użytkownika
spec.kolombo
Posty: 126
Rejestracja: 20 sie 2008 06:33
Wersja środowiska: LabVIEW 2009
Lokalizacja: Gdynia
Kontakt:

Podział danych

Post autor: spec.kolombo »

Nie znam problemu, ale tak tylko przypominam, że jak Pan panie Napoleonie zamienisz string np. "23" na byte array to otrzymasz dwa bajty: pierwszy 00000010 i drugi 00000011 a po połączeniu tych dwóch bajtów wynikową liczbą będzie 515. Więc zastanów się czy bardziej nie potrzebujesz funkcji np. "scan from string" albo któregoś z palety zamiany stringów na liczby, albo - jak podejrzewam - potrzebujesz funkcji "spreadsheet string to array"
pozdrawiam
Ostatnio zmieniony 22 wrz 2010 07:19 przez spec.kolombo, łącznie zmieniany 2 razy.
Lepiej być bogatym i zdrowym, niż biednym i chorym.
Spec Kolombo
napoleon13
Posty: 16
Rejestracja: 10 sie 2010 13:54
Wersja środowiska: LabVIEW 8.5

Podział danych

Post autor: napoleon13 »

Obrazek

Wyszło mi masło maślane :)

Nie wiem czy dobrze połączyłem te dane za pomocą bloczka "String Subset".
Ma ktoś może jakiś pomysł?
Awatar użytkownika
spec.kolombo
Posty: 126
Rejestracja: 20 sie 2008 06:33
Wersja środowiska: LabVIEW 2009
Lokalizacja: Gdynia
Kontakt:

Re: Podział danych

Post autor: spec.kolombo »

ok, dowiedziałem się o co chodzi:
Mam urządzenie z oprogramowaną atmegą, która wysyła mi pomiary w paczkach 32 bajtowych.
1 pomiar(16 bitów) to 2 bajty(2*8 bitów) -> bity starsze[H] i bity młodsze [L]
W rezultacie mój ciąg to 512 próbek 2 bajtowych. (1024 bajty)
[H][L][H][L][H][L][H][L][H][L][H][L]...[H][L] - Po tych danych są jeszcze inne dane, ale one mnie nie interesują.
[...]Połączenie bitów starszych i młodszych...

Podział próbek na 2. Pierwsze 256 to dane X, kolejne 256 próbek dane Y.
I wyświetlenie tych dwóch tablic na wykresie XY.
rozwiązanie na poniższym rysunku i w pliku vi, powinno działać (mam nadzieję :) )
tylko podłącz tam swoje dane zamiast stringa i zamień liczbę iteracji pętli na 512 i tą 8 zamień na 256.
pozdrawiam
Załączniki
napoleon13.vi
(11.28 KiB) Pobrany 271 razy
napoleon13.png
Lepiej być bogatym i zdrowym, niż biednym i chorym.
Spec Kolombo
napoleon13
Posty: 16
Rejestracja: 10 sie 2010 13:54
Wersja środowiska: LabVIEW 8.5

Podział danych

Post autor: napoleon13 »

Wszystko śmiga, ale tylko dla ręcznie podanego stringa.
W rzeczywistości pakiety przesłane przez atmege w tych paczkach nakładają się na siebie tworząc niezły bałagan.
Dlatego przed Pana rozwiązaniem chciałem utworzyć tablice 1024 elementów. Niestety z mizernym skutkiem...
Obrazek

W załącznikach przesyłam stringa jakiego otrzymałem z urządzenia.
1 losowa próbka:
http://w489.wrzuta.pl/plik/5bdYkMXAGsp/losowa_1_probka
Za pomocą mojej tablicy:
http://w489.wrzuta.pl/plik/9EAJzl7U6Mh/ ... ej_tablicy
Awatar użytkownika
spec.kolombo
Posty: 126
Rejestracja: 20 sie 2008 06:33
Wersja środowiska: LabVIEW 2009
Lokalizacja: Gdynia
Kontakt:

Podział danych

Post autor: spec.kolombo »

Jak ta próbka nie zajmuje kilku MB to wrzuć ją tutaj, bo nie mogę w pracy (mam zablokowane) wchodzić na wrzuta.pl.
W załączniku wersja dla LV8.5.
Załączniki
napoleon13.vi
(12.5 KiB) Pobrany 297 razy
Lepiej być bogatym i zdrowym, niż biednym i chorym.
Spec Kolombo
napoleon13
Posty: 16
Rejestracja: 10 sie 2010 13:54
Wersja środowiska: LabVIEW 8.5

Re: Podział danych

Post autor: napoleon13 »

Wrzucam tutaj stringi i mój dotychczasowy program:
Załączniki
Prosty_visa.vi
to co zmajstrowałem
(17.63 KiB) Pobrany 308 razy
dane odebrane za pomocą utworzonej tablicy.txt
dane odebrane za pomocą mojej tablicy
(332.21 KiB) Pobrany 304 razy
losowa 1 probka.txt
1 losowa probka
(16 Bajtów) Pobrany 284 razy
Awatar użytkownika
spec.kolombo
Posty: 126
Rejestracja: 20 sie 2008 06:33
Wersja środowiska: LabVIEW 2009
Lokalizacja: Gdynia
Kontakt:

Podział danych

Post autor: spec.kolombo »

Ja już nic nie rozumiem.
Myślałem że losowa 1 próbka pochodzi od urządzenia z atmegą, która wysyła 32 bajty - próbka którą wysłałeś zawiera ich 18...
poza tym nie napisałeś w jakim formacie je wysyła (pierwsza połowa to wartości X a druga połowa to wartości Y?).

i pytanie podstawowe: skąd Ci się wzięły dane w pliku "dane odebrane za pomocą utworzonej tablicy"??!! co to za dane? skąd one się wzięły? i jak one się mają w odniesieniu do odebranych danych z urządzenia?
Lepiej być bogatym i zdrowym, niż biednym i chorym.
Spec Kolombo
napoleon13
Posty: 16
Rejestracja: 10 sie 2010 13:54
Wersja środowiska: LabVIEW 8.5

Podział danych

Post autor: napoleon13 »

Dane w plikach zostały utworzone za pomocą: "Write to Text File" po bezpośrednim podłączeniu (1 próbka) lub z tworzeniem tablicy (seria).

Atmege wysyła wszystko co ma (1024 bajty + inne dane) , a jeśli skończy wysyłanie wysyła te dane ponownie.

Próbka może mieć np 18 bajtów, jeśli jest to paczka po tych pierwszych 1024... są to inne dane i ich paczki wyglądają trochę inaczej.

Pierwsze 1024 bajty wyglądają tak jak to wcześniej przedstawiłem.
[H][L][H][L][H][L][H][L][H][L]..[H][L]=1024 bajty=512 próbek= 256 danych X i 256 danych Y.
Awatar użytkownika
spec.kolombo
Posty: 126
Rejestracja: 20 sie 2008 06:33
Wersja środowiska: LabVIEW 2009
Lokalizacja: Gdynia
Kontakt:

Podział danych

Post autor: spec.kolombo »

Jakoś nie widzę tych 1024 bajtów żeby miały jakiś sens. po pierwsze dane w pliku które przesłałeś posiadają znaczek końca linii, który podejrzewam że atmega sama nie dodała. Po drugie pierwsze 1024 dane to liczba 8382 więc trudno tutaj z jednej liczby zrobić wykres. Więc upewnij się czy faktycznie dostajesz takie dane jakie piszesz i dokładnie w takim formacie.
Lepiej być bogatym i zdrowym, niż biednym i chorym.
Spec Kolombo
napoleon13
Posty: 16
Rejestracja: 10 sie 2010 13:54
Wersja środowiska: LabVIEW 8.5

Podział danych

Post autor: napoleon13 »

problem okazał się być banalnym...
1. w bloczku "VISA Configure Serial Port VI" wystarczyło "Enabled termination" dać na falce :D
2. w "VISA Read" - "byte count" wartość większą niż 1024 bo tablica 1024 była przepełniana.
Dziękuję wszystkim za pomoc!
ODPOWIEDZ