このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
ライブラリ チャート内のデータのログ
Simulink® では、1 つ以上のモデルでブロックまたはサブシステムの機能を再利用する 1 つの方法として、独自のブロック ライブラリを作成することができます。同様に、ライブラリ チャートの機能をカプセル化することにより、Stateflow® アルゴリズムの集合を再利用することもできます。
他の Simulink ブロック ライブラリ同様、モデル内のチャート ライブラリ ブロックの各インスタンスを特殊化して、さまざまなデータ型、サンプル時間、その他のプロパティを使用することができます。同じプロパティを継承するライブラリ インスタンスでは生成コードを再利用できます。
Simulink ブロック ライブラリの詳細は、カスタム ライブラリ (Simulink)を参照してください。
ライブラリのログ設定がリンクされたインスタンスに与える影響
チャート インスタンスは、リンクされているライブラリ チャートからログ プロパティを継承します。インスタンスのログ プロパティはオーバーライドできますが、ライブラリで選択した信号に対してのみ適用されます。インスタンスからログを作成する追加の信号を選択することはできません。
チャート インスタンスにおけるログ プロパティのオーバーライド
チャート インスタンスでログ信号のプロパティをオーバーライドするには、以下のいずれかの方法を使用します。
アプローチ | 使用方法 |
---|---|
Simulink の [信号ログ セレクター] ダイアログ ボックス | ログ セレクターによるログ プロパティのオーバーライドを参照してください。 |
コマンド ライン インターフェイス | コマンド ライン API によるログ プロパティのオーバーライドを参照してください。 |
Atomic サブチャートにおけるログ プロパティのオーバーライド
モデル sf_atomic_sensor_pair
では、チャート RedundantSensors
の Atomic サブチャート Sensor1
および Sensor2
として、冗長なセンサーの組み合わせをシミュレーションしています。各 Atomic サブチャートは、ライブラリ チャート sf_atomic_sensor_lib
のステート Fail
、FailOnce
、および OK
のインスタンスを含んでいます。
ログ セレクターによるログ プロパティのオーバーライド
サンプル ライブラリ
sf_atomic_sensor_lib
を開きます。openExample("stateflow/ModelingARedundantSensorPairUsingAtomicSubchartExample", ... supportingFile="sf_atomic_sensor_lib");
ライブラリロックを解除。[シミュレーション] タブで、[ロックされたライブラリ] をクリックします。
Simulink エディターで、Stateflow
SingleSensor
チャートを選択します。[シミュレーション] タブで、[リストからのステートのログ] をクリックします。[Stateflow 信号のログ] ダイアログ ボックスで、以下のプロパティを設定し、[OK] をクリックします。
対象 指定する内容 Fail
[信号データのログ] チェック ボックスをオンにします。
[ログ名] をカスタム名の
LogFail
に変更します。[適用] をクリックします。
FailOnce
[信号データのログ] チェック ボックスをオンにします。
[ログ名] をカスタム名の
LogFailOnce
に変更します。[適用] をクリックします。
OK
[信号データのログ] チェック ボックスをオンにします。
[ログ名] をカスタム名の
LogOK
に変更します。[適用] をクリックします。
モデル
sf_atomic_sensor_pair
を開きます。このモデルには、ライブラリ チャートの 2 つのインスタンスが含まれています。openExample("stateflow/ModelingARedundantSensorPairUsingAtomicSubchartExample")
[コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。
[データのインポート/エクスポート] ペインで [ログを取るために信号を設定] をクリックして、Simulink 信号ログ セレクターを開きます。
[モデルの階層構造] ペインで、
RedundantSensors
を展開し、Sensor1
とSensor2
をクリックします。各インスタンスは、ライブラリ チャートからログ プロパティを継承します。
Sensor1
の一部のログ プロパティをオーバーライドします。[モデルの階層構造] ペインで、
Sensor1
を選択します。[ログ モード] を
[信号をオーバーライドする]
に変更します。モデルのすべての [DataLogging] チェック ボックスがオフになります。
Sensor1
でFail
ステートとFailOnce
ステートのログのみを有効にします。これらの 2 つの信号に対し、[DataLogging] を選択します。
OK
信号に対しては、[DataLogging] をオフにします。Fail
とFailOnce
のログ名にテキストSensor1
を追加します。信号
Fail
とFailOnce
のログ名をダブルクリックし、それぞれLogFailSensor1
とLogFailOnceSensor1
に変更します。
コマンド ライン API によるログ プロパティのオーバーライド
サンプル ライブラリ
sf_atomic_sensor_lib
を開きます。openExample("stateflow/ModelingARedundantSensorPairUsingAtomicSubchartExample", ... supportingFile="sf_atomic_sensor_lib");
ライブラリロックを解除。
library = find(sfroot,"-isa","Stateflow.Machine", ... Name="sf_atomic_sensor_lib"); library.Locked = false;
次のコマンドを使用して、
SingleSensor
チャートでFail
、FailOnce
、およびOK
の信号に対してログを作成します。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(paths,subpath)
を使用します。ここでsubpath
はチャート内の信号を表します。たとえば、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;
Fail
とFailOnce
のログ名にテキストSensor1
を追加します。% Enable custom naming logInfo.Signals(failidx).LoggingInfo.NameMode = true; logInfo.Signals(failOnceidx).LoggingInfo.NameMode = true; % Enter the custom name 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)