Графическая структура состава потока данных

Мне интересно встроить MathWorks Simulink как инструмент типа в мое приложение. В этих встроенных инструментальных единицах выражаются в виде блоков с их входными и выходными портами и параметрами для каждого блока, используя файлы определения блока, написанные любым способом, который хочет инструмент. Я хочу, чтобы фреймворк был общим, и откуда-то читал определения блоков, а затем разрешал пользователю составлять поток данных по заданным блокам на основе их определения (желательно для этого нужен графический редактор). Затем я хочу, чтобы инструмент экспортировал пользовательский поток данных блоков, где я мог прагматично читать его на Java (или на других языках) и делать все, что мне нужно, с помощью создания исполняемой версии данного потока данных.

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

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

Ответ 1

Языки потока данных - особый случай (цветной) сети Петри. A цветная сеть Петри состоит из графика мест, каждый из которых содержит цветные маркеры, несущие значения (цвета - смешное имя для типа данных, значение это просто экземпляр цвета/типа данных). Токены из нескольких мест объединяются через переходы для создания жетонов в следующих местах; "переход" может сочетать "цвета" (например, значения вычисления). Таким образом, у одного может быть знак "цвет" для значений с плавающей запятой и переходы, состоящие из добавления, вычитания, умножения, деления; и вы можете легко моделировать арифметический поток данных (например, Simulink) с этим.

Что еще более важно, CPN удивительно общие. Они заполняются иерархическими CPN, которые дают эффект подпрограмм потока данных и позволяют использовать все виды расширений (например, ограниченные по времени и т.д.).

Цветные веб-сайты Petri Net предлагает полный набор инструментов для создания/редактирования/отображения и даже оценки произвольных цветных сетей Петри. (Возможно, вам даже не понадобится писать свою Java-программу для их оценки!). Он даже предлагает статический анализ таких графиков, таких как "завершает" и т.д., Которые вы обычно не получаете с языком потока данных Matlab или National Instruments.

Меня не удивило бы, если бы существовала Java-версия инструментов CPN; эта группа разрабатывает такие инструменты уже более десяти лет. Это также не удивило бы меня, если бы существовал способ сдерживать цвета и переходы к определенному набору, например, к определяемому вами langauge "потока данных".

Ответ 2

Мое предложение было бы Yakindu Statecharts Tool. Я не уверен, если бы это было слишком сложно. Но я думаю, это нужно упомянуть здесь. Вы можете определить правила и ошибки, когда они связаны, что не должно быть. Я думаю, что это тоже похоже на то, что делает Simulink, не так ли?

Ответ 3

Вы должны взять пик sneak на J. Paul Morrison DrawFBP. Мне не удалось нарисовать преимущество, но это, должно быть, моя ошибка.

Кроме того, лучший пользовательский интерфейс, который я видел, moonbase.com, если я когда-либо напишу (я буду), это будет аналогичный. Хорошая область предварительного просмотра, учебный режим, это красиво. Я не выяснил, доступен ли редактор или какая цель этого проекта.


Наконец, наш DF script язык (просто чтобы посмотреть, что мы должны скрыть с помощью редактора графов):
redbutton: Button  // we have a button
redbutton.press >> redlamp.on   // it turns the red lamp on
redbutton.press >> greenlamp.off  // and the green off
redbutton.presst >> redmsg.in  // also reports the action

greenbutton: Button  // opposite
greenbutton.press >> greenlamp.on
greenbutton.press >> redlamp.off
greenbutton.press >> greenmsg.in

redlamp: Lamp
greenlamp: Lamp

redmsg: Text
redmsg.value = "red"
redmsg.out >> console.in

greenmsg: Text
greenmsg.value = "green"
greenmsg.out >> console.in

console: Stdout

Как вы можете видеть, есть только 3 элемента языка:

  • поместите компонент (имя: тип)
  • установить значение свойства (compname.propname = значение)
  • определить сообщение (srccomp.srcport → dest.destport)

Конечно, графический редактор должен быть лучше. Теперь у нас есть только визуализатор.

generated DF graph

Ответ 4

Я также ищу инструмент, подобный этому, и наткнулся на JGraph, библиотеку разработчика, которая может быть использована для создания интерактивного графический/диаграммный инструмент рисования по своему усмотрению. Это не означает, что вам нужно выполнить всю тяжелую работу самостоятельно, поскольку хорошая отправная точка уже предоставлена ​​com.mxgraph.examples.swing.GraphEditor в примерах папок.

Снимок экрана этого демонстрационного редактора

enter image description here

При экспорте в файл mx Graph Editor (*.xme) на самом деле получается xml. Для примера выше:

<mxGraphModel>
    <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="4" parent="1" style="fontSize=24" value="Start"
            vertex="1">
            <mxGeometry as="geometry" height="120.0" width="160.0" x="80.0"
                y="250.0" />
        </mxCell>
        <mxCell id="5" parent="1" style="fontSize=24" value="???"
            vertex="1">
            <mxGeometry as="geometry" height="120.0" width="160.0" x="310.0"
                y="480.0" />
        </mxCell>
        <mxCell edge="1" id="6" parent="1" source="4" style="" target="5"
            value="">
            <mxGeometry as="geometry" relative="1">
                <mxPoint as="sourcePoint" x="290.0" y="310.0" />
                <mxPoint as="targetPoint" x="220.0" y="330.0" />
            </mxGeometry>
        </mxCell>
        <mxCell id="9" parent="1" style="fontSize=24" value="Profit"
            vertex="1">
            <mxGeometry as="geometry" height="120.0" width="160.0" x="570.0"
                y="710.0" />
        </mxCell>
        <mxCell edge="1" id="10" parent="1" source="5" style="" target="9"
            value="">
            <mxGeometry as="geometry" relative="1">
                <mxPoint as="sourcePoint" x="520.0" y="670.0" />
                <mxPoint as="targetPoint" x="490.0" y="840.0" />
            </mxGeometry>
        </mxCell>
    </root>
</mxGraphModel>

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

Однако, пожалуйста, примите мое предложение с солью, потому что я также ищу правильный путь.

Ответ 5

Я не уверен, что следующее точно соответствует вашим ожиданиям, но вы могли бы взглянуть на проект Eclipse eTrice - он имеет графический редактор и модель экспорта, выраженная на их родном языке. однако я не знаю, насколько зрелым этот проект на практике и что можно сделать в настоящее время с моделями на Java.

вы также можете просмотреть другие моделирующие проекты в Eclipse.

Ответ 6

Мне кажется, что ваши пользователи должны редактировать действия UML. Таким образом, вы можете использовать Eclipse Papyrus и Eclipse UML2 API, Вам нужно приложить более специфическую семантику к редактируемым действиям и ограничить пользователей тем, что они могут редактировать (например, вам не требуется параллельное выполнение через вилку активности и узлы объединения). Выполнение отредактированной модели, чем чтение в ходе операции и ее просмотр. Если вы введете node, вам просто нужно позвонить в свое определение node. Это звучит довольно легко.

В любом случае, я следую предложению @mantrid, чтобы посмотреть проект моделирования eclipse.

Ответ 7

Вы можете попробовать Cameleon: [http://www.shinoe.org/cameleon] [1] который, кажется, прост в использовании. Это графический язык для функционального программирования, который имеет подход к обработке данных (работы).

Его написано на С++, но может вызывать любые локальные или удаленные программы, написанные на любом языке программирования.

Он имеет многомасштабный подход и, похоже, завершен (это расширение сети Петри).

ножницы,

Ответ 8

Вы также должны попробовать YAWL, который имеет довольно хороший фон в программировании рабочего процесса графическим способом, вы можете видеть:

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