Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Visual Studio 2010 - rysowanie wykresów

marcin_rs 12 Mar 2015 21:41 1098 9
  • #1 12 Mar 2015 21:41
    marcin_rs
    Poziom 9  

    Witam,

    skoro temat już zamknięty: Link

    Może uda mi się dowiedzieć co tu trzeba dorobić żeby mieć opis osi x w formie dat (od prawej do lewej) po prawej data dzisiejsza (pobierana chyba najlepiej z komputera) w formacie np. 12.03.2015 im bliżej lewej tym data starsza 11.03.2015 ... itd i tak 31 x

    -1 9
  • #2 13 Mar 2015 08:48
    cepelia
    Poziom 20  

    Te daty będą się zmieniać... kiedy potrzebujesz zmieniać te daty i jak długa ma być historia ??

    Poza tym co chcesz przedstawić na wykresie w skali miesiąca ?? Co to za dane, być może jest lepsze rozwiązanie...

    -1
  • #3 13 Mar 2015 12:21
    marcinj12
    Poziom 40  

    Tu masz przykład z C# prezentacji danych z datą na wykresie. Powinieneś bez problemu sobie to przerobić pod składnię VB.

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    -1
  • #4 13 Mar 2015 14:27
    cepelia
    Poziom 20  

    Na to jest dużo sposobów, w zależności czy masz w pliku danych datę czy liczbę porządkową, którą chcesz oś opisywać... opcji jest multum...

    to jest przykład metody którą możesz formatować sobie osie używając stringów do opisu poszczególnych kolumn. Ma to swoje zalety, mianowicie możesz sobie po lekkiej modyfikacji podpisywać kolumny datą, nazwą, czy czym tam chcesz zamienionym na string...

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod



    Przykład wywołania tej metody...

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    To napisane tak na szybko, jak podasz więcej konkretów to można przerobić tą metodę na taką jaka będzie ci potrzebna.

    Efekt działania tej metody... http://youtu.be/A5ek7_BxPes

    Wykres generowany z wartości losowych na podstawie przykładu na który się powołałeś ...
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Oczywiście colIndex zwiększany cyklicznie w timerze...

    -1
  • #5 13 Mar 2015 15:27
    marcin_rs
    Poziom 9  

    Wygląda sprawa następująco:

    Sterownik rejestruje pomiary cyklicznie (są 2 wykresy) jeden dobowy co 24 godziny rejestracja przez 31 dni (drugi analogicznie - co godzinny rejestr obejmujący 48 godzin)

    W pierwszym przypadku jest 31 słupków na wykresie (pierwszy po prawej słupek jest aktualny - doba jeszcze nie zamknięta lub godzina nie zamknięta w przypadku drugiego wykresu), Drugi słupek od prawej to dzień wczorajszy lub poprzednia godzina pełna.

    Generując statystykę wykresu jest tworzony plik xml z danymi, które są przenoszone do tablicy a następnie na podstawie tablicy jest generowany wykres (statyczny),

    Przykładowo - 13.03.2015 godzina 13.30 czyli wykres dobowy posiada dane w pierwszym słupku po prawej - od godziny 00.00 do 13.30

    2-gi wykres cogodzinny posiada dane godzinowe - analogicznie pierwszy od prawej słupek nie pełna godzina czyli od 13.00 do 13.30, drugi słupek od prawej to są dane zarejestrowane pomiędzy godziną 12.00 - 13.00

    Moje założenie jest takie - skoro pobieramy dane ze sterownika on rejestruje je w oparciu o RTC a komputer też posiada zegar to w przypadku błędu max kilku sekund nie ma to znaczenia żadnego dla statystyk w związku z czym datę i godziny można pobierać z komputera.

    Mam nadzieję że przybliżyłem mój problem lepiej.

    -1
  • #6 14 Mar 2015 12:31
    cepelia
    Poziom 20  

    Czyli zasadniczo powinien ci wystarczyć ten kod który ci napisałem... bo potrzebujesz tylko opisać oś w formacie dataCzas...
    Przyjrzyj się temu co napisałem i ewentualnie poszukaj hasła SmartLabel...

    To będzie najprostszy sposób na opisanie tej osi, u ciebie colIndex to będzie adres zmiennej z tablicy z której pobierasz dane...

    Co prawda zorganizował bym to troszkę inaczej, ale jak już masz to napisane i działa to nie ma sensu tego przerabiać...

    Troszkę niewygodne może być to, że nie pokazujesz na wykresie ostatnich 40'tu dni tylko z tego co zrozumiałem co miesiąc tworzy się tablica z pomiarami która pierwszego dnia jest pusta... zatem i wykresu nie ma...
    podobnie powinieneś postąpić wyświetlając ostatnie 48 godzin na wykresie godzinowym... to akurat można dopracować... natomiast jeśli chciałbyś się zabierać za modyfikowanie zapisu do pliku xml, to radzę rozważyć opcję w której plik zostaje uszkodzony (niezapisany, źle nadpisany itd) w momencie zapisu. Dlaczego o tym mówię, a no dlatego że ostatnio przeglądając elektrodę było kilka tematów odnośnie zapisu xml'a tyle tylko, że nikt nie poruszył tego problemu...

    -1
  • #7 14 Mar 2015 14:06
    marcin_rs
    Poziom 9  

    Jestem świadomy niedociągnięć (COM będzie zajęty, program się wysypie, xml będzie źle zapisany też się wysypie) ale na razie się jeszcze uczę. Mam nadzieje, że wszystko się uda dopracować

    Chyba troszkę źle wytłumaczyłem -

    48 godzin jest rejestrowane z rozdzielczością godzinną
    (co godzinę → | nowa wartość | → przesunięcie o 1 w rejestrze ster. → najstarsza przepada → )

    30 dni jest rejestrowane z rozdzielczością dobową
    (tak samo tylko co dobę następuje)

    wartość pusta zdarzyła się tylko 1 x (może się zdarzyć tylko w przypadku "nowego startu")


    za "już" dzięki wielkie jednak nasunął mi się kolejny problem " kropki i przecinka "
    w VB działa matematyka z przecinkami (jak chcę coś wyliczyć) a wykres działa z kropkami :/

    co robię nie tak ?? dziwne by było generować 2x te same dane (jedne z przecinkami 2-gie z kropkami)...

    -1
  • #8 31 Mar 2015 17:11
    marcin_rs
    Poziom 9  

    Witam wszystkich !

    Bardzo dziękuję za okazaną pomoc wykresy wyszły super
    oś x jako datę / godzinę pobieraną z komputera zrobiłem tak:

    Chart1.Series("UART1").Points.AddXY((Mid((DateAdd(DateInterval.Day, 0 - I, Date.Now)), 1, 10)), (wartosc1))
    Chart2.Series("UART2").Points.AddXY(((Mid((DateAdd(DateInterval.Hour, 0 - I, Date.Now)), 12, 2) / 1) & "-" & (Mid((DateAdd(DateInterval.Hour, 1 - I, Date.Now)), 12, 2) / 1) & ""), (wartosc2))

    dzięki czemu uzyskałem efekt jak na załączonym obrazku

    Visual Studio 2010 - rysowanie wykresów

    co do głupot - co napisałem " przecinki i kropki " to uczulam nowych programistów na rodzaj zmiennych używanych w programie ;)

    jeszcze jakby ktoś był uprzejmy powiedział jak opisać oś y (chcę aby była wyświetlana jednostka przy osi).


    Pozdrawiam!

    -1
  • #10 07 Kwi 2015 12:06
    marcin_rs
    Poziom 9  

    Udało się !

    Wielkie dzięki dla Wszystkich!

    Pozdrawiam!

    -1
TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo