11

我有兴趣在我的应用程序中嵌入类似MathWorks Simulink的类型工具。在这个嵌入式工具单元中,使用我的块定义文件以工具想要的任何方式编写的块定义文件,将其表示为块及其输入和输出端口以及每个块的参数。我希望框架是通用的并从某个地方读取块定义,然后允许用户根据它们的定义组成给定块的数据流(最好带有图形编辑器)。然后,我希望该工具导出用户组成的块数据流,我可以在其中以 Java(或其他语言)实用地读取它,并使用它做任何我需要做的事情,比如构建给定数据流的可执行版本。

我提前知道,导出的块组合可以足够智能,可以执行,但我可以导出块组合/拓扑以及相互连接的输入和输出。换句话说,我不是在寻找一种数据流编程语言。我正在寻找允许图形组合数据流的工具集,然后将组合导出为 json 或我可以在编程语言中加载并用它做任何事情的东西。

上面的框架/工具是 Simulink 对来自其不同库的块所做的,但我需要将这样的东西嵌入到我自己的工具中,并且想知道哪个开源项目接近我想要做的。我想我想要的是一个数据流组合框架。请纠正我对此的看法。

4

8 回答 8

5

数据流语言是(彩色) Petri 网的特例。彩色Petri 网由位置图组成,每个位置都包含带有值的彩色标记(颜色是“数据类型”的一个有趣名称,值只是颜色/数据类型实例)。来自多个地方的令牌通过转换组合以在以下地方生成令牌;“过渡”可以组合“颜色”(例如,计算值)。所以,一个人可能有一个用于浮点值的标记“颜色”,以及由加、减、乘、除组成的转换;你可以很容易地用它来建模算术数据流(例如,Simulink)。

更重要的是,CPN 非常通用。它们由分层 CPN 填充,产生数据流子程序的效果,并允许各种扩展(例如时间约束等)。

彩色 Petri 网工具网站提供了一套完整的工具,用于构建/编辑/显示甚至评估任意彩色 Petri 网。(您甚至可能不需要编写 Java 程序来评估它们!)。它甚至提供对此类图形的静态分析,例如“终止”等,这些是您通常无法通过 Matlab 或 National Instruments 风格的数据流语言获得的。

如果有基于 Java 的 CPN 工具版本,我不会感到惊讶。该小组十多年来一直在构建此类工具。如果有一种方法可以相对容易地将颜色和过渡限制到特定的集合,例如您定义的“数据流”语言,我也不会感到惊讶。

于 2013-02-22T10:57:30.183 回答
2

我的建议是Yakindu Statecharts Tool。我不确定这是否太复杂。但我认为应该在这里提到它。您可以定义规则并显示错误,当连接不应该的事物时。我认为它看起来也有点像 Simulink 所做的,不是吗?

于 2013-02-13T13:44:18.067 回答
1

您应该先了解一下 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 = value)
  • 定义一条消息(srccomp.srcport >> dest.destport)

当然,图形编辑器应该更好。我们现在只有可视化器。

生成的 DF 图

于 2013-02-11T09:25:28.720 回答
1

我也在寻找这样的工具,偶然发现了JGraph,这是一个开发人员库,可用于自行构建交互式图形/图表绘图工具。这并不意味着您必须自己完成所有艰苦的工作,因为文件夹示例中的com.mxgraph.examples.swing.GraphEditor已经提供了一个很好的起点。

该演示编辑器的屏幕截图

在此处输入图像描述

当导出到所谓的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 库解析文件应该不成问题,所以总而言之,当忽略所有位置信息时,可以得到一个简单的数据流描述。

但是,请对我的建议持保留态度,因为我也在寻找正确的方法。

于 2013-02-22T09:08:52.403 回答
0

在我看来,您的用户应该编辑 UML 活动。因此,您可以在Eclipse PapyrusEclipse UML2 API的基础上进行构建。您需要为正在编辑的活动附加更具体的语义,并限制用户可以编辑的内容(例如,您可能不希望通过活动分叉和连接节点并行执行)。执行编辑的模型比阅读活动并通过它。如果你输入一个节点,那么你只需要调用你的节点定义。这听起来很容易。

无论如何,我按照@mantrid 的建议来看看eclipse 建模项目

于 2013-02-13T09:59:40.447 回答
0

我不确定以下内容是否完全符合您的期望,但您可以查看Eclipse eTrice 项目——它有一个图形编辑器和以他们自己的语言表达的导出模型。但是我不知道这个项目在实践中有多成熟,以及目前可以用 Java 中的模型做什么。

您还可以在 Eclipse 上查看其他建模项目

于 2013-01-31T03:52:21.483 回答
0

你可以试试Cameleon : [ http://www.shinoe.org/cameleon][1]这似乎很容易使用。它是一种用于函数式编程的图形语言,具有数据(工作)流方法。

它是用 C++ 编写的,但可以调用以任何编程语言编写的任何类型的本地或远程程序。

它有一个多尺度的方法,似乎是图灵完备的(这是一个 petri 网扩展)。

纯粹的,

于 2014-04-25T14:18:41.057 回答
0

您还应该尝试以图形方式在工作流编程方面具有相当不错背景的 YAWL,您可以看到:

  1. [ http://www.yawlfoundation.org/][1]

请参阅工作流模式,我认为这是一个非常好的理论基础来处理图形化编程。

于 2014-04-25T14:21:51.170 回答