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:
> 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.
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
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"
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