我有兴趣将MathWorks Simulink类输入工具嵌入到我的应用程序中。在这种嵌入式工具中,使用我以任何工具想要的方式编写的块定义文件,将其表示为具有其输入和输出端口以及每个块的参数的块。我希望该框架具有通用性,并从某处读取块定义,然后允许用户根据其定义组成给定块的数据流(最好是图形编辑器自带)。然后,我希望该工具导出用户组成的块数据流,在这里我可以用Java(或其他语言)进行实用的读取,并做我需要做的一切,例如构建给定数据流的可执行版本。
我知道在高级方面,导出的块组合可以足够智能,可以执行,但是我可以导出块组合/拓扑以及彼此连接的输入和输出。换句话说,我不是在寻找一种数据流编程语言。我正在寻找仅一种工具集,该工具集允许以图形方式对数据流进行组合,然后将该组合导出为json或我可以用编程语言加载的内容,并对其进行任何处理。
上面的框架/工具是Simulink对来自其不同库的块所做的工作,但是我需要将这些东西嵌入我自己的工具中,并且想知道哪个开源项目接近我想要做的事情。我想我想要的是一个数据流组合框架。请更正我对此的看法。
我认为,在已知的Universe中不存在标准的Dataflow语言,因此没有用于它的编辑器。 Ive与我的一个朋友创建了一个DF系统原型,我们正在使用一种简单的DF脚本标记语言,我们可以使用一个小型PHP应用程序来显示该语言,该应用程序会将DF脚本转换为GraphViz脚本。
数据流语言是(彩色)Petri网的特例。有色Petri网由一个位置图组成,每个地方都带有带有值的有色标记(颜色是"数据类型"的有趣名称,值只是颜色/数据类型实例)。来自多个位置的令牌通过转换进行组合,以在以下位置生成令牌;"转换"可以组合"颜色"(例如,计算值)。因此,对于浮点值,可能会有一个标记"颜色",以及由加,减,乘,除组成的过渡。这样您就可以轻松地对算术数据流(例如Simulink)进行建模。
更重要的是,CPN具有惊人的通用性。它们用分层CPN填充,这些CPN赋予数据流子例程效果,并允许所有类型的扩展(例如定时约束等)。
彩色Petri网工具站点提供了一整套工具,用于构建/编辑/显示,甚至评估任意彩色Petri网。 (您甚至可能不需要编写Java程序来评估它们!)。它甚至还提供了此类图的静态分析,例如"终止"等,而Matlab或National Instruments风格的数据流语言通常不会提供这些分析。
如果有基于Java的CPN工具版本,那也不会令我感到惊讶。该小组已经建立了十多年的此类工具。如果有一种方法可以相对轻松地将颜色和过渡限制到特定的设置(例如,您定义的"数据流"语言),也不会感到惊讶。
我的建议是Yakindu Statecharts Tool。我不确定这是否太复杂。但是我认为应该在这里提及。您可以定义规则,并在不应该连接的情况下显示错误。我认为它看起来也类似于Simulink,不是吗?
我也在寻找一个像这样的工具,偶然发现了JGraph,这是一个开发人员库,可用于自行构建交互式图形/图表绘制工具。这并不意味着您必须独自完成所有艰苦的工作,因为com.mxgraph.examples.swing.GraphEditor在文件夹示例中已经提供了一个很好的起点。
该演示编辑器的屏幕截图
当导出到所谓的mx图形编辑器文件(* .xme)时,实际上会获取xml。对于上面的示例:
vertex="1">
y="250.0" />
vertex="1">
y="480.0" />
value="">
vertex="1">
y="710.0" />
value="">
使用标准XML库解析文件应该不成问题,因此总而言之,当所有位置信息都被忽略时,将获得一个简单的数据流描述。
但是,请采纳我的建议,因为我也在寻找正确的方法。
您应该先潜入J. Paul Morrison的DrawFBP。我无法用它来吸引别人,但这一定是我的错。
另外,我见过的最好的UI是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 =值)
定义一条消息(srccomp.srcport >> dest.destport)
当然,图形编辑器应该更好。现在我们只有可视化器。
您还应该尝试YAWL,它以图形化方式在工作流编程中具有相当好的背景,您可以看到:
[http://www.yawlfoundation.org/][1]
我认为,工作流程模式是进行图形化编程的非常好的理论基础。
您可以尝试Cameleon:[http://www.shinoe.org/cameleon][1],它似乎很容易使用。这是用于函数式编程的图形语言,具有数据(工作)流方法。
它是用C ++编写的,但是可以调用以任何编程语言编写的任何类型的本地或远程程序。
它具有多尺度方法,并且似乎已经完成(这是一个陪替氏网络扩展)。
纯粹
在我看来,您的用户应该编辑UML活动。因此,您可以基于Eclipse Papyrus和Eclipse UML2 API。您需要为正在编辑的活动附加更具体的语义,并限制用户可以编辑的内容(例如,您可能不希望通过活动fork和join节点并行执行)。执行编辑后的模型将变得无法阅读并执行。如果输入节点,则只需调用节点定义。听起来很简单。
无论如何,我遵循@mantrid的建议看一下Eclipse建模项目。
(+1)用于Eclipse建模项目,尤其是对于图形编辑框架(GEF)。 看起来,当主应用程序为Swing时,可以在单独的窗口中使用SWT。 有希望 ...
我不确定以下内容是否完全符合您的期望,但是您可以看看Eclipse eTrice项目-它具有图形编辑器并以自己的语言表示导出模型。但是我不知道这个项目在实践中有多成熟,以及Java中的模型目前可以做什么。
您还可以在Eclipse上查看其他建模项目。