Software zum Zeichnen von Zeitdiagrammen aus einer Eingabedatei

Ich suche nach einer Software, um Zeitdiagramme aus einer einfachen Texteingabedatei zu zeichnen.

Beachten Sie, dass ich nicht nur irgendeine Art von Zeichenprogramm haben möchte, obwohl ich nichts dagegen habe, dass diese Funktionalität vorhanden ist. Ich werde ein Skript codieren, um eine Protokolldatei zu analysieren und die Eingabedatei für die Zeitdiagramm-App auszugeben.

Windows oder Linux, mit Quellcode wäre schön, am besten kostenlos.


[Update] Ich habe vergessen zu sagen, dass ich möchte, dass es von der Befehlszeile aus ausgeführt werden kann, was zum Glück bisher jede Antwort (außer meiner) war.

Gnuplot. Zu faul, um die Konfiguration zu posten.

Antworten (4)

Ziehzeit

Ich habe diese Software nicht verwendet, aber aus der Beschreibung und dem Tutorial auf ihrer Webseite geht hervor, dass sie zu Ihrer Beschreibung passt. Drawtiming ist ein Befehlszeilentool zum Zeichnen von Zeitdiagrammen. Es ist wie dotin GraphViz, aber nur für Zeitdiagramme

Merkmale

  • Kostenlos
  • Läuft unter Windows und Linux (Sie müssen die Quelle unter Linux selbst erstellen)
  • Open Source

Nachteile

  • Das letzte Update war 2009
  • Es ist noch beschriftetbeta

[Update, von OP] die Eingabe sieht so aus:

# initialize the signals
POWER=0, FIRE=0, ARMED=0, LED=OFF, COUNT=N.
# turn on the power
POWER=1 => LED=GREEN.
# fire once to arm
FIRE=1.
FIRE => ARMED=1.
FIRE=0.
# fire a second time
FIRE=1.
FIRE, ARMED => LED=RED;
FIRE => COUNT="N+1".

und die Ausgabe sieht so aus:Geben Sie hier die Bildbeschreibung ein


Wenn Sie bereits mit TikZ vertraut sind, gibt es ein Latex-Paket namens tikz-timing, dessen Autor ein aktiver Benutzer und Moderator auf TeX.SE ist. Sie werden also wahrscheinlich eine bessere Unterstützung finden als beim Drawtiming

Dies ist wahrscheinlich eine bessere generische Antwort, aber ich werde Steves akzeptieren, weil ich in Python schreiben wollte. Seine Antwort ist für mich spezifischer, während Ihre Antwort allgemeiner ist. Ich wünschte, ich könnte beide vergeben.
@Mawg Ganz verständlich. Ich bevorzuge auch Steves Antwort, da es oft einfacher ist, eine Sprache zu verwenden, die Sie bereits kennen, als eine neue Sprache für einen einzigen speziellen Zweck zu lernen

Ich würde vorschlagen, Python plus Matplotlib zu verwenden - zB:

#! /usr/bin/env python
#coding=utf-8
"""
    mpl_time.py Example of generating timing diagrams in matplotlib.
"""

import matplotlib.pyplot as plt
from datetime import datetime, timedelta
import random
# assuming your timing data in a csv file you could import csv and read the data

def GetData(samplelen=20):
    """ As I don't wish to spend the time generating a csv file I will dummy!"""
    data = {'t':[], 's1':[], 's2':[], 's3':[],}
    vals = {'s1':0, 's2':0, 's3':0,}
    t_current = 0.0  #datetime.now()
    t_increment = 0.01  #timedelta(0, 100)
    for step in xrange(samplelen*10):
        data['t'].append(t_current)
        if step % 9 == 0:
            for s in ['s1', 's2']:
                vals[s] = random.choice([0, 1])
        vals['s3'] = random.choice([0, 1])
        for s in ['s1', 's2', 's3']:
            data[s].append(vals[s])
        t_current = t_current + t_increment
    return data

def PlotData(data, timename='t'):
    """
    Expects a dictionary of named items with a list of states in all but the
    time axis named in it.
    """
    plotlist = sorted([k for k in data.keys() if k < timename])
    print plotlist
    timeax = data.get(timename)
    print timeax
    f, axes = plt.subplots(len(plotlist), sharex=True, sharey=True)
    for k, ax in zip(plotlist, axes):
        #assert isinstance(ax, plt.axes.subplot)
        ax.set_title(k)
        ax.plot(timeax, data[k])
        ax.set_ybound(1.2, -0.2)
        #ax.set_xbound(timeax[0], timeax[-1])

    # Fine-tune figure; make subplots close to each other and hide x ticks for
    # all but bottom plot.
    f.subplots_adjust(hspace=0)
    plt.setp([a.get_xticklabels() for a in f.axes[:-1]], visible=False)
    plt.show()

if __name__ == "__main__":
    DATA = GetData(50)
    print DATA
    PlotData(DATA)

Gibt: Geben Sie hier die Bildbeschreibung einEs gibt eine kleine Lernkurve, aber die Flexibilität ist sehr hoch.

  • Kostenlos/gratis
  • Open Source

PflanzeUML

Ab dem 01.02.2017 verfügt PlantUML über eine Zeitdiagrammfunktion . Die Funktion befindet sich noch in der Beta-Phase, ist aber sehr intuitiv und einfach zu erlernen.

Merkmale

  • Plattformübergreifend
  • Kostenlos und Open-Source
  • Eingabe ist eine Textdatei
  • Von der Kommandozeile ausführbar
  • Häufig aktualisiert

Ich habe auch WaveDrom gefunden , das sehr vielversprechend aussieht. Notieren Sie es hier nur für zukünftige Suchende.

Von http://wavedrom.com/editor.html

{signal: [
  {name: 'clk', wave: 'p.....|...'},
  {name: 'dat', wave: 'x.345x|=.x', data: ['head', 'body', 'tail', 'data']},
  {name: 'req', wave: '0.1..0|1.0'},
  {},
  {name: 'ack', wave: '1.....|01.'}
]}

Was das erzeugt. Der Export nach PNG und SVG ist verfügbar.

Beispielausgabebild

Übrigens sieht es so aus, als wäre es ein Frontend für Google Analytics, also für mich weniger interessant, aber für andere könnte es von Interesse sein.