3

いくつかのプロセスをシミュレートするために、自己モデル化されたブロックの事前定義された動作順序を取得する際に問題が発生します。

たとえば、ブロックBとCが機能し始める前に、ブロックAを終了する必要があることをどのように確認できますか?

問題は、一部のブロックが他のブロックの後に機能し、一部のブロックが機能しないことです。時間に依存することを行うために、Simulinkの経験があまりないことを認めなければなりません(simulinkの基本的な知識は利用可能ですが)。

たとえば、このシナリオは次のように実現されます。

A -> B, C -> D, E, F

主なことは、すべてのブロックAFには相互に論理的な相関関係がなく、すべてがいくつかのことを行うということです。私の目的は、Aが終了した後、BとCが機能し始めるようにすることです。そして、BANDCが終了した後のD/E/F。この場合、「並列」という単語は間違った単語でした。これは、実際に並列に計算する必要はありません。これが事前に定義された安定した順序に準拠していることを確認してください。

編集: 私の新しいアイデアは、matlabワークスペースのalsバッファーを使用することです。これにより、ブロックAは結果をワークスペースに(「toworkspace」ブロックによって)プッシュできます。しかし今、私は、ブロックBとCがAの結果を(「ワークスペースから」で)読み取ることができることを確認する必要があります。Aがその情報をワークスペースにプッシュした後...これを行う方法は?

Edit2: これはいくつかの考えをより明確にするはずのスクリーンショット です:「Sortedorder 」のドキュメントが参照しているように、セットアップは問題ないようです(サブシステムのタイミングを含む)。しかし、残念ながらまだ問題が存在します。変数「simin」は、書き込まれる前にワークスペースからロードされます:(ご覧のとおり、ディスプレイには「1」が表示されますが、これは実行すべきではありません。シミュレーションの最初の実行で、変数「simin」という例外が発生します。 「simin」は存在しません。

私の問題を手伝っていただければ幸いです。

挨拶、poeschlorn

4

3 に答える 3

1

したがって、あなたの例では、ブロックAがBとCの両方に同じワイヤで接続されている場合、ブロックAが終了すると、ブロックBとCは並列に動作します。

編集:私はあなたと同じブロックを使用していますが、それは私のために働きます。あなたは物事を複雑にしすぎていると思います。ブロックの優先順位を設定する方法は、Simulinkがブロックを使用せずにブロックを実行する方法と同じです。以下に、私のセットアップと両方のバイナリディスプレイでの出力を示します。

ここに画像の説明を入力してください

最初の実行で表示されるエラーは、最初のタイムステップが実行されるまでSimulinkが変数を作成しないことが原因です。Simulinkがシミュレーションをビルドすると、ワークスペースからの入力として使用される変数が作成されていないことがわかります。

于 2011-01-28T13:53:11.760 に答える
1

ブロック間の接続が順序を設定するのに十分でない場合は、ブロックの優先順位を使用できます。

disp実行順序をテストするためのヒントは、ブロックの名前を表示するコマンドを使用して「埋め込み Matlab ブロック」を追加することです。

于 2011-02-02T09:08:17.147 に答える
0

あなたが何を求めているのかははっきりしていません。ブロックAが完成しなければならないというのは、アウトプット機能のことですか?Simulink でシミュレーションが機能する方法は、ブロックが連続して実行されるため、ブロック B と C は、ブロック A が出力関数を終了するまで実行されません。

現在 Simulink でブロック B と C を並列に実行する明確な方法を知りません。

于 2011-01-29T03:14:36.370 に答える