Hallo, ich will digitale Sample-Daten am PC anzeigen und bin bei der Suche nach einer Möglichkeit auf den Logger von Salea gestoßen. Wer deren GUI nicht kennt kann sich die hier mal anschauen: http://www.saleae.com/logic/features/ Das Ganze ist sehr intuitiv zu bedienen und hat bei Mouse-Over ein paar nette Gimmicks wie z.B. die Anzeige der Periodendauer zwischen zwei Werten. Ich frage mich, wie man soetwas am besten macht? Ist das Vektorgrafik? Wie kann ich am einfachsten (ausgehend von der Mausposition) auf die beiden benachbarten Signalflanken schließen und daraus dann die Periodendauer berechnen? Außerdem werden teilweise Grafiken (Pfeile von einer Taktflanke zur anderen) eingeblendet, wenn sich die Maus in der Nähe befindet. Wie macht man solche Overlays? Einfach alles in ein Fenster zu zeichnen wäre ja eher weniger sinnvoll. Gruß Gert
Gert schrieb: > Ich frage mich, wie man soetwas am besten macht? Ist das Vektorgrafik? > Wie kann ich am einfachsten (ausgehend von der Mausposition) auf die > beiden benachbarten Signalflanken schließen und daraus dann die > Periodendauer berechnen? Schon daran gedacht dass zu dem Zweck die Rohdaten ausgewertet werden und nicht die Screens? Jede Mausposition innerhalb der angezeigten Daten hat eine korrespondierene Stelle im Rohdatensatz.
Ich glaube eigentlich auch das man die Daten auswerten muß - was sonst. Und meine Frage lautet, wie man sowas am besten macht? Immerhin sind das Megabytes, die in Millisekunden verarbeitet werden wollen. Wenn ich da kein vernünftiges Rohdatenformat habe, dann wird das nix mit der Bildschirmausgabe.
Gert schrieb: > Immerhin sind das > Megabytes, die in Millisekunden verarbeitet werden wollen. Glaubst du dass das ein Problem ist fuer moderne PCs? Wenn alles im Arbeitsspeicher liegt.. Fuer so was braucht man schon ein ganzes Team aus erfahrenen Programmieren. Gruendsaetzlich funktioniert so etwas mit events: http://en.wikipedia.org/wiki/Event_%28computing%29
@Frank: Ein ganzes Team aus erfahrenen Programmierern habe ich nicht zur Verfügung, weshalb ich gehofft hatte hier ein paar Tipps zu erhalten. Ich glaube auch nicht, dass man da soviele Leute braucht. Es muss nur ein gut durchdachtes Konzept her. @Sven: Danke für den Hinweis. Fragt sich nur, wo ich da anfangen soll:
1 | The codebase is currently at about 160,000 lines of code |
> Ich frage mich, wie man soetwas am besten macht? Ist das Vektorgrafik?
Hmm, was ist denn dein Kenntnisstand zum Programmieren ?
Bisher nur WebSeiten entworfen ?
Es gibt dutzende Implementierungvarianten für diese Dinge,
jede Bedienoberfläche macht so was, schon Windows wenn du
Buttons überstreichst. Man kann Daten vorbereiten (wenn
Maus in diesen Bereich kommt, dann mache diese Aktion),
muß dann halt die Daten wieder löschen wenn sich die
zugrundegelegten Infomrationen ändern.
Was ich an den Screenshots von Salea sehe, ist nichts
Besonderes und scheint mir weder besonders elegant noch
besonders innovativ zu sein, allerdings sie die Daten
(Inputs) des ScreenShot-Beispiels so regelmässig daß ich
nicht auf eine reale Messung sondern simulierte Daten
tippen würde.
Was man auf den Screens nicht sieht ist, dass man das ganze
1 | - in Echtzeit scrollen kann |
2 | - das je nach Auflösung (Zoomen ist möglich) bis zu ca. 250000 Messwerte pro Bildpunkt verarbeitet werden müssen |
Das sind eben gewisse Anforderungen die es zu berücksichtigen gilt. @MaWin: Es kann sein, dass die Messwerte simulierte sind. Aber real sehen die auch nicht anders aus :). Mein Kenntnisstand ist C++ und ich habe vor das mit wxWidgets zu machen. Bzgl. Grafik-Ausgabe habe ich noch garnichts gemacht.
> in Echtzeit scrollen kann
Ist doch gelogen.
Ein 1MHz Signal von dem ca. 1us dargestellt wird,
müsste 1 Mio mal pro Sekunde neu gezeichnet werden,
aber der Bildschirm hat nur eien Refreshrate von sagen
wir 60Hz.
Wie machen die das also ?
Einfach: Durch lügen.
Sicher kann man Bilder jede 1/60 Sekunde aufbauen,
so daß es DIR wie Echtezeit aussieht.
Die meisten Computerspiele machen das - mit weit
komplexeren Darstellungen.
Man kann auch 1 Mio Samples pro Sekunde mischen,
aber 250000 pro Bilpunkt pro Refreshrate ? Nein,
kein Pentium.
Mit Vorverarbeitung und Ringpuffern kann man das
auf logarithmische Mengen drücken, also log_2(n),
aber ob die das verwenden weiß ich nicht, ich hab
es damals gemacht um Samplewertkurven darzustellen.
Ein Tooltip in Echtzeit ist auch eher Unsinnig,
oder kannst du ihn in 1/60 Sekunde lesen ?
Solche Daten sind also sicher viel langsamer
aufbereitet.
Gert schrieb: > Ich glaube eigentlich auch das man die Daten auswerten muß - was sonst. > Und meine Frage lautet, wie man sowas am besten macht? Immerhin sind das > Megabytes, die in Millisekunden verarbeitet werden wollen. Und? Du weißt doch, welcher Teil von deinen Megabytes gerade am Schirm zu sehen ist. Also kann eine Mausposition schon nur noch in dem Teil der Daten liegen, die am linken Fensterrand anfangen und am rechten Fensterrand aufhören. Und schon sind das keine Megabytes mehr, die durchsucht werden müssen.
Gert schrieb: > @Sven: Danke für den Hinweis. Fragt sich nur, wo ich da anfangen soll: Indem du akzeptierst, dass du eine Lernkurve haben wirst und mindestens 2 bis 3 Ansätze brauchst, bis du eine Struktur beisammen hast, die tragfähig ist. In der Computergraphik sind vielleicht 10 bis 15% dem Teil gewidmet, der tatsächlich am Bildschirm malt. Der Rest ist Mathe bzw. Datenstrukturen.
MaWin schrieb: > allerdings sie die Daten > (Inputs) des ScreenShot-Beispiels so regelmässig daß ich > nicht auf eine reale Messung sondern simulierte Daten > tippen würde. Das ist kein Scope. Scharf machen (Start klicken), auf Trigger warten, einlesen und dann anzeigen. Da kann man so schnell messen, wie man den Start Button drücken kann. Da er ins RAM vom PC speichert, hat er aber einen ziemlich tiefen Buffer. Und ob der Buffer mit echten oder simulierten Daten voll ist, ist egal. MfG Klaus
>Man kann auch 1 Mio Samples pro Sekunde mischen, >aber 250000 pro Bilpunkt pro Refreshrate ? Nein, >kein Pentium. Was die 250.000 Samples betrifft kann man das so lösen, dass man einfach jedes 1000. prüft. Vermutlich ist bei so einer Konzentration an Meßwerten sowieso der ganze Bildschirm schwarz. >Und schon sind das keine Megabytes mehr, die durchsucht werden müssen. Warum sollen das dann keine Megabytes mehr sein? Wenn ich mir einen Bereich von 1 Sekunde anzeigen lasse und mit 1 MHz abgetastet habe, dann sind das bei 8 Kanälen 1 MBytes. >Indem du akzeptierst, dass du eine Lernkurve haben wirst und mindestens >2 bis 3 Ansätze brauchst, bis du eine Struktur beisammen hast, die >tragfähig ist. Eigentlich ist es eher so, dass der Vorschlag von Sven ein wenig an meinem Bedarf vorbei geht. Es ist zwar eine tolle GUI, aber bei mir handelt es sich um eine andere Anwendung. >In der Computergraphik sind vielleicht 10 bis 15% dem Teil gewidmet, der >tatsächlich am Bildschirm malt. Der Rest ist Mathe bzw. Datenstrukturen. Genau das wollte ich eigentlich auch schon in meinem ersten Post zum Ausdruck bringen! Das ist nur Mathe und Datenstruktur! Aber leider habe ich keine Ahnung wie man solche Daten am besten organisiert und welche Algorithmen man dann drüber jagt. >Eine Interesannte Libary dazu: >http://prefuse.org/doc/faq/ Danke hierfür, aber ich will das selber programmieren und nichts fertiges nehmen. Da weiss ich dann wenigstens was ich mache.
Gert schrieb: > Was die 250.000 Samples betrifft kann man das so lösen, dass man einfach > jedes 1000. prüft. Vermutlich ist bei so einer Konzentration an > Meßwerten sowieso der ganze Bildschirm schwarz. Die Anzeige ist immer auf ein Sample genau, egal wieviele Samples aufgezeichnet wurden. Angezeigt werden zwei Werte: einmal zur Flanke vor der aktuellen, einmal zu der danach. MfG Klaus
Gert schrieb: >>Und schon sind das keine Megabytes mehr, die durchsucht werden müssen. > Warum sollen das dann keine Megabytes mehr sein? Wenn ich mir einen > Bereich von 1 Sekunde anzeigen lasse und mit 1 MHz abgetastet habe, dann > sind das bei 8 Kanälen 1 MBytes. Aber du wirst dir nicht alle Samples in einem Bildschirmbild anzeigen lassen. Denn dann siehst du genau nichts mehr. Und wenn du doch die komplette Sekunde anzeigen lassen willst, dann hast du nicht alle 1 Million Samples am Bildschirm sondern nur eine Auswahl davon, weil du eben nicht 1 Million Bildpunkte in einer Zeile hast, sondern nur 1280 (oder einer Zahl in dieser Größenordnung) > Aber leider habe ich keine Ahnung wie man solche Daten am besten > organisiert und welche Algorithmen man dann drüber jagt. Wie schon gesagt: Denk dir was aus. Schau ob es funktioniert, stell fest wo die Schwachstellen sind, denk dir was besseres aus, das die Schwachstellen vermeidet. Wenn deine Graphik-Lib schon eine Window-Viewport Transformation mitbringt, dann fang vielleicht erst mal damit an, da zu ergründen, wie das funktioniert und wie man die einsetzen kann um 'Koordinaten' aus einem Weltbereich in einen Anzeigebereich und umgekehrt umzurechnen. Probier damit, ergründe wie man das zum Zoomen/Panen benutzt. Aber denke nicht, dass du als Graphikneuling auf Anhieb die beste aller Anwendungen schreiben kannst. Denn das kannst du nicht. Da gehört Erfahrung dazu und die kann dir keiner beibringen. Das kannst du nur selber.
@Gert bischen blauäugig, gelle? "ein ganzes Team von Leuten" - hab ich nicht "160.000 LOC" - villeicht geht das ja auch mit weniger "fertige Grafik-Bibliotheken" - will ich nicht "Datenstrukturen" - kenn ich nicht hm, glaubst du, die Software-Hersteller sind Sozialunternehmen, welche sich 50 Leute von der Straße abgegriffen haben, damit diese nicht mehr im Park abgammeln müssen? und 49 von denen sitzen jetzt im Büro und spielen WoW oder sonstiges, und und in Wirklichkeit hat nur irgendein Freak als 50. Mitarbeiter die ganze Software mit ein paar Shareware-Tools zusammen geklickt? Und den willst du jetzt toppen? Na denn mal viel Erfolg!
> Wenn ich mir einen Bereich von 1 Sekunde anzeigen lasse und > mit 1 MHz abgetastet habe, dann sind das bei 8 Kanälen 1 MBytes. Schon, aber angezeigt auf z.B. 256 Bildpunktspalten muß man von diesem 1MByte nur jeden 3096ten Samplewert angucken und auf den Bildschirm kopieren. Da das Aliasingeffekte ergeben kann, sollte man vorher die Daten mitteln, je 2, je 4, je 8, je 16, je 32, je 64 etc. zusammenfassen und Mittelwert bilden. dann bei der Anzeige auf Mittelwert oder gar senkrechte Linie von Minimum zu Maximumwert. Es gibt vielee Möglichkeiten, keine Ahnung was das Gerät tut.
Hallo zusammen, ich habe ein Saleae Logic 16 beschafft, um Maschinendaten aufzuzeichnen. Ich bin sehr zufrieden mit dem Tool suche jedoch eine Möglichkeit die Daten in einfacherer Art und Weise an mein Analysetool zu übergeben. Die Logic Software bietet die Möglichkeit eines csv-Exports, ebenso wie die Möglichkeit des Exports eines binärformats. Beides ist trivial zu lesen. Ich habe ein bisschen recherchiert und herausgefunden, dass das .sal-File (das ist das Format im dem die Logic-2 Session gespeichert werden kann) eigentlich ein zip-File ist. Darin liegen die die digital und analog-kanäle in binär-form vor, sowie ein json-file. Ich musste leider feststellen, dass dieses Binär-format sich von dem gut dokumentierten Format von der Export-funktion unterscheidet (...und es leider keine Doku darber gibt). Wie auch immer habe ich ein bisschen reverse-engineered und daher das analog-format geknackt, ist ziemlich simpel sequentiell aufgebaut (ich kann gerne den Aufbau teilen, falls erwünscht), das digital-format ist aber deutlich schwieriger. Und nun kommen wir zu dem Grund, weshalb ich das hier (in diesem Thread) poste, ich habe die Vermutung, dass die Daten hier nicht sequentiell vorliegen, sondern in einer Art und Weise, dass man gleichzeitig kleine und große Abschnitte abrufen kann. Ich würde gerne auch das digitale Format knacken, bräuchte hier aber vielleicht ein paar Ideen... kennt jemand Algorithmen, um Daten in solche einer Form zu hinterlegen, gibt ein "brute-force-methoden", um den Code zu kacken? Ich weiß ja jeweils, was rauskommen müsste Vielleicht hat ja jemand eine Idee
:
Bearbeitet durch User
Es gibt eine Doku für eigene Extensions (in MS VS C++) oder wimre neuere Analyse Erweiterungen in Python.
Ist alles für das exportierte bin-file Es gibt ebenso APIs aber die funktionieren nur mit Logic 1 nicht mit Logic 2 Georg
Georg T. schrieb: > dass die Daten hier nicht sequentiell vorliegen, > sondern in einer Art und Weise, dass man gleichzeitig kleine und große > Abschnitte abrufen kann. Was? Wozu? Was meinst du mit gleichzeitig? Wenn die Daten sequenziell sind geht das am schnellsten. Anfang, Länge (oder Ende), zugreifen und fertig. Irgendwie hast du dich da in was verrannt. Dazu kommt dass dein Mangel an Grundlagenwissen es schwer macht mit dir zu kommunizieren. Irgendwas passt dir (vermutlich eingebildeterweise) nicht, aber du schaffst es nicht zu kommunizieren was das ist. Ich kann mir schon vorstellen das Salea ein Encoding verwendet, um zum Beispiele schonend mit der Bandbreite des USB-Bus umzugehen. Vielleiche RLE. Ich kann mir auch vorstellen dass da noch Metadaten zwischen Datenabschnitten drin sind. An so etwas wie einen Quadtree oder BSP-Tree glaube ich weniger, obwohl das Techniken für Datenpartionierung sind. Der Aufwand ist zu hoch. > Ich würde gerne auch das digitale Format knacken, bräuchte hier aber > vielleicht ein paar Ideen... Es gibt kein Kochrezept das Erfolg garantiert. Man muss Annahmen machen (Hypothesen aufstellen) was es wie sein könnte und die Annahmen nacheinander überprüfen. Zum Machen der Annahmen und Überprüfen hilft es entsprechendes Wissen zu haben. Was hat man schon woanders gesehen? Wie würde man es selber machen? Wenn man gut drauf ist disassembliert (decompiliert, reverse-engineered) man die Software. Vorausgesetzt natürlich das ist legal.
Hallo LUMSCH, Hallo an weitere das was mir (um es in deinen Worten zu sagen) nicht passt, ist, dass ich die Saleae software nicht benutzen möchte, um die Daten einzeln zu exportieren, ich möchte auf die .sal datei direkt zugreifen. Diese ist aber leider nicht dokumentiert, daher versuche ich herauszukriegen, was drin steht. Ich bin urprünglich davon ausgegangen, dass die Daten sequentiell vorliegen, das scheint nicht der fall zu sein (habe ich getestet, habe einen Datensatz mit einem simplen "nur-null" signal erzeugt und einen mit zwei Durchgängen. Hier das "nur-null signal"
1 | 3C 53 41 4C 45 41 45 3E 01 00 00 00 64 00 00 00 01 00 00 00 00 84 D7 57 41 46 9C FA 90 7E 01 00 00 10 E9 B7 AF 03 E7 D8 3F 01 F0 1B 00 00 00 00 00 00 01 C2 24 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 04 00 00 00 00 00 10 5E 5F 00 00 00 00 00 01 00 00 00 00 00 00 00 2C 00 00 00 00 00 00 00 40 D5 53 41 9C 4F 41 9A 1C 40 D3 65 52 2E 41 8D 55 4C 07 41 FF 6B 41 98 01 41 B3 6D 40 F6 52 61 16 67 24 41 E8 5B 41 FA 3E 41 85 45 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |
Hier was mit zwei durchgängen"
1 | 3C 53 41 4C 45 41 45 3E 01 00 00 00 64 00 00 00 01 00 00 00 00 84 D7 57 41 46 9C FA 90 7E 01 00 00 10 E9 B7 AF 03 E7 D8 3F 01 2B 17 00 00 00 00 00 00 01 3E A4 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 04 00 00 00 00 00 10 5E 5F 00 00 00 00 00 01 00 00 00 00 00 00 00 2C 00 00 00 00 00 00 00 40 D5 53 41 9C 4F 41 9A 1C 40 D3 65 52 2E 41 8D 55 4C 07 41 FF 6B 41 98 01 41 B3 6D 40 F6 52 61 16 67 24 41 E8 5B 41 FA 3E 41 85 45 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |
es gibt nur Anderungen an zwei stellen (jeweils 16bit, in der 2ten und 3ten Zeile). In dem Export-format werden nur die Zeiten mit den Wechselstellen gespeichert (in 64bit Gleitkomma), das scheint hier eindeutig nicht der fall zu sein. Man erkennt im unteren block ein 24bit Struktur. Bei größeren Dateien scheinen kommen mehrere dieser unteren Blöcke nacheinandner. Die erste Zeile ist vermutlich ein Header mit einer Version und einem Dateitypen (unterscheidung analog/digital) Die 10 5E EF (vor dem Block unten) entspricht der Samplingfrequenz, und di e 2C (vor dem Block) entspricht der Anzahl der Bytes im Block. Ich könnte mir gut vorstellen, dass die Daten als eine Art Minimal-Dichte für unterschiedliche Zeitabschnitte abgespeichert werden (Wenn ich einen Zeitraum von 0-1s darstelle, wird eine 100MHz Clock nur noch ein Kasten dargestelllt (Da benötige ich nur das Zeitfenster und eine Dichteinformation Falls es sich um eine Dichte handelt, werden die Daten vermutlich in einer Art Binärbaum vorliegen (je niedriger man geht, umso mehr details bekommt man), Ich kann leider die obere Datenstruktur nicht knacken, vielleicht hat jemand sowas schonmal gesehen? Danke Georg
Kann man den Analyzer nicht mit sigrok betreiben statt der Salea-SW? sigrok ist notfalls open source, aber kann schon von sich aus etliche Formate (raw binary, wav, sogar ASCII-art). Damit kommt man vielleicht einfacher an die Werte ran. Auflisten der möglichen Formate: sigrok-cli -L
Ich würde vermuten, dass die Daten nicht nur sequentiell, sondern auch aggregiert vorliegen. Das macht man so, wenn umfassende Analysen/Darstellungen der Daten gewollt sind aber die Datenbasis sehr groß ist. merciless
wie würde man sowas machen? In welcher Form würde man aggregieren? Wie kann ich mir das vorstellen? etwa eine Art Histrogrammierung... das wäre dann vermutlich sowas wie eine Dichte Georg
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.