2016-05-06 8 views
1

私は現在、Matlab Simulinkプロジェクトに取り組んでいます。私はMatlab/Simulink(数週間)を使用することに全く新しいです。Matlabのwhileループによる遅延の作成

私はSimulinkを開いてシミュレーションを開始できるMatlab ".m"ファイルを実装して実行します。目的は、1時間の "ピース"にカットされたロードセルで24時間のテストを行い、1時間ごとにExcelファイルの異なるシートにデータを保存することです。だから私のシミュレーションは1時間実行され、停止して再び開始されます。 Matlabと "for"ループを通して私は24回測定を行います。 測定ステップの間に、simulinkがその測定を終了してファイルを保存するのを待って、Simulinkウィンドウが閉じることができるようにする必要があります。close_system('Thesis_SerDatTransm_Simulink')

だから私は、私が得る対策は449よりも大きいサイズ(私は449個の値を測定する)の配列に収まる場合は、whileループを持つと確認することで遅延を実装してみました:今

for k=0:1:24 
    % Load Simulink 
    load_system('Thesis_SerDatTransm_Simulink.slx') 

    % Open Simulink 
    open_system('Thesis_SerDatTransm_Simulink.slx') 

    % Start Simulation 
    set_param('Thesis_SerDatTransm_Simulink', 'SimulationCommand', 'Start'); 

    % Save Data 
    my_cell = sprintf('A%d',k); 
    xlswrite('file.xlsx',y,my_cell) 

    % Wait for Simulation 
    while 1 
     test=size(y)>=449; 
     if (test) 
     close_system('Thesis_SerDatTransm_Simulink') 
     break 
     end 
    end 
end 

問題そのプログラムはwhileループで動かない。 Simulinkは開始されますが、シミュレーションやデータ収集は行われません。 だから、Whileループで何か問題があるかどうかチェックできるかどうかは疑問でした。なぜなら、残りのプログラムはループなしでうまく動作するからです(しかし、シミュレーション中はSimulinkウィンドウを閉じることができないというエラーメッセージが表示されます)。 matlabでwaitforと遅延を作成し、別のfunctionを作成する方法があることは知っていますが、私はこれをどのように行うのかまだ分かりませんでした。

おかげであなたは、MATLAB pauseコマンドを使用する必要があります書かれたよう

よろしく

hohmchri

+0

あなたの質問には '449'の値が書かれていますが、あなたのコードは' 499'の値をテストしています...どちらが正しいですか? – gariepy

+0

システムを一度ロードして閉じるだけで済みます。また、すでにload_systemを使用している場合、open_systemを使用する必要はないと思います。 close_system関数が実際にForループの外側にある可能性があるので、ここで達成しようとしていることは必要ないと思います。 –

+0

@gariepy、はい、私の悪いです。タイプミスがあります。私はチェックしたい値の正しい数である449に変更しました。私は明日も試験をやり直すつもりです。私はそれがうまくいくことを望む。ありがとうございました! – hohmchri

答えて

1

を述べたとして、これを行うための正しい方法は、お使いのモデル(あなたが持っているload_systemopen_systemset_paramのないシーケンス)を実行するためにsim機能を使用することです、あなたのコードを最適化することになります。

simは、モデルの実行が完了するまでmコードの実行をブロックします。データは、(出力引数なしで使用された場合)ワークスペースに返されるか、simへの呼び出しからの出力として返されます。 (そしてあなたがしたようにそれをExcelに書くことができます)simを使わない唯一の理由は、あなたが持っているコマンドを使用する唯一の理由は、モデルの初期化に時間がかかり、ループのたびに開いて閉じたいと思っています。しかし、この場合でも、あなたのコードは正しくありません。 load_systemはループの外にあります。 open_systemは必須ではありません。 whileループでのポーリングモデルのSimulationStatusプロパティが実行中かどうかを確認します(y変数のサイズではありません)。 close_systemはループの後にあります(コメントの1つに@m_powerが表示されます)。

+0

これは完全に機能しました!ありがとう!最後に私は 'sim'を使いました。これで私は本当に必要のないコードでコードを埋めることも避けています。 – hohmchri

1

。これにより、X秒間の実行が停止します。

またm_powerが

関連する問題