Geteilter Oszillograf

Eclipse-Plug-in Impulse: Analyse-Frontend für eingehende Daten

Tam Hanna

@shutterstock/Milagli

Hybridoszillografen sind eine bedrohte Lebensform. Die in den 90er Jahren gebauten Geräte sind vom Erfassungs-Frontend her zwar nach wie vor brauchbar, können ihren moderneren Kollegen in Sachen Analysefähigkeit aber nicht das Wasser reichen. Abhilfe schafft das Eclipse-Plug-in Impulse, das die IDE in ein Analyse-Frontend für eingehende Daten verwandelt.

Der erste Schritt zur Nutzung von Impulse ist das Laden aller bereitstehenden Erweiterungen. Als Eclipse-Version dient die im Rahmen des ADT ausgelieferte Variante von Juno. Öffnen Sie im nächsten Schritt eine neue Instanz der View IMPULSE | SIGNAL PORTS. Dieses am Projektexplorer angelehnte Fenster bietet die Möglichkeit zum Anlegen neuer Datenquellen, die sich auswerten lassen. Für erste Gehversuche wollen wir eine Instanz von EXTENSION EXAMPLES | EXAMPLE AD erstellen. Nach einem Doppelklick bietet Impulse an, eine neue Konfiguration zu erstellen: Stimmen Sie dem zu und weisen Sie den Assistenten zur Erstellung einer neuen „Empty Configuration“ an.

Viele Fenster

Impulse-Datenquellen bestehen aus mehreren Signalen: Nach dem Anlegen der Konfiguration zeigt das „Oszilloskopfenster“ nichts an, weil keine Signale eingepflegt wurden. Klicken Sie auf CONNECT und auf START STREAMING, um den Samplingprozess zu beginnen. Öffnen Sie danach eine neue View vom Typ IMPULSE | SIGNAL TABLE und ziehen Sie die acht dort befindlichen Einträge in den weißen Bereich links vom Diagramm (Abb. 1).

Abb. 1: Impulse stellt die Wellenformen am Bildschirm dar

Abb. 1: Impulse stellt die Wellenformen am Bildschirm dar

Besonders interessant wird das Plug-in durch die Möglichkeit, Signale zur Laufzeit nach Bedarf zu verketten und so neue Traces zu erzeugen. Ein klassischer Anwendungsfall dafür wäre die Berechnung elektrischer Leistung oder von Kosten, die durch die Multiplikation zweier Größen entstehen.

Klicken Sie dazu mit der rechten Maustaste in die Signalliste, und wählen Sie die Option INSERT | SCRIPT EXAMPLE TEMPLATES | COMBINE FLOAT EXAMPLES. Klicken Sie das neu erstellte Signal rechts an, und wählen Sie daraufhin VIEW/EDIT aus. Im Feld SAMPLES CONFIGURATION dürfen Sie die dem Signal zur Verfügung stehende Datenquellen auswählen. Im Feld PRIMARY SIGNAL (IN0) wird die erste Datenquelle festgelegt, ein Rechtsklick in das Additional-Feld erlaubt das Einpflegen weiterer Signale (Abb. 2).

Abb. 2: Signale erbeten!

Abb. 2: Signale erbeten!

Damit können wir uns dem Signalcode zuwenden, der so aussieht:

for (var iter<:SamplesIterator:>  =  new SamplesIterator(input);iter.hasNext();){
  var current<:Long:> = iter.next();
  out.write(current,false,in0.floatValue()*in1.floatValue());
}

Die einzelnen Eingabefelder werden in Form von Variablen der Bauart in0 bis inX angelegt, der Write-out erfolgt durch Aufruf von out.write. Weitere Informationen zum Signal-API finden sich online.

Eigene Daten importieren

Richtig interessant wird das Impulse-Plug-in durch die Möglichkeit, Daten aus beliebigen Applikationen einzusammeln und auszuwerten. Dazu stehen mehrere Signal-Emitter-Bibliotheken bereit, die auf neue Eigentümer warten.

toem bietet mit example.c ein C-Programm an, das eine Gruppe von Signalen in Richtung einer Datei emittiert (Listing 1).

int main( int argc, const char* argv[] )

{

  . . .

  int h1 = IpAddSignal("Integer/writeInt64",IpDiscrete,IpInteger,0,"ns");

  int h2 = IpAddSignal("Integer/writeInt32",IpDiscrete,IpInteger,0,"ns");

  . . .
  IpSetOutput(IpDefaultOutput);

  for (n=0;n<1000;n++){

    long long current = n * 10;

    IpWriteInt(h1,current,n==100,n-1000);

    . . .
  }

  IpCloseAllSignals(10000);

  . . .

}

