メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

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

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

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

Simulink ブロック ライブラリの詳細については、ライブラリとブロックセット (Simulink)を参照してください。

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

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

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

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

Stateflow ユーザー インターフェイスを使用したログ プロパティのオーバーライド

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

    openExample("sf_atomic_sensor_lib")
  2. [ライブラリ] タブで、[ロックされたライブラリ] をクリックしてライブラリのロックを解除します。

  3. チャートを開きます。

  4. [ライブラリ] タブの [準備] で、[プロパティ インスペクター] をクリックします。

  5. チャート内のステートごとにログを有効にしてカスタマイズします。

    1. ステートを選択します。

    2. [プロパティ インスペクター][自己アクティビティのログ] を選択します。

    3. [プロパティ インスペクター][ログ名] ドロップダウン リストで、[Custom] を選択します。

      テキスト フィールドで、Log の後に続けてステート名を入力します。たとえば、LogOKLogFail、および LogFailOnce のようになります。

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

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

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

  9. [Simulink 信号ログ セレクター] ウィンドウの [モデルの階層構造] ペインで、RedundantSensors を展開し、Sensor1 をクリックします。

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

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

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

    1. ウィンドウ上部で、[ログ モード][信号をオーバーライドする] に変更します。[コンテンツ] ペインで、セレクターは両方のライブラリ チャートの [DataLogging] チェック ボックスの値をオフにします。

    2. [DataLogging] 列のチェック ボックスをオンにして、Fail ステートと FailOnce ステートのログを有効にします。

    3. 信号 FailFailOnce[LoggingName] 列の値をダブルクリックし、それぞれ LogFailSensor1LogFailOnceSensor1 に変更します。

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

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

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

    openExample("sf_atomic_sensor_lib")
  2. ライブラリロックを解除。

    library = find(sfroot,"-isa","Stateflow.Machine", ...
        Name="sf_atomic_sensor_lib");
    library.Locked = false;
  3. ライブラリ チャート内のすべてのステートを含む配列を作成します。各ステートの信号のログを作成します。

    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 オブジェクトを使用します。詳細については、Simulink.SimulationData.BlockPath (Simulink) を参照してください。

    たとえば、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. カスタム名を有効にして設定します。

      logInfo.Signals(failidx).LoggingInfo.NameMode = true;
      logInfo.Signals(failOnceidx).LoggingInfo.NameMode = true;
      
      logInfo.Signals(failidx).LoggingInfo.LoggingName = "LogFailSensor1";
      logInfo.Signals(failOnceidx).LoggingInfo.LoggingName = "LogFailOnceSensor1";
  9. 変更を適用します。

    set_param(bdroot,DataLoggingOverride=logInfo);

参考

(Simulink) | (Simulink)