- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 20

Thema: Daten aus LOG-File visualisieren

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    21.03.2013
    Beiträge
    87
    Mir ist klar, dass dies mit den C# eigenen "Bordmitteln" nur schlecht geht; habe mir mal Nevron und ZedGraph angesehen.
    Jetzt Suche ich aber auch noch jemanden, der die Aufgabe in Verbindung mit C# löst (gerne mit Origin, Nevron, ZedGraph,....)
    Dass dieses Add-On auch Geld kostet, ist mir klar
    Das ganze soll auf dem PC passieren.
    Geändert von indeas (10.08.2015 um 12:18 Uhr)

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    34
    Beiträge
    1.192
    Hallo,
    würde es etwas helfen, die Daten zunächst in ein anderes Format zu konvertieren (csv, xml ... ?), wo Datum und Messwerte in einem lesbaren Format drin stünden?
    Man könnte auch bestimmte Zeiträume auf mehrere Dateien aufteilen, z.B. pro Tag/Woche/Monat eine Datei, um beim Suchen nach einem Zeitraum schneller fündig zu werden.
    Grüße, Bernhard
    "Im Leben geht es nicht darum, gute Karten zu haben, sondern auch mit einem schlechten Blatt gut zu spielen." R.L. Stevenson

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.09.2011
    Ort
    Hessen
    Beiträge
    707
    Einer der Gründe für die Verlangsamung bei großen Datenmengen dürfte ineffizienter Umgang mit Strings sein. In .net sind Strings unveränderlich, wenn man das Zerlegen der Zeilen falsch macht, entstehen sehr viele Stringobjekte, die der Garbage Collector dann wieder aufräumen mus.

    Ob es hier Freiberufler gibt, die solche Aufträge annehmen, bezweifle ich etwas. Aber vielleicht schaut mal jemand vorbei. Wenn das jemand macht, der sein Geld damit verdient, wird das aber nicht ganz billig.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    21.03.2013
    Beiträge
    87
    Der Umgang mit Strings bremst mich gar nicht so sehr aus.
    Ich kann alle Integers aus jeder der 500.000 Zeilen innerhalb <1s auslesen.
    Ich kann auch die strings im Zeitstempel-Format erzeugen, auch das geht noch flott (<2s):
    timestring = (year + 2000).ToString("0000") + month.ToString("00") + day.ToString("00") + hour.ToString("00") + minute.ToString("00") + "00";
    Das ist nicht das zentrale Problem. Das wäre absolut OK.

    Wenn ich dann aber die Zeitstempel im DateTime-Format jeder Zeile erzeugen möchte, dann wird alles langsam:
    Egal ob so: TimeStamp = new DateTime(year, month, day, hour, minute, 0);
    Oder aus einem aus den einzelnen Variablen zusammengesetzen string den ich dann parse, es ist dann super-langsam.

    Würde gerne das DateTime Format nehmen, damit ich über eine TimeSpan nachher alles sauber selektieren kann.
    Zur Visualisierung kommen wir dann erst später...Die sollte dann alle Werte zwischen zwei Zeitstempeln liefern.

    Im Grunde genommen möchte ich das alles nicht unbedingt selber machen, sondern lieber jemand dafür bezahlen der so etwas kann und schon öfters gemacht hat.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Mcgrizzly123
    Registriert seit
    15.06.2012
    Beiträge
    142
    Du könntest auch dem Einlesen der Daten die Umwandung in TimeStamps in mehrer Threads auslagen.

    Einlesen -> (0-50.000 -> Thread 1 ) (50.000-100.000 -> Thread 2) ,...
    So könnten man bei 10 Threads die Zeit auf ein Zehntel reduzieren.
    | Mfg |
    | McGrizzly123 |

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    34
    Beiträge
    1.192
    Hallo,
    es geht auch anders rum:
    Den eingegebenen Zeitraum (Start, Ende) in dein ASCII-HEX Format umwandeln, in der Datei suchen (ggf. binäre Suche) und erst dann den gefundenen Teil umwandeln.
    Nicht erst alles umwandeln und dann suchen...
    Grüße, Bernhard
    "Im Leben geht es nicht darum, gute Karten zu haben, sondern auch mit einem schlechten Blatt gut zu spielen." R.L. Stevenson

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    21.03.2013
    Beiträge
    87
    Zunächst vielen Dank für die Denkanstöße, allerdings: Dieser Thread steht unter Jobs/Hilfen/Stellen.
    Hatte eigentlich jemanden gesucht, der das Thema gegen Bezahlung mal genauer ansehen oder bearbeiten kann.

    Nachdem das nicht so richtig zündete, habe ich selber weiter gebastelt und jezt doch noch eine praktikable Lösung gefunden, die ich jetzt (nur) noch verfeinern muss:
    Habe das kostenlose Tool ZedGraph eingesetzt:
    Bei Zed-Graph kann man Zeitstempel mit eigenem Format (XDate) definieren, das geht dann füllen sehr schnell:
    timestamp.SetDate(year, month, day, hour, minute, 0);
    Damit wären die Daten schon mal sehr schnell gelesen, die Performance der anschließenden Visualisierung (mit Zoom usw.) ist auch recht ordentlich.
    Geändert von indeas (11.08.2015 um 12:39 Uhr)

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    903
    Kannst Du mir sagen, wie lange die Ausführung des folgenden Quellcodes bei Dir dauert?

    Code:
    private void button1_Click(object sender, EventArgs e)
            {
                int Max = 500000;
                Random rnd = new Random();
                DateTime start = DateTime.Now;
                List<DateTime> dtList = new List<DateTime>(); 
                for (int i = 0; i < Max; i++)
                {
                    int year = 1999;
                    int month = 11;
                    int day = 22;
                    int hour = 11;
                    int minute = 12;
                    int second = 13 + rnd.Next(20);
                    ;
    
                    DateTime dt = new DateTime(year, month, day, hour, minute, second);
                    dtList.Add(dt);
                }
                System.Diagnostics.Debug.WriteLine(DateTime.Now.Subtract(start));
                System.Diagnostics.Debug.WriteLine(dtList.Count); 
    
            }
    Das Ergebnis siehst Du im "Direkt" oder "Immediate"-Fenster. (Menü Debug->Windows->Immediate). Bei meinem 5 Jahre alten Notebook (VS2010 mit .NET 4.0) dauert das 0,11 Sekunden.


    Bezüglich der Chart-Geschichte: Es hilft, die Daten für die Ansicht so aufzubereiten, dass nicht mehr Datenpunkte eingegeben werden, als maximal auf der Bildbreite sichtbar sind. Du musst also Daten gruppieren (über Minima, Maxima zusammenfassen). Ansonsten malt das ChartControl auch nur viele vertikale Linien übereinander.
    Geändert von Holomino (12.08.2015 um 09:08 Uhr)

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    21.03.2013
    Beiträge
    87
    Habe wieder etwas gelernt: mit dem Debug-Fenster hatte noch nciht gearbeitet; habe bisher immer ein "debug"-Text-Feld in der Anwendung beschrieben, dass ich für die Endanwender dann ausgeblendet habe...

    Der Code läuft sehr flott:
    00:00:00.0560000
    500000
    Ich habe dann auch mal Teile meines Codes in die Schleife gepackt:
    Code:
    start = DateTime.Now;
    string dummystring ="";
    for (Int32 Linenumbercounter = 10; Linenumbercounter < LogFileDataLineNumbers - 2; Linenumbercounter++)
    {
       dummystring = LogFileDataLine[Linenumbercounter];
       if (dummystring.Length == 36) // nur beschreibene Zeilen darstellen
       {
       try
          {
          LineNumber = Convert.ToInt32(dummystring.Substring(0, 7), 16);
    
          year = int.Parse(dummystring.Substring(8, 2), NumberStyles.HexNumber) + 2000;
          month = int.Parse(dummystring.Substring(10, 2), NumberStyles.HexNumber);
          day = int.Parse(dummystring.Substring(12, 2), NumberStyles.HexNumber);
          hour = int.Parse(dummystring.Substring(14, 2), NumberStyles.HexNumber);
          minute = int.Parse(dummystring.Substring(16, 2), NumberStyles.HexNumber);
          //DateTime dt = new DateTime(year, month, day, hour, minute, second);
          //dtList.Add(dt);
          }
          catch { }
        }
     }
    System.Diagnostics.Debug.WriteLine(DateTime.Now.Subtract(start));
    System.Diagnostics.Debug.WriteLine(LineNumber);
    Dann wird es schon etwas langsamer:
    00:00:00.6190000
    1572862
    Die ganze Sache wird so richtig langsam, wenn die auskommentierten unteren beiden Zeilen in die Schleife integriere, es dauert Stunden.....
    und da liegt auch das Problem, das ich durch Deinen Hinweis (Anzeige im Debug Ausgabe Fenster) gefunden habe
    Mein Log-File hat hin und wieder fehlerhafte Einträge (das war mir bekannt, aber ich hatte diesem Umstand keine so große Bedeutung beigemessen).
    Wenn ich noch eine kleine Plausibilitätsabfrage:
    Code:
    if (month > 0 && month < 13 && day > 0 && day < 32 && hour < 25 && minute < 61 && year > 2014 && year < 2100)
       {
       DateTime dt = new DateTime(year, month, day, hour, minute, second);
       dtList.Add(dt);
       }
    hinzufüge, dann sieht es wieder freundlich aus
    00:00:00.6930693
    1572862

    Übrigens mit ZedGraph bringe ich alle Daten (mit Grafik) in 1,6s auf dem Schirm. Das wäre absolut OK.
    Mit der Plausibilitätsabfrage sind es nur noch 1,4s das bringt dann neben Geschwindigkeit auch plausible Daten.
    Danke für die Hilfe!

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 29.04.2012, 00:08
  2. dependency file dep/***.o.d: No such file or directory
    Von SvLG im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 1
    Letzter Beitrag: 19.04.2010, 23:31
  3. RS232 Daten in Echtzeit visualisieren
    Von samm_2006 im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 6
    Letzter Beitrag: 19.09.2009, 22:08
  4. RS232 Daten Visualisieren
    Von Che Guevara im Forum Software, Algorithmen und KI
    Antworten: 3
    Letzter Beitrag: 12.05.2009, 04:51
  5. MATLAB Simulink-Stateflow: dll File aus mdl File erstellen
    Von danionbike im Forum Software, Algorithmen und KI
    Antworten: 0
    Letzter Beitrag: 11.01.2008, 17:24

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen