Strona 1 z 1
Wykresy XY.
: 02 lis 2011 13:30
autor: rockfor2
Witam
Zanim na mnie nakrzyczycie, że "szukaj na google", czy "to już było", informuje, że przekopałem to forum (przynajmniej wyszukiwarką) i nigdzie nie znalazłem satysfakcjonującej mnie odpowiedzi, więc proszę o pomoc w nowym temacie.
Do wykonania pewnego projektu sięgnąłem po LabView po raz pierwszy(w firmie mają, to czemu by nie).
Chce wyrysować 2 wykresy funkcji o postaci Y=a*X1*X2. Niby proste, ale...
Użytkownik podaje na wejściu X1minimum, X1maximum, X2minimum, X2maximum.
Rysując wykres 1, X2 to wartość stała(biorę ją z innego miejsca) więc wykres jest uzależniony tylko od X1 i ma wyrysować Y tylko w przedziale X1minimum do X2 maximum (dokładnie ten przedział ma się pojawić na osi X wykresu)
Dla wykresu 2 sprawa jest odwrotna, ale jak poradzę sobie z pierwszym przypadkiem to nie będzie problemu...
Próbowałem stosować dwa moduły matematyczne(wolałem to w C pisać i wysłać na Graph XY), ale pętle nie działają jak mają (sprawdzałem probem).
Proszę o sugestie jak w prosty sposób taki problem rozwiązać: narysowania wykresu funkcji w konkretnym(zadeklarowanym przez użytkownika) przedziale lub ewentualnie o jakieś namiary na prosty i zrozumiały kurs podstaw rysowania wykresów w LabView(dla żółtodzioba).
Od razu mówię, że przejrzałem przykładowe programy w helpie i są tam fajne rzeczy, ale ogrom skomplikowania mnie przeraża.
Pozdrowienia
Re: Wykresy XY.
: 02 lis 2011 13:43
autor: smiga
Skorzystaj z właściwości wykresu - klikasz nań prawym myszy i ... Create/Property Node/X Scale/ Range/ Maximum ... lub Minimum.
Tam podłączasz wartości jakie Cię interesują.
Re: Wykresy XY.
: 03 lis 2011 08:47
autor: rockfor2
Dzięki serdeczne za tak szybką odpowiedź, nie spodziewałem się jej jeszcze wczoraj.
Faktycznie, zadziałało, dzięki za podpowiedź, skala ustala się prawidłowo i jest nadzieja, że będzie ok, ale kłopotów ciąg dalszy...
Próbowałem umieścić ten system w finalnym programie, ale nie wychodzi, więc piszę testowy fragment kodu, proszę o poprawę, czy sugestie do problemu:
Kod testowy jest jak na załączonym obrazku. Program czyta wartość max, min, pętla wykonuje się tyle razy, żeby dla każdej wartości stało-liczbowej funkcja była określona (np 60(max)-(25(min) = 35 (przeskoków) 1(dla wartości 60).
Testuje i za każdym razem na wyjściu (Y) wychodzi ta sama wartość a graf nic nie rysuje, przynajmniej żadnej prostej, może punkt. Próbowałem w module matematycznym dopisać funkcję for(x=0;x<=Wmax;x ), żeby ilość iteracji for była równa przejściom od Wmin do W max, a przynajmniej sprawdzić, czy to cokolwiek zmieni, ale nie zmienia.
Czy mam zebrać wyniki z pętli i wrzucić je w jakąś macierz zanim wyśle na graf? Czy on nie może rysować punkt po punkcie? A może jest jakaś inna metoda podania takiego problemu?
edit 1:
Ok, wiem, że wartość Wmin nie zmienia się, tz nie działa inkrementacja Wmin 1. Wyprowadziłem ją na wskaźnik i widze, że się nie zmienia, należy więc równanie uzależnić od i a nie pobieranych za każdym razem tych samych Wmin i Wmax.
Re: Wykresy XY.
: 03 lis 2011 12:32
autor: Ender
Jak znam życie poniższe rozwiązanie nie jest optymalne, ale powinno rzucić nieco światła na 'co i jak'. Proponuję prześledzić działanie obu pętli, a potem poszukać informacji o indeksowaniu i zastosowaniu shift register. Na drugim wykresie wyłączone jest autoskalowanie osi X.
Wykresy XY.
: 07 lis 2011 08:12
autor: rockfor2
Nie musi być optymalny, ważne by działało
Podziękowania bardzo serdeczne, zabieram się za analizę.
Edit: Bardzo proszę przychylną duszę o konwersję na wersje 8.6.1 bo niestety vi w wersji 2009 nie mogę przemielić
z góry dzięki!
Re: Wykresy XY.
: 07 lis 2011 10:31
autor: rivui
Hej!
Ponizej zamieszczam moje rozwiazanie. Pewnie tez nie optymalne ;)
Problem z Twoim kodem byl taki ze nie "gromadziles" wyliczonych wartosci Y z petli tylko po wykonaniu x iteracji podawales do wykresu ostatnia wyliczona wartosc Y.
Zastanawia mnie takze Twoja chec uzycia XY graph. Czy bedziesz posiadal nierownomiernie rozlozone wartosci X? W moim programie uzylem XY graph oraz Waveform chart aby pokazac ze mozna uzyc obu a waveform chart przynajmniej nie zmusza Cie do wyliczania wartosci X tylko podaje je automatycznie.
Michal
Re: Wykresy XY.
: 08 lis 2011 08:26
autor: rockfor2
Dzięki za skrypt, przeanalizowałem go. Bardzo dzięki za zaangażowanie.
Muszę powiedzieć, że od czasu zamieszczenia poprzedniego koma siedziałem nad tym problemem i modyfikowałem swój kod w dziesiątki sposobów. Nie/indeksowanie wyników bloku matematycznego, wyciąganie graph'ów przed pętle/w pętli, zamieniłem blok matematyczny na zwykłe bloczki i doszedłem do czegoś...
Nie upieram się na GraphXY, tylko wyczytałem gdzieś, że można na niego podać 2 funkcje co uznałem za przydatne tu
ale jak na razie nie udało mi się go zmusić do rysowania czegokolwiek:D a Waveform Chart już coś robi.
Procedura wysyła poprawne wyniki, nawet ustala się poprawny zakres, otrzymuje wykres i wartości takie jak bym chciał (sukces), ale pętla wykonuje się nieskończenie wiele razy... co niszczy wynik :/
Objaw jest następujący: jeśli pętla ma się wykonać np. 10 razy, to faktycznie na spokojnie obserwując, widzę 10 razy wykonanie pętli (każde wykonanie to około 2-3 sekund) po czym całość zatrzymuje się na jakieś 4 sekundy i licznik zaczyna liczyć od zera i kolejne 10 razy.... i tak w koło.
Myślałem, że to mój błąd, wstawiałem dodatkowe pętle, modyfikowałem warunki, wstawiłem warunek do pętli while, no wiele wiele... ale w Twoim skrypcie też wszystko wykonuje mi się nieskończenie wiele razy, więc może to jednak błąd ogólniejszy LabView? Robiłem większość możliwych kombinacji, ale aż nie chce mi się wierzyć, że zatrzymanie pętli to jakiś skomplikowany trick, musi być coś prostego a u mnie nie chce się zatrzymywać (nawet stop'em)
Zamieszczam vi i proszę o recenzję, albo naprowadzenie, co zmienić(może w jakiś ogólnych opcjach?)
Re: Wykresy XY.
: 08 lis 2011 08:46
autor: Pitol
rockfor2 pisze:
Procedura wysyła poprawne wyniki, nawet ustala się poprawny zakres, otrzymuje wykres i wartości takie jak bym chciał (sukces), ale pętla wykonuje się nieskończenie wiele razy... co niszczy wynik :/
Objaw jest następujący: jeśli pętla ma się wykonać np. 10 razy, to faktycznie na spokojnie obserwując, widzę 10 razy wykonanie pętli (każde wykonanie to około 2-3 sekund) po czym całość zatrzymuje się na jakieś 4 sekundy i licznik zaczyna liczyć od zera i kolejne 10 razy.... i tak w koło.
Myślałem, że to mój błąd, wstawiałem dodatkowe pętle, modyfikowałem warunki, wstawiłem warunek do pętli while, no wiele wiele... ale w Twoim skrypcie też wszystko wykonuje mi się nieskończenie wiele razy, więc może to jednak błąd ogólniejszy LabView? Robiłem większość możliwych kombinacji, ale aż nie chce mi się wierzyć, że zatrzymanie pętli to jakiś skomplikowany trick, musi być coś prostego a u mnie nie chce się zatrzymywać (nawet stop'em)
)
To co piszesz skłania mnie do jednej tylko możliwej odpowiedzi: używasz do uruchamiania programu przycisku
Run Continously zamiast zwykłego
Run.
- LV.PNG (1.29 KiB) Przejrzano 11801 razy
Wykresy XY.
: 09 lis 2011 08:17
autor: rockfor2
Słusznie
Dziękuje wszystkim za zaangażowanie, wszystko działa. Szczególne podziękowania
Ender, skrypt świetnie wyjaśnia o co chodzi i jak to działa! Dzięki serdeczne!