Программное обеспечение для построения временных диаграмм из входного файла

Я ищу какое-нибудь программное обеспечение для рисования временных диаграмм из входного файла простого текста.

Обратите внимание, что мне нужна не только какая-то программа для рисования, хотя я не возражаю против наличия такой функциональности. Я буду кодировать скрипт для анализа файла журнала и вывода входного файла для приложения временной диаграммы.

Windows или Linux, желательно с исходным кодом, желательно бесплатно.


[Обновление] Я забыл сказать, я хочу, чтобы его можно было запускать из командной строки, что, к счастью, было в каждом ответе до сих пор (кроме моего).

Гнуплот. Конфиг лень выкладывать.

Ответы (4)

Отрисовка

Я не использовал это программное обеспечение, но, судя по описанию и учебнику на их веб-странице, похоже, что оно соответствует вашему описанию. Drawtiming — это инструмент командной строки для построения временных диаграмм. Это как dotв GraphViz, но только для временных диаграмм

Функции

Недостатки

  • Последнее обновление было в 2009 году
  • Он до сих пор маркируетсяbeta

[Обновление, из OP] ввод выглядит так:

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

и вывод выглядит так:введите описание изображения здесь


Если вы уже знакомы с TikZ, есть пакет Latex под названием tikz-timing , автор которого является активным пользователем и модератором TeX.SE. Таким образом, вы, вероятно, найдете лучшую поддержку, чем с отрисовкой.

Это, вероятно, лучший общий ответ, но я соглашусь со Стивом, потому что я хотел написать сценарий на Python. Его ответ более конкретен для меня, а ваш - более общий. Я хотел бы, чтобы я мог наградить обоих.
@Mawg Вполне понятно. Я также предпочитаю ответ Стива, поскольку часто проще использовать язык, который вы уже знаете, чем выучить новый для одной специальной цели.

Я бы предложил использовать python плюс matplotlib, например:

#! /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)

Дает: введите описание изображения здесьесть немного кривой обучения, но гибкость очень высока.

  • Бесплатно/бесплатно
  • Открытый источник

ЗаводUML

По состоянию на 01 февраля 2017 года в PlantUML есть функция временной диаграммы . Эта функция все еще находится в стадии бета-тестирования, но очень интуитивно понятна и проста в использовании.

Функции

  • Кроссплатформенность
  • Бесплатный и с открытым исходным кодом
  • Вход - текстовый файл
  • Запускается из командной строки
  • Часто обновляется

Я также нашел WaveDrom , который выглядит очень многообещающе. Просто отметив это здесь для будущих искателей.

С 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.'}
]}

Что порождает это. Доступен экспорт в PNG и SVG.

Пример выходного изображения

Кстати, похоже, что это интерфейс для аналитики Google, поэтому мне это неинтересно, но может быть интересно другим.