我有兴趣在我的应用程序中嵌入一个类似MathWorks Simulink的类型工具。在这个嵌入式工具中,单位用块的输入和输出端口以及每个块的参数表示,使用我想要的工具所需的块定义文件。我希望框架是通用的,并从某处读取块定义,然后允许用户根据它们的定义组合给定块的数据流(最好是用图形编辑器来完成)。然后,我希望该工具导出用户组成的块数据流,我可以用Java(或其他语言)实际读取它,并像构建给定数据流的可执行版本一样执行我需要的任何操作。
我知道在高级级别,导出的块组合可以足够智能,可以执行,但我可以导出块组合/拓扑以及相互连接的输入和输出。换句话说,我不是在寻找数据流编程语言。我正在寻找允许数据流的图形组合的工具集,然后导出组合,如json或我可以在编程语言中加载的东西,并用它做任何事情。
上面的框架/工具是Simulink对来自不同库的块所做的事情,但是我需要在我自己的工具中嵌入这样的东西,并且想知道哪些开源项目接近我想要做的事情。我想我想要的是数据流组合框架。请纠正我对此的看法。
答案 0 :(得分:5)
数据流语言是(有色)Petri nets的特例。 colored Petri net由一个位置图组成,每个位置都带有带有值的彩色标记(颜色是“数据类型”的有趣名称,值只是颜色/数据类型实例)。来自多个地方的标记通过过渡组合在以下位置产生标记; “过渡”可以组合“颜色”(例如,计算值)。因此,可能有浮点值的标记“颜色”,以及由加,减,乘,除组成的转换;你可以很容易地用这个模拟算术数据流(例如,Simulink)。
更重要的是,CPN非常普遍。它们填充了分层CPN,它们提供了数据流子例程的效果,并允许各种扩展(例如定时约束等)。
Colored Petri Net Tools网站提供了一整套工具,用于构建/编辑/显示甚至评估任意彩色Petri网。 (您甚至可能不需要编写Java程序来评估它们!)。它甚至提供了对这些图形的静态分析,例如“终止”等,您通常无法使用Matlab或National Instruments风格的数据流语言。
如果有基于Java的CPN工具版本,我不会感到惊讶;十多年来,该小组一直在建立这样的工具。如果有一种方法可以将颜色和过渡约束到特定的集合,例如相对容易地定义到您定义的“数据流”语言,也不会让我感到惊讶。
答案 1 :(得分:2)
我的建议是Yakindu Statecharts Tool。我不确定这是否太复杂了。但我认为应该在这里提一下。您可以定义规则,并在连接不应该的东西时显示错误。我认为它看起来有点像Simulink的作用,不是吗?
答案 2 :(得分:1)
你应该对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个元素:
当然,图形编辑器应该更好。我们现在只有可视化工具。
答案 3 :(得分:1)
我也在寻找这样的工具,并偶然发现了JGraph,这是一个开发人员库,可以用来构建自己的交互式图形/图表绘制工具。这并不意味着您必须自己完成所有的艰苦工作,因为 com.mxgraph.examples.swing.GraphEditor 已经在 examples <文件夹中提供了一个很好的起点/ em>的
该演示编辑器的屏幕截图
当导出到所谓的 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" 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库解析文件应该不是问题,因此总而言之,当忽略所有位置信息时,可以获得简单的数据流描述。
但是,请带上我的建议,因为我也在寻找正确的方法。
答案 4 :(得分:0)
我不确定以下内容是否符合您的期望,但您可以查看Eclipse eTrice project - 它有一个图形编辑器和导出模型用他们自己的语言表达。但是我不知道这个项目在实践中有多成熟,目前用Java中的模型可以做些什么。
您还可以查看其他modelling projects at Eclipse。
答案 5 :(得分:0)
这听起来我的用户应该编辑UML活动。因此,您可以构建Eclipse Papyrus和Eclipse UML2 API。您需要为正在编辑的活动附加更具体的语义,并限制用户可以编辑的内容(例如,您不希望通过活动分支和加入节点并行执行)。执行编辑的模型而不是读取活动并通过它。如果输入节点,则只需调用节点定义即可。这听起来很容易。
无论如何,我按照@mantrid的建议来看看eclipse modeling project。
答案 6 :(得分:0)
您可以尝试使用 Cameleon :[http://www.shinoe.org/cameleon][1],这似乎很简单。它是函数式编程的图形语言,具有数据(工作)流方法。
用C ++编写,但可以调用用任何编程语言编写的任何类型的本地或远程程序。
它采用多尺度方法,似乎是完整的(这是一个petri网扩展)。
薄纱,
答案 7 :(得分:0)
您还应该尝试以图形方式在工作流程编程中具有相当好背景的YAWL,您可以看到:
请参阅工作流模式,我认为这是一个非常好的理论基础,可用于图形化编程。