Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

EXCEL- problem z przetwarzaniem danych w czasie rzeczywistym

mienks 28 Gru 2009 21:19 3009 6
  • #1 28 Gru 2009 21:19
    mienks
    Poziom 2  

    Witam,
    Mam pewien problem polegający na bieżącym opracowywaniu danych. Dwóm komórkom np. A1 i B1 przypisane są zmienne pochodzące z zewnętrznego programu, importowane jako dwie liczby (nie tablice, czy też arkusz). Dane te reprezentują czas (A1) i temperaturę (B1), z tym, że zmieniają się one w czasie rzeczywistym (średnio co 0,003s). Na ich podstawie należy tworzyć „na bieżąco” wykres zależności temperatury od czasu. Z tego co się orientuję makro „z automatu” wykonuje się tylko raz, potem trzeba uruchamiać je ręcznie, co jest raczej nie realne przy zmieniających się co 0,003s wartościach. Czy istnieje jakiś sposób, aby stworzyć taki wykres? Będę wdzięczny za jakąkolwiek pomoc.

    0 6
  • #3 28 Gru 2009 22:13
    mienks
    Poziom 2  

    Tak wszystko ma się dziać w Excelu.Szczerze mówiąc próbowałem stworzyć swoje makro. Zapisywało ono wartości temperatury i czasu w kolejnych wierszach. Na ich podstawie chciałem tworzyć wykres. Wydało mi się to trochę "za biedne" i porzuciłem pomysł, tym bardziej, że makro musiałem odpalać ręcznie:|. Byłbym wdzięczny za informacje o zdalnym uruchamianiu makra lub jakiś przykładowy kod, który naprowadziłby mnie na jakieś rozwiązanie.

    0
  • Pomocny post
    #4 29 Gru 2009 10:32
    wojtekcz
    Poziom 12  

    Z uwagi na brak obsługi przerwań w makro Excela jak chcesz uruchomić makro na jakiś czas to użyj Wait (jest opisany w pomocy). Wtedy możesz uruchomić makro na np. 2 minuty. Możesz spróbować też z z komendą Run (wywołanie innego makra).

    0
  • Pomocny post
    #5 29 Gru 2009 13:57
    marcinj12
    Poziom 40  

    A Excel w ogóle poradzi sobie z rysowaniem wykresu / obliczaniem makra w tak krótkim okresie czasu? Masz 333 próbki na sekundę, ok. 20000 na minutę. Zrobiłem z ciekawości wykres na 20000 wartości i rysuje się ok. 0,1s bez wykonywania makra. Ja nie widzę żeby on mógł się odrysować w ciągu 0,003s.
    Ale jak chcesz spróbuj w arkuszu z danymi podpiąć makron na zdarzenie Change: wykona się po każdej zmianie w komórce, np.

    Code:
    Private Sub Worksheet_Change(ByVal Target As Range)
    
    If (Target.Address = "$B$1") Then
        ...
    End If
    End Sub

    Możesz np. zapisywać co 100 próbkę i robić z nich wykres, w wcześniejsze dane usuwać.

    0
  • Pomocny post
    #6 29 Gru 2009 17:39
    ekomont
    Poziom 16  

    No niestety szybkość będzie największym kłopotem...ale można zamiast rysować wykres od nowa tylko zmieniać zakres danych...

    Przerwania zegarowe w excelu występują...oto przykład:

    Private mNextTime As Double

    Sub OnTimer()
    mNextTime = Now + (TimeSerial(0, 0, 1))
    Application.OnTime mNextTime, "aktualizuj"
    End Sub

    Sub StopTimer()
    If mNextTime Then Application.OnTime mNextTime, "aktualizuj", Schedule:=False
    mNextTime = 0
    End Sub

    Sub aktualizuj()
    Arkusz1.QueryTables(1).Refresh
    OnTimer
    End Sub


    Sub Makro1()
    'ctrl+R uruchamia timer

    OnTimer

    End Sub




    ponadto można spokojnie zastosować wielowątkowość jak w każdym VB

    0
  • #7 29 Gru 2009 20:17
    mienks
    Poziom 2  

    Witam ponownie. W końcu doszedłem do pewnych rozwiązań i wykres jakoś się rysuje. Oprócz procedury Private Sub Worksheet_Change(ByVal Target As Range), by Excel reagował automatycznie na zmiany wartości, należało skorzystać z dodatkowej procedury Private Sub Worksheet_Calculate(). Podobny problem, jak się okazało, był już poruszony na forum https://www.elektroda.pl/rtvforum/topic1498568.html.. Postanowiłem też bardzo ograniczyć ilość rysowanych wartości. Dane zapisuje w kolejnych wierszach.Wygląda to w miarę ładnie, oczywiście teraz będę dopracowywał szczegóły, gdyby pojawiły się jeszcze jakieś problemy nie omieszkam o nich poinformować :D Dzięki za Waszą pomoc!

    0