Forum: PC-Programmierung Salea GUI - wie machen die das?


von Gert (Gast)


Lesenswert?

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

von Loonix (Gast)


Lesenswert?

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.

von Gert (Gast)


Lesenswert?

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.

von Frank M. (aktenasche)


Lesenswert?

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

von Sven P. (Gast)


Lesenswert?

Frag doch mal die Leute bei Ardour, die bauen auch was in der Art:
http://ardour.org/

von Gert (Gast)


Lesenswert?

@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

von MaWin (Gast)


Lesenswert?

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

von Gert (Gast)


Lesenswert?

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.

von MaWin (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Eine Interesannte Libary dazu:
http://prefuse.org/doc/faq/

hab ich aber selbst noch nicht genutzt.

von Klaus (Gast)


Lesenswert?

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

von Gert (Gast)


Lesenswert?

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

von Klaus (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

@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!

von MaWin (Gast)


Lesenswert?

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

von Georg T. (microschorsch)


Lesenswert?

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
von Johannes S. (Gast)


Lesenswert?

Es gibt eine Doku für eigene Extensions (in MS VS C++) oder wimre 
neuere Analyse Erweiterungen in Python.

von Georg T. (microschorsch)


Lesenswert?

Ist alles für das exportierte bin-file

Es gibt ebenso APIs aber die funktionieren nur mit Logic 1 nicht mit 
Logic 2

Georg

von LUMSCH (Gast)


Lesenswert?

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.

von Georg T. (microschorsch)


Lesenswert?

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

von Klaus W. (mfgkw)


Lesenswert?

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

von Dirk K. (merciless)


Lesenswert?

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

von Georg T. (microschorsch)


Lesenswert?

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
Noch kein Account? Hier anmelden.