IpAddSignal ist dabei für das Anlegen einer neuen Signalklasse zuständig: Im C-API ist sie in Form eines Integers realisiert. Dieser wird danach an die IpWrite-Funktionen übergeben, die für die Datenakquise zuständig ist. Neben dem Schreiben von Integers nimmt das API auch Floats, Events und sogar Strings entgegen – was auch immer zu loggen sei.

Um Lesern das Hantieren mit einem C-Compiler zu ersparen, bietet toem Lesern ein fertiges Archiv aus Logdatei und Konfigurationsdateien an. Erstellen Sie ein neues Projekt, und importieren Sie die Dateien config.walML, test.recML und test.trace. Sowohl test.trace als auch trace.recMl sind Ausgabedateien, während die per Doppelklick zu öffnende config.walML die Einstellungen für den Tracer enthalten.

Wählen Sie im linken Fenster das Element config aus, und klicken Sie auf Copy. Selektieren Sie sodann rechts die Rubrik Preferences, und klicken Sie auf Paste. Löschen Sie nun New Example AD durch Anklicken von Delete. Nach einem Doppelklick auf test.recML öffnet sich das Diagramm in der in Abbildung 3 gezeigten Oszillografenansicht.

Abb. 3: Impulse poliert die generierten Daten auf

Abb. 3: Impulse poliert die generierten Daten auf

Das Anklicken eines Punkts in der Chartfläche sorgt dafür, dass die im linken Fenster angezeigten Datenpunkte den zu diesem Zeitpunkt aktuellen Werten entsprechen. Für uns ist dabei das State-Signal besonders interessant, weil es die in numerischer Form vorliegenden Daten in ein „Zustandsfeld“ umwandelt. Klicken Sie es rechts an, um den folgenden Kerncode aus Listing 2 auf den Bildschirm zu bekommen.

var prev,txt;
for (var iter = new SamplesIterator(input);iter.hasNext();){
var current = iter.next();
f (!in0.isNone()) {
switch((in0.intValue()&gt;&gt;4)%6){
case 1: txt = "ON";break;
case 2: txt = "RAMP";break;
case 4: txt = "WAIT";break;
default: txt = null;
}
if (prev != txt){
out.writeString(current,false,txt);
. . .
prev = txt; }
}
}

Dieses Skript ist insofern interessant, als es „Sentienz“ aufweist. In agiert hier als Iterator, die Werte des vorhergehenden Durchlaufs werden in einem Zwischenspeicher abgelegt. Auf diese Art und Weise lässt sich eine Art Zustandsautomat erzeugen, der die generierten Daten vorhält.

Weitere Datenquellen

Impulse beschränkt sich nicht auf die Analyse von Logdateien und/oder von einem Generator erzeugten Datenfeldern. Die Integration in SIGROK erlaubt die Interaktion mit Logic Analyzern. Dabei unterstützt das Open-Source-Projekt eine Vielzahl verschiedener Geräte.

Ein weiterer Klassiker ist das Auswerten von Logdateien, die im Idealfall per log4j generiert werden. Der Pattern Logger beschafft diese Daten aus Pipes, einem Socket oder direkt als Output eines laufenden Prozesses.

Flexible Lizenzierung

Für private Nutzer ist Impulse in der Basisversion kostenfrei. Kommerzielle Nutzer können Impulse bis zu 90 Tage testen. toem bietet das Plug-in für kleinere Teams auf Anfrage kostenfrei an, bei größeren Nutzergemeinden nennt das Unternehmen keine Preise.

Fazit

Impulse ist kein Produkt, das man wie einen Logikanalysator auspackt und sofort einsetzen kann: Wer das Erfassungssystem voll auslasten möchte, muss einige Zeit mit Konfiguration und Anpassung verbringen. Der Lohn der Mühen ist eine extrem leistungsfähige Mess- und Visualisierungssoftware zu einem niedrigen Preis.

Aufmacherbild: Screen digital oscilloscope von Shutterstock / Urheberrecht: Milagli

Verwandte Themen:

Geschrieben von
Tam Hanna
Tam Hanna
Tam Hanna befasst sich seit der Zeit des Palm IIIc mit der Programmierung und Anwendung von Handcomputern. Er entwickelt Programme für diverse Plattformen, betreibt Onlinenewsdienste zum Thema und steht unter tamhan@tamoggemon.com für Fragen, Trainings und Vorträge gern zur Verfügung.
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: