11

MathWorks Simulinkのような型ツールを自分のアプリケーションに埋め込むことに興味があります。この組み込みツールでは、ユニットは、ツールが必要とする方法で記述されたブロック定義ファイルを使用して、各ブロックの入力ポートと出力ポートとパラメーターを持つブロックとして表現されます。フレームワークを汎用化し、どこかからブロック定義を読み取り、ユーザーがその定義に基づいて特定のブロックのデータフローを作成できるようにしたい (できればグラフィカル エディターが付属している)。次に、ユーザーが作成したブロックのデータフローをツールにエクスポートし、Java (または他の言語) で実用的に読み取ることができるようにし、指定されたデータフローの実行可能バージョンを構築するなど、必要なことは何でも実行できるようにします。

事前レベルでは、エクスポートされたブロック構成は実行可能であるほどスマートであることがわかっていますが、ブロック構成/トポロジーと入力と出力が互いに接続されていることをエクスポートしても問題ありません。つまり、データフロー プログラミング言語を探しているわけではありません。私は、データフローのグラフィカルな構成を可能にし、構成をjsonまたはプログラミング言語にロードして何でもできるものとしてエクスポートできるツールセットを探しています。

上記のフレームワーク/ツールは、さまざまなライブラリからのブロックに対して Simulink が行うものですが、自分のツールにそのようなものを埋め込む必要があり、どのオープン ソース プロジェクトが自分のやりたいことに近いのか疑問に思っていました。私が欲しいのは、データフロー合成フレームワークだと思います。これを見て私の見方を修正してください。

4

8 に答える 8

5

データ フロー言語は、(色付きの)ペトリネットの特殊なケースです。色付きのペトリネットは場所のグラフで構成され、それぞれが値を持つ色付きのトークンを保持しています (色は「データ型」の変な名前で、値は単なる色/データ型のインスタンスです)。複数の場所からのトークンが遷移を介して結合され、次の場所でトークンが生成されます。「遷移」は「色」を組み合わせることができます(たとえば、値を計算します)。したがって、浮動小数点値のトークン「色」と、加算、減算、乗算、除算からなる遷移がある場合があります。これにより、算術データ フロー (たとえば、Simulink) を非常に簡単にモデル化できます。

さらに重要なことに、CPN は驚くほど一般的です。それらは、データフローサブルーチンの効果をもたらし、あらゆる種類の拡張 (時間制限など) を可能にする階層型 CPN で埋められます。

Colored Petri Net Toolsサイトでは、任意のColored Petri Net を作成、編集、表示、さらには評価するための完全なツール スイートを提供しています。(それらを評価するために Java プログラムを作成する必要さえないかもしれません!)。さらに、Matlab やナショナル インスツルメンツ スタイルのデータ フロー言語では通常得られない、「終了」などのグラフの静的分析も提供します。

Java ベースのバージョンの CPN ツールがあったとしても、私は驚かないでしょう。そのグループは、10 年以上にわたってそのようなツールを構築してきました。色とトランジションを特定のセット、たとえば定義した「データフロー」言語などに比較的簡単に制限する方法があったとしても、私は驚かないでしょう。

于 2013-02-22T10:57:30.183 に答える
2

私の提案はYakindu Statecharts Toolです。それが複雑すぎるかどうかはわかりません。でも、ここは言及されるべきだと思います。ルールを定義し、接続されるべきではないものが接続されたときにエラーが表示されるようにすることができます。Simulink の機能にも少し似ていると思いますね。

于 2013-02-13T13:44:18.067 に答える
1

J.PaulMorrisonの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フォルダの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" 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

Cameleonを試すことができます: [ http://www.shinoe.org/cameleon][1]これは使いやすいようです。これは、データ (ワークフロー) アプローチを持つ関数型プログラミング用のグラフィカル言語です。

C++ で記述されていますが、任意のプログラミング言語で記述された任意のタイプのローカル プログラムまたはリモート プログラムを呼び出すことができます。

マルチスケールのアプローチを採用しており、完全にチューリングされているようです (これはペトリネット拡張です)。

シアーズ、

于 2014-04-25T14:18:41.057 に答える
0

以下があなたの期待と正確に一致するかどうかはわかりませんが、Eclipse eTrice プロジェクトを見ることができます。これには、独自の言語で表現されたグラフィカル エディターとエクスポート モデルがあります。ただし、このプロジェクトが実際にどの程度成熟しているか、Java のモデルで現在何ができるかはわかりません。

Eclipse で他のモデリング プロジェクトを確認することもできます。

于 2013-01-31T03:52:21.483 に答える