图形数据流组合框架
Posted
技术标签:
【中文标题】图形数据流组合框架【英文标题】:Graphical dataflow composition framework [closed] 【发布时间】:2013-01-14 19:15:37 【问题描述】:我有兴趣将MathWorks Simulink 类似类型的工具嵌入到我的应用程序中。在这个嵌入式工具单元中,使用我的块定义文件以工具想要的任何方式编写的块定义文件,将其表示为块及其输入和输出端口以及每个块的参数。我希望框架是通用的并从某个地方读取块定义,然后允许用户根据它们的定义组成给定块的数据流(最好带有图形编辑器)。然后,我希望该工具导出用户组成的块数据流,我可以在其中以 Java(或其他语言)实用地读取它,并使用它做任何我需要做的事情,比如构建给定数据流的可执行版本。
我提前知道,导出的块组合可以足够智能以执行,但我可以导出块组合/拓扑以及相互连接的输入和输出。换句话说,我不是在寻找数据流编程语言。我正在寻找允许数据流图形组合的工具集,然后将组合导出为 json 或我可以在编程语言中加载并用它做任何事情的东西。
上面的框架/工具是 Simulink 对来自其不同库的块所做的,但我需要将这样的东西嵌入到我自己的工具中,并且想知道哪个开源项目与我想要做的很接近。我想我想要的是一个数据流组合框架。请纠正我对此的看法。
【问题讨论】:
我认为,已知的宇宙中不存在标准的数据流语言,因此没有编辑器。我和我的一个朋友创建了一个 prototype DF 系统,我们正在使用一种简单的 DF 脚本标记语言,我们可以使用一个小型 php 应用程序来显示它,该应用程序将我们的 DF 脚本转换为 GraphViz 脚本。 【参考方案1】:数据流语言是(彩色)Petri nets 的特例。 colored Petri net 由位置图组成,每个位置都包含带有值的彩色标记(颜色是“数据类型”的一个有趣名称,值只是颜色/数据类型实例)。来自多个地方的令牌通过转换组合以在以下地方生成令牌; “过渡”可以结合“颜色”(例如,计算值)。所以,一个人可能有一个用于浮点值的标记“颜色”,以及由加、减、乘、除组成的转换;并且您可以使用它轻松地对算术数据流(例如 Simulink)进行建模。
更重要的是,CPN 非常通用。它们由分层 CPN 填充,产生数据流子程序的效果,并允许各种扩展(例如时间约束等)。
Colored Petri Net Tools 网站提供了一套完整的工具,用于构建/编辑/显示甚至评估任意有色 Petri 网。 (您甚至可能不需要编写 Java 程序来评估它们!)。它甚至提供对此类图形的静态分析,例如“终止”等,这些是您通常无法通过 Matlab 或 National Instruments 风格的数据流语言获得的。
如果有基于 Java 的 CPN 工具版本,我不会感到惊讶;该小组十多年来一直在构建此类工具。如果有一种方法可以将颜色和过渡限制为特定的集合,例如,相对容易地定义为您定义的“数据流”语言,我也不会感到惊讶。
【讨论】:
【参考方案2】:我的建议是Yakindu Statecharts Tool。我不确定这是否太复杂。但我认为应该在这里提到它。您可以定义规则并显示错误,当连接不应该的事物时。我觉得它看起来也有点像 Simulink 所做的,不是吗?
【讨论】:
【参考方案3】:您应该先了解一下 J. Paul Morrison 的 DrawFBP。我无法与它划清界限,但这一定是我的错。
另外,我见过的最好的用户界面是moonbase.com,如果我写过一个(我会的),它会是相似的。不错的预览区,教程模式,很漂亮。我还没有弄清楚,编辑器是否可用或者这个项目的目的是什么。
最后,我们的 DF 脚本语言(只是看看,我们应该用图形编辑器隐藏什么):
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 = value) 定义消息(srccomp.srcport >> dest.destport)当然,图形编辑器应该更好。我们现在只有可视化器。
【讨论】:
【参考方案4】:我也在寻找这样的工具,偶然发现了JGraph,这是一个开发人员库,可用于自行构建交互式图形/图表绘图工具。这并不意味着您必须自己完成所有艰苦的工作,因为 com.mxgraph.examples.swing.GraphEditor 在文件夹 examples。
演示编辑器的屏幕截图
当导出到所谓的 mx 图形编辑器文件 (*.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" x="80.0"
y="250.0" />
</mxCell>
<mxCell id="5" parent="1" style="fontSize=24" value="???"
vertex="1">
<mxGeometry as="geometry" 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" 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 project - 它有一个图形编辑器和以他们自己的语言表达的导出模型。但是我不知道这个项目在实践中有多成熟,以及目前使用 Java 模型可以做什么。
您还可以查看其他modelling projects at Eclipse。
【讨论】:
【参考方案6】:在我看来,您的用户应该编辑 UML 活动。所以你可以建立在Eclipse Papyrus 和Eclipse UML2 API 的基础上。您需要为正在编辑的活动附加更具体的语义,并限制用户可以编辑的内容(例如,您可能不希望通过活动分叉和连接节点并行执行)。执行编辑的模型比阅读活动并通过它。如果你输入一个节点,那么你只需要调用你的节点定义。这听起来很简单。
不管怎样,我按照@mantrid 的建议去看看eclipse modeling project。
【讨论】:
(+1) 用于 Eclipse 建模项目,尤其是 Graphical Editing Framework (GEF)。 As it seems,当主应用程序是 Swing 时,可以在单独的窗口中使用 SWT。有希望...【参考方案7】:您可以尝试Cameleon:[http://www.shinoe.org/cameleon][1],这似乎很容易使用。它是一种用于函数式编程的图形语言,具有数据(工作)流方法。
它是用 C++ 编写的,但可以调用用任何编程语言编写的任何类型的本地或远程程序。
它有一个多尺度的方法,似乎图灵完备(这是一个 petri 网扩展)。
纯色,
【讨论】:
【参考方案8】:你也应该试试YAWL,它在工作流编程方面有很好的图形化背景,你可以看到:
-
[http://www.yawlfoundation.org/][1]
查看工作流模式,我认为这是处理图形编程的一个非常好的理论基础。
【讨论】:
以上是关于图形数据流组合框架的主要内容,如果未能解决你的问题,请参考以下文章