Графическая структура состава потока данных
Мне интересно встроить 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, который имеет довольно хороший фон в программировании рабочего процесса графическим способом, вы можете видеть:
См. шаблоны рабочих процессов, которые, на мой взгляд, являются действительно хорошей теоретической основой для подхода к графическому программированию.