3

M ファイルから simulink を制御しようとしています。M ファイルでやりたいことは、simulink モデルに入力を与え、simulink モデルを実行し、0.6 秒で 1 つの入力値を変更し、新しい入力で simulink モデルを実行し続けることです。

set_param を使用することで、simulink を開始、一時停止、および続行できることは既に知っていますが、問題は、特定の時間 (0.6 秒) で simulink モデルを一時停止する方法がわからないことです。現在の時刻を取得することは可能ですか? simulink モデルから M ファイルで読み込みますか?

私が既に知っているもう 1 つの方法は、sim を使用して simulink モデルを 0 から 0.6 秒まで実行し、SimState を使用して 0.6 秒で情報を保存し、これらの情報を読み込んでシミュレーションを再開することです。シミュレーションを再開する前に入力を変更しようとしていますが、モデルは保存した情報から入力値をロードするようで、新しい入力値を取得しません。

私は非常に長い間この問題に悩まされていました。誰かが私を助けてくれませんか?

どうもありがとうございました。

4

3 に答える 3

2

以下を使用して、実行中のシミュレーションの現在の時間を取得できます。

get_param('simulink_model_name', 'SimulationTime');

たとえば、シミュレーション中に M ファイルからこの値を確認するには、

timer(...)

シミュレーションが 0.6 秒になったことを検出できます。

于 2013-03-23T10:42:40.337 に答える
2

同様の目標を達成するために、simulink と m-script を組み合わせて使用​​しました。

モデルに 'assert' ブロックを 1 つ追加します。それをダブルクリックして、「アサーションが失敗したときにシミュレーションを停止する」のチェックを外します。[アサーションが失敗した場合のシミュレーション コールバック] フィールドに、次の 3 つのコマンドを追加します。

  1. set_param(bdroot,'SimulationCommand','pause');
  2. run('myscript.m'); %スクリプト名を挿入
  3. set_param(bdroot,'SimulationCommand','continue');

次に、このブロックの入力端子を「等しくない」関係演算子に接続します。関係演算子の最初の入力ポートをクロックに接続します (pls はアナログ クロックのデシメーションを設定するか、デジタル クロックのサンプル時間 [継承の場合は通常 -1] を設定します)。2 番目の入力端子は、値が 0.6 の定数ブロックに接続されています。

モデルのシミュレーションでは、シミュレーションは 0.6 秒で一時停止し、m ファイルを実行して入力パラメーターを変更し (調整可能であることを考慮して)、シミュレーションを続行します。

アサーション ブロックは、入力信号が 0 になると呼び出されます。0.6 秒で、関係演算子の出力は 0 になります。

それがうまくいったかどうか教えてください。

于 2016-07-13T09:54:48.183 に答える
1

これは現在、M ファイルからは実行できません。外部で特定の時間に入力を動的に変更する場合は、S-Function が必要になります。Mathworks は、販売している別のツールボックスの機能の 1 つを無効にするという点で、この機能をサポートしたくないため、このソリューションでさえ困難であり、不安定な作業です。やがて、彼らはこの特権を与えると信じていますが、現在は存在しません。また、動的入力ブロックを使用して、マップやシグナル ビルダーなどの入力値を変更してみませんか?

于 2013-03-06T19:43:37.467 に答える