Main Content

ライブラリ チャート内のデータのログ

Simulink® では、1 つ以上のモデルでブロックまたはサブシステムの機能を再利用する 1 つの方法として、独自のブロック ライブラリを作成することができます。同様に、ライブラリ チャートの機能をカプセル化することにより、Stateflow® アルゴリズムの集合を再利用することもできます。

他の Simulink ブロック ライブラリ同様、モデル内のチャート ライブラリ ブロックの各インスタンスを特殊化して、さまざまなデータ型、サンプル時間、その他のプロパティを使用することができます。同じプロパティを継承するライブラリ インスタンスでは生成コードを再利用できます。

Simulink ブロック ライブラリの詳細は、カスタム ライブラリ (Simulink)を参照してください。

ライブラリのログ設定がリンクされたインスタンスに与える影響

チャート インスタンスは、リンクされているライブラリ チャートからログ プロパティを継承します。インスタンスのログ プロパティはオーバーライドできますが、ライブラリで選択した信号に対してのみ適用されます。インスタンスからログを作成する追加の信号を選択することはできません。

チャート インスタンスにおけるログ プロパティのオーバーライド

チャート インスタンスでログ信号のプロパティをオーバーライドするには、以下のいずれかの方法を使用します。

アプローチ使用方法
Simulink の [信号ログ セレクター] ダイアログ ボックスログ セレクターによるログ プロパティのオーバーライドを参照してください。
コマンド ライン インターフェイスコマンド ライン API によるログ プロパティのオーバーライドを参照してください。

Atomic サブチャートにおけるログ プロパティのオーバーライド

モデル sf_atomic_sensor_pair では、チャート RedundantSensors の Atomic サブチャート Sensor1 および Sensor2 として、冗長なセンサーの組み合わせをシミュレーションしています。各 Atomic サブチャートは、ライブラリ チャート sf_atomic_sensor_lib のステート FailFailOnce、および OK のインスタンスを含んでいます。

ログ セレクターによるログ プロパティのオーバーライド

  1. サンプル ライブラリ sf_atomic_sensor_lib を開きます。

    openExample("stateflow/ModelingARedundantSensorPairUsingAtomicSubchartExample", ...
        supportingFile="sf_atomic_sensor_lib");
  2. ライブラリロックを解除。[シミュレーション] タブで、[ロックされたライブラリ] をクリックします。

  3. Simulink エディターで、Stateflow SingleSensor チャートを選択します。[シミュレーション] タブで、[リストからのステートのログ] をクリックします。

  4. [Stateflow 信号のログ] ダイアログ ボックスで、以下のプロパティを設定し、[OK] をクリックします。

    対象指定する内容
    Fail
    • [信号データのログ] チェック ボックスをオンにします。

    • [ログ名] をカスタム名の LogFail に変更します。

    • [適用] をクリックします。

    FailOnce
    • [信号データのログ] チェック ボックスをオンにします。

    • [ログ名] をカスタム名の LogFailOnce に変更します。

    • [適用] をクリックします。

    OK
    • [信号データのログ] チェック ボックスをオンにします。

    • [ログ名] をカスタム名の LogOK に変更します。

    • [適用] をクリックします。

  5. モデル sf_atomic_sensor_pair を開きます。このモデルには、ライブラリ チャートの 2 つのインスタンスが含まれています。

    openExample("stateflow/ModelingARedundantSensorPairUsingAtomicSubchartExample")
  6. [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。

  7. [データのインポート/エクスポート] ペインで [ログを取るために信号を設定] をクリックして、Simulink 信号ログ セレクターを開きます。

  8. [モデルの階層構造] ペインで、RedundantSensors を展開し、Sensor1Sensor2 をクリックします。

    各インスタンスは、ライブラリ チャートからログ プロパティを継承します。

    Simulink signal logging selector that shows logging properties inherited from the library chart.

  9. Sensor1 の一部のログ プロパティをオーバーライドします。

    1. [モデルの階層構造] ペインで、Sensor1 を選択します。

    2. [ログ モード][信号をオーバーライドする] に変更します。

      モデルのすべての [DataLogging] チェック ボックスがオフになります。

    3. Sensor1Fail ステートと FailOnce ステートのログのみを有効にします。

      これらの 2 つの信号に対し、[DataLogging] を選択します。OK 信号に対しては、[DataLogging] をオフにします。

    4. FailFailOnce のログ名にテキスト Sensor1 を追加します。

      信号 FailFailOnce のログ名をダブルクリックし、それぞれ LogFailSensor1LogFailOnceSensor1 に変更します。

    Simulink signal logging selector that shows different logging properties than the library chart.

コマンド ライン API によるログ プロパティのオーバーライド

  1. サンプル ライブラリ sf_atomic_sensor_lib を開きます。

    openExample("stateflow/ModelingARedundantSensorPairUsingAtomicSubchartExample", ...
        supportingFile="sf_atomic_sensor_lib");
  2. ライブラリロックを解除。

    library = find(sfroot,"-isa","Stateflow.Machine", ...
        Name="sf_atomic_sensor_lib");
    library.Locked = false;
  3. 次のコマンドを使用して、SingleSensor チャートで FailFailOnce、および OK の信号に対してログを作成します。

    states = find(library,"-isa","Stateflow.State");
    
    for i = 1: length(states)
       states(i).LoggingInfo.DataLogging = true;
    end
  4. モデル sf_atomic_sensor_pair を開きます。このモデルには、ライブラリ チャートの 2 つのインスタンスが含まれています。

    open_system("sf_atomic_sensor_pair")
  5. モデルの 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 サブチャート Sensor1FailFailOnce、および OK ステートのライブラリ インスタンス

    • Atomic サブチャート Sensor2FailFailOnce、および OK ステートのライブラリ インスタンス

  6. ログ信号で、そのプロパティをオーバーライドする信号へのブロック パスをそれぞれ作成します。

    Stateflow チャート内部の信号にアクセスするには、Simulink.SimulationData.BlockPath(paths,subpath) を使用します。ここで subpath はチャート内の信号を表します。たとえば、RedundantSensors チャートの Atomic サブチャート Sensor1 にある信号 FailFailOnce、および 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");
  7. Simulink.SimulationData.BlockPath オブジェクト内の、各ログ信号のインデックスを取得します。

    failidx = logInfo.findSignal(failPath);
    failOnceidx = logInfo.findSignal(failOncePath);
    OKidx = logInfo.findSignal(OKPath);
  8. Sensor1 の信号の一部のログ プロパティをオーバーライドします。

    1. 信号の OK のログを無効にします。

      logInfo.Signals(OKidx).LoggingInfo.DataLogging = false;
    2. FailFailOnce のログ名にテキスト 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";
  9. 変更を適用します。

    set_param(bdroot,DataLoggingOverride=logInfo);

参考

(Simulink) | (Simulink)