ステートとデータのシミュレーション出力のログ
Simulink® モデルの Stateflow® チャートをシミュレートするときに、ローカル、出力およびアクティブ ステートのデータの値のログを Simulink.SimulationData.Dataset
オブジェクトとして作成できます。シミュレーション後、シミュレーション データ インスペクター (Simulink)またはロジック アナライザー (DSP System Toolbox)を使用するか、MATLAB® ワークスペースで、このオブジェクトにアクセスできます。データのログ作成のワークフローは次のとおりです。
チャートの信号ログを有効にして、ログ形式を選択します。信号のログの有効化 を参照してください。
信号のログのステートおよびデータを設定します。ステートおよびデータのログ設定 を参照してください。
チャートのシミュレーションを実行します。
ログ データにアクセスします。信号ログ データへのアクセスを参照してください。
信号のログの有効化
既定の設定では、モデルとチャートの信号のログ作成は有効にされています。信号のログを無効にするか、再度有効にするには、次を行います。
[コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。
[データのインポート/エクスポート] ペインで、[信号のログ] を選択し、チャートのログ作成を有効にします。ログ作成を無効にするには、[信号のログ] をクリアします。詳細については、Signal logging (Simulink)を参照してください。
(オプション) 信号のログ オブジェクトにカスタムの名前を指定します。既定の名は
logsout
です。このオブジェクトを使用して、MATLAB ワークスペース変数内のログ データにアクセスできます。詳細については、信号ログを使用した信号データの保存 (Simulink)を参照してください。(オプション) [形式] フィールドで、信号のログの形式を選択します。オプションは次のとおりです。
配列
構造体
時間付き構造体
データセット
既定の設定は
[データセット]
です。詳細については、時間、状態および出力データ形式 (Simulink)を参照してください。
ステートおよびデータのログ設定
ステート、ローカル データ、出力データのログのプロパティを設定するには、チャート内から [Stateflow 信号のログ] ダイアログ ボックスを使用して行う方法と、コマンド ラインからプログラムによって行う方法があります。
ステートおよびデータの個別ログ作成
1 回につき 1 つのステートまたはデータ オブジェクトのログのプロパティを設定するには、[プロパティ インスペクター]、モデル エクスプローラー、またはステートまたはデータ オブジェクトのプロパティ ダイアログ ボックスを使用します。[ログ] タブを選択し、必要に応じてプロパティを変更します。詳細については、ログのプロパティを参照してください。
以下に例を示します。
sf_semantics_hotel_checkin
モデルを開きます。openExample("stateflow/SemanticsHotelCheckinExample")
この例の詳細については、実行時の Stateflow オブジェクトの相互作用を参照してください。
Hotel
チャートを開きます。[シンボル] ペインを開きます。[シミュレーション] タブの [準備] で、[[シンボル] ペイン] をクリックします。
[プロパティ インスペクター] を開きます。[シミュレーション] タブの [準備] で、[プロパティ インスペクター] をクリックします。
ログを作成する
service
ローカル データを設定します。[シンボル] ペインで、
service
を選択します。[プロパティ インスペクター] の [ログ] で、[信号データのログ] チェック ボックスをオンにします。
ログを作成する
Dining_area
ステートを設定します。Stateflow エディターで、
Dining_area
ステートを選択します。[シミュレーション] タブの [準備] で、[自己アクティビティのログ] を選択します。あるいは、[プロパティ インスペクター] の [ログ] で [自己アクティビティのログ] チェック ボックスを選択します。
既定では、このステートのログ名は階層信号名
Check_in.Checked_in.Executive_suite.Dining_area
です。より短い名前をステートに割り当てるには、[ログ名] を[カスタム]
に設定し、「Dining Room
」と入力します。
複数の信号のログ作成
複数のステートやデータ オブジェクトのログのプロパティを設定するには、[Stateflow 信号のログ] ダイアログ ボックスを使用します。ステート、ローカル、出力のすべてのデータのリストから、ログを作成するチャート オブジェクトを選択します。詳細については、ログのプロパティを参照してください。
以下に例を示します。
sf_semantics_hotel_checkin
モデルを開きます。openExample("stateflow/SemanticsHotelCheckinExample")
Hotel
チャートを開きます。複数の信号をログに記録するには、Shift キーを押しながらログ対象のステートを選択します。[シミュレーション] タブの [準備] で、[自己アクティビティのログ] を選択します。
ログ バッジ
は、モデル内でログ記録される信号を示します。
出力端子の追加
出力端子を追加してチャートのアクティビティを監視できます。Stateflow エディターから、[シミュレーション] タブの [出力端子の追加] をクリックします。Stateflow チャートに新しい端子が表示されます。この端子をビューアーに接続して、チャートの子アクティビティを監視します。
コマンド ライン API によるチャート信号のログ作成
ステートおよびデータ オブジェクトのログのプロパティをコマンド ラインからプログラムによって設定します。ステートまたはデータ オブジェクトのログ作成を有効にするには、オブジェクトのハンドルを取得して、その LoggingInfo.DataLogging
プロパティを 1
に設定します。Stateflow プログラム インターフェイスの詳細については、Stateflow API の概要を参照してください。
以下に例を示します。
sf_semantics_hotel_checkin
モデルを開きます。openExample("stateflow/SemanticsHotelCheckinExample")
ステート
Dining_area
に対応するStateflow.State
オブジェクトにアクセスします。diningState = find(sfroot,"-isa","Stateflow.State",Name="Dining_area");
ローカル データ
service
に対応するStateflow.Data
オブジェクトにアクセスします。serviceData = find(sfroot,"-isa","Stateflow.Data",Name="service");
Dining_area
ステートとservice
データのログ作成を有効にします。diningState.LoggingInfo.DataLogging = true; serviceData.LoggingInfo.DataLogging = true;
Dining_area
ステートのログ名を、カスタム名Dining Room
に変更します。% Enable custom naming diningState.LoggingInfo.NameMode = "Custom"; % Enter the custom name diningState.LoggingInfo.LoggingName = "Dining Room";
信号ログ データへのアクセス
シミュレーション時に、Stateflow により、ログ データは Simulink.SimulationData.Dataset
(Simulink) 信号のログ オブジェクトに保存されます。
たとえば、service
ローカル データと Dining_area
ステートのアクティビティのログを作成するように sf_semantics_hotel_checkin
モデルを設定するとします。シミュレーション開始後に、1 つ目のスイッチを 2 回切り替えてホテルにチェックインし、2 つ目のスイッチを複数回切り替えてルーム サービスを注文します。シミュレーションを停止後に、シミュレーション データ インスペクター、ロジック アナライザー、または MATLAB ワークスペースで、ログ データを表示できます。
シミュレーション データ インスペクターでのログ データの表示
シミュレーション データ インスペクターを開くには、[シミュレーション] タブで、[データ インスペクター] を選択します。モデルをシミュレートすると、アイコンが強調表示されて、シミュレーション データ インスペクターに新しいシミュレーション データがあることが示されます。詳細については、シミュレーション データ インスペクターを使用したステート アクティビティの表示を参照してください。
ロジック アナライザーでのログ データの表示
ロジック アナライザーを開くには、[シミュレーション] タブで、[ロジック アナライザー] を選択します。モデルをシミュレートすると、アイコンが強調表示されて、ロジック アナライザーに新しいシミュレーション データがあることが示されます。詳細については、ロジック アナライザーでの Stateflow ステートの表示を参照してください。
メモ
ロジック アナライザーを使用するには、DSP System Toolbox™、SoC Blockset™、または HDL Verifier™ がなければなりません。
MATLAB ワークスペースでのログ データの表示
信号のログ オブジェクトにアクセスするには、MATLAB コマンド プロンプトで、以下のように入力します。
logsout = out.logsout
logsout = Simulink.SimulationData.Dataset 'logsout' with 2 elements Name BlockPath ___________ ________________________________ 1 [1x1 State] Dining Room sf_semantics_hotel_checkin/Hotel 2 [1x1 Data ] service sf_semantics_hotel_checkin/Hotel
ログに記録された要素にアクセスするには、関数
get
を使用します。ログが作成された要素には、名前、インデックス、またはブロック パスでアクセスできます。diningLog = get(logsout,"Dining Room")
diningLog = Stateflow.SimulationData.State Package: Stateflow.SimulationData Properties: Name: 'Dining Room' BlockPath: [1×1 Simulink.SimulationData.BlockPath] Values: [1×1 timeseries]
serviceLog = get(logsout,"service")
serviceLog = Stateflow.SimulationData.Data Package: Stateflow.SimulationData Properties: Name: 'service' BlockPath: [1×1 Simulink.SimulationData.BlockPath] Values: [1×1 timeseries]
ログ データおよびログが作成された各要素の時間にアクセスするには、
Values.Data
プロパティとValues.Time
プロパティを使用します。以下に例を示します。関数
table
を使用して、ログ データを表形式でまとめます。T1 = table(diningLog.Values.Time,diningLog.Values.Data); T1.Properties.VariableNames = ["Time","Data"]
T1 = 6×2 table Time Data __________ ____ 0 0 1.8607e+06 1 1.9653e+06 0 1.9653e+06 1 1.9653e+06 0 2.2912e+06 1
T2 = table(serviceLog.Values.Time,serviceLog.Values.Data); T2.Properties.VariableNames = ["Time","Data"]
T2 = 6×2 table Time Data __________ ____ 0 0 1.7076e+06 0 1.8607e+06 1 1.9653e+06 2 1.9653e+06 3 1.9653e+06 4 2.2912e+06 5
関数
plot
を使用して、ログ データを Figure ウィンドウに表示します。X = serviceLog.Values.Time; Y = serviceLog.Values.Data; plot(X,Y,"-o") xlabel("Time") ylabel("Data")
ログ作成された値の配列を関数
xlswrite
に渡すことにより、ログ データを Excel® スプレッドシートにエクスポートします。A = [double(diningLog.Values.Time) double(diningLog.Values.Data)]; xlswrite("dining_log.xls",A);
メモ
信号のログ オブジェクトは、ログ記録中のデータに対して Stateflow チャートが書き込むたびに、データの値が変更されない場合でも、データ点を記録します。たとえば、この例では、値が 0
のデータ点は、チャートが時間 0
においてローカル データ service
を 0
に初期化するときと、デフォルト遷移が時間 1.7076e+06
において service
を 0
に設定するときが該当します。
多次元データのログ作成
Stateflow では、多次元信号への各更新を単一の変更としてログに記録します。たとえば、行列 A
の 2 つの要素を別々に更新すると、
A[1][1] = 1; A[1][2] = 1;
A
を単一のコマンドで更新すると、 A = 1;
i
と j
のすべての値に関して、コマンドが A[i][j] = 1
を暗示している場合であっても同じです。データのログに関する制限
エクスターナル モードでモデルをシミュレートする場合、Stateflow データのログ作成はサポートされません。
[高速リスタート] が有効なチャートからステート アクティビティやデータのログを作成すると、最初の実行以降のすべての実行で、最初にログが作成されたデータ点が重複します。このようなデータ点を使用するアルゴリズムでは、この重複を考慮しなければなりません。
参考
アプリ
- シミュレーション データ インスペクター (Simulink) | ロジック アナライザー (DSP System Toolbox)
オブジェクト
Simulink.SimulationData.Dataset
(Simulink) |Stateflow.SimulationData.Data
|Stateflow.SimulationData.State
関数
ツール
- 信号プロパティ (Simulink)
関連するトピック
- 信号ログを使用した信号データの保存 (Simulink)