このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
ライブラリ チャート内のデータのログ
Simulink® では、1 つ以上のモデルでブロックまたはサブシステムの機能を再利用する 1 つの方法として、独自のブロック ライブラリを作成することができます。同様に、ライブラリ チャートの機能をカプセル化することにより、Stateflow® アルゴリズムの集合を再利用することもできます。
他の Simulink ブロック ライブラリ同様、モデル内のチャート ライブラリ ブロックの各インスタンスを特殊化して、さまざまなデータ型、サンプル時間、その他のプロパティを使用できます。同じプロパティを継承するライブラリ インスタンスでは生成コードを再利用できます。
Simulink ブロック ライブラリの詳細については、ライブラリとブロックセット (Simulink)を参照してください。
ライブラリのログ設定がリンクされたインスタンスに与える影響
チャート インスタンスは、リンクされているライブラリ チャートからログ プロパティを継承します。インスタンスのログ プロパティはオーバーライドできますが、ライブラリで選択した信号に対してのみ適用されます。インスタンスからログを作成する追加の信号を選択することはできません。
Atomic サブチャートにおけるログ プロパティのオーバーライド
モデル sf_atomic_sensor_pair では、チャート RedundantSensors の Atomic サブチャート Sensor1 および Sensor2 を使用して、冗長なセンサーの組み合わせをシミュレーションしています。各 Atomic サブチャートは、ライブラリ チャート sf_atomic_sensor_lib のステート Fail、FailOnce、および OK のインスタンスを含んでいます。
Stateflow ユーザー インターフェイスを使用したログ プロパティのオーバーライド
サンプル ライブラリ
sf_atomic_sensor_libを開きます。openExample("sf_atomic_sensor_lib")[ライブラリ] タブで、[ロックされたライブラリ] をクリックしてライブラリのロックを解除します。
チャートを開きます。
[ライブラリ] タブの [準備] で、[プロパティ インスペクター] をクリックします。
チャート内のステートごとにログを有効にしてカスタマイズします。
ステートを選択します。
[プロパティ インスペクター] で [自己アクティビティのログ] を選択します。
[プロパティ インスペクター] の [ログ名] ドロップダウン リストで、
[Custom]を選択します。テキスト フィールドで、
Logの後に続けてステート名を入力します。たとえば、LogOK、LogFail、およびLogFailOnceのようになります。
モデル
sf_atomic_sensor_pairを開きます。このモデルには、ライブラリ チャートの 2 つのインスタンスが含まれています。openExample("sf_atomic_sensor_pair")[コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。
[データのインポート/エクスポート] ペインで [ログを取るために信号を設定] をクリックして、Simulink 信号ログ セレクターを開きます。
[Simulink 信号ログ セレクター] ウィンドウの [モデルの階層構造] ペインで、
RedundantSensorsを展開し、Sensor1をクリックします。ライブラリ インスタンスは、ライブラリ チャートからログ プロパティを継承します。

Sensor1のログ プロパティをオーバーライドします。ウィンドウ上部で、[ログ モード] を
[信号をオーバーライドする]に変更します。[コンテンツ] ペインで、セレクターは両方のライブラリ チャートの [DataLogging] チェック ボックスの値をオフにします。[DataLogging] 列のチェック ボックスをオンにして、
FailステートとFailOnceステートのログを有効にします。信号
FailとFailOnceの [LoggingName] 列の値をダブルクリックし、それぞれLogFailSensor1とLogFailOnceSensor1に変更します。

コマンド ライン API によるログ プロパティのオーバーライド
サンプル ライブラリ
sf_atomic_sensor_libを開きます。openExample("sf_atomic_sensor_lib")ライブラリロックを解除。
library = find(sfroot,"-isa","Stateflow.Machine", ... Name="sf_atomic_sensor_lib"); library.Locked = false;
ライブラリ チャート内のすべてのステートを含む配列を作成します。各ステートの信号のログを作成します。
states = find(library,"-isa","Stateflow.State"); for i = 1: length(states) states(i).LoggingInfo.DataLogging = true; end
モデル
sf_atomic_sensor_pairを開きます。このモデルには、ライブラリ チャートの 2 つのインスタンスが含まれています。open_system("sf_atomic_sensor_pair")モデルの
ModelLoggingInfoオブジェクトを作成します。このオブジェクトは、すべてのログ信号を保存するSignalsという名前の配列を含みます。logInfo = Simulink.SimulationData.ModelLoggingInfo.createFromModel('sf_atomic_sensor_pair')logInfo = ModelLoggingInfo with properties: Model: 'sf_atomic_sensor_pair' LoggingMode: 'OverrideSignals' LogAsSpecifiedByModels: {} Signals: [1×6 Simulink.SimulationData.SignalLoggingInfo]Signals配列は、ライブラリ チャートでログ作成がマークされた次のような信号を含んでいます。Atomic サブチャート
Sensor1のFail、FailOnce、およびOKステートのライブラリ インスタンスAtomic サブチャート
Sensor2のFail、FailOnce、およびOKステートのライブラリ インスタンス
ログ信号で、そのプロパティをオーバーライドする信号へのブロック パスを作成します。
Stateflow チャート内部の信号にアクセスするには、
Simulink.SimulationData.BlockPathオブジェクトを使用します。詳細については、Simulink.SimulationData.BlockPath(Simulink) を参照してください。たとえば、
RedundantSensorsチャートの Atomic サブチャートSensor1にある信号Fail、FailOnce、およびOKのブロック パスを作成するには、次のように入力します。failPath = Simulink.SimulationData.BlockPath( ... "sf_atomic_sensor_pair/RedundantSensors/Sensor1","Fail"); failOncePath = Simulink.SimulationData.BlockPath( ... "sf_atomic_sensor_pair/RedundantSensors/Sensor1","FailOnce"); OKPath = Simulink.SimulationData.BlockPath( ... "sf_atomic_sensor_pair/RedundantSensors/Sensor1","OK");
Simulink.SimulationData.BlockPathオブジェクト内の、各ログ信号のインデックスを取得します。failidx = logInfo.findSignal(failPath); failOnceidx = logInfo.findSignal(failOncePath); OKidx = logInfo.findSignal(OKPath);
Sensor1の信号のログ プロパティをオーバーライドします。信号
OKのログを無効にします。logInfo.Signals(OKidx).LoggingInfo.DataLogging = false;
カスタム名を有効にして設定します。
logInfo.Signals(failidx).LoggingInfo.NameMode = true; logInfo.Signals(failOnceidx).LoggingInfo.NameMode = true; logInfo.Signals(failidx).LoggingInfo.LoggingName = "LogFailSensor1"; logInfo.Signals(failOnceidx).LoggingInfo.LoggingName = "LogFailOnceSensor1";
変更を適用します。
set_param(bdroot,DataLoggingOverride=logInfo);
参考
Simulink.SimulationData.ModelLoggingInfo (Simulink) | Simulink.SimulationData.BlockPath (Simulink)