カスタム コードによるバッテリー管理のモデル化
この例では、Stateflow® チャートにカスタム C コードを統合する方法を示します。このワークフローの用途の 1 つは、バッテリーの充電状態 (SOC) 管理システムをモデル化することです。Stateflow チャートでカスタム C コードを使用すると、以下のことができます。
前に開発した既存のアルゴリズムを活用する。
Stateflow では実装が難しいハードウェア操作用の C コードを使用する。
バッテリーの管理
バッテリー マネジメント システムは、電池式のデバイス (自動車や携帯電話など) の電力使用を制御します。コントローラーで SOC を監視および調整することで以下を行います。
過充電や重放電を防いでバッテリーの健全性を最適に保つ
電力供給とバッテリー寿命のバランスをとる
充電状態に基づいて電力限界を調整する
低充電レベルでバッテリー残量を維持するために、デバイスのパフォーマンスをスケールする
バッテリー管理モデルの動作モードは 3 種類のチャートを使用して処理されます。

Sensor Readings with Fault Detection チャート:
電圧、電流、温度の値を取得する。
センサーの故障にフラグを付けて障害処理をトリガーする。
有効なデータまたは故障コードをコントローラーに返す。
Battery State Estimation チャート:
センサー データを処理して SOC を計算する。
バッテリーの状態をリアルタイムで更新する。
状態のデータを電力制御ロジックにフィードする。
Battery Power Limit Control チャート:
SOC に基づいて動的な電力しきい値を設定する。
バッテリーの損傷を防ぐために電力限界を適用する。
充放電速度を制御する。
バッテリー コントローラーに各チャートから固有の制御信号が出力され、完全な電力管理ソリューションが作成されます。
このモデルでは、コードを生成して、システムで必要となる可能性があるその他の制御コードと合わせて組み込みのコントローラーにそのコードを展開できます。

ハードウェアとの通信のシミュレーション
Sensor Readings with Fault Detection チャートは 3 つのパラレル ステートを実装しています。
VoltageSensorCurrentSensorTemperatureSensor
それぞれのステートに、シミュレーションと展開の両方のモードを処理するための同一の判定ロジックが含まれています。CODEGEN_FLAG は次のいずれかになります。
false。合成されたセンサー読み取り値によるシミュレーション ロジックを有効にします。true。実際のセンサー データ向けのハードウェア インターフェイス コードを実行します。
たとえば、VoltageSensor は、CODEGEN_FLAG のステートに基づいて、シミュレートされた電圧値と実際のハードウェア読み取り値をバリアント遷移を使って切り替えます。

このモデルをシミュレーションに使用する場合は、[ダッシュボード] パネルで、システム入力に使用するセンサー読み取り値を制御できます。バッテリー モニターの呼び出しでタイムアウトが発生した場合、関数からエラー コード -9999 が返されます。
各パラレル センサー ステートに SensorFaultDetection ロジックが含まれています。このロジックは次の処理を行います。
エラー発生時に最後の有効な読み取り値を格納する
事前設定されたしきい値に照らしてエラー継続時間を監視する
しきい値を超えたら故障メッセージをトリガーする
制御コンポーネントにセンサーの故障を通知する
この例には、batteryMonitorDriver.h と batteryMonitorDriver.c の 2 つのカスタム C コード ファイルが含まれています。これらのファイルは、バッテリーの電圧、電流、温度など、システムからのセンサー データを取得するために使用するデバイス ドライバー コードを表します。また、コード生成にも使用されます。
モデルをドライバー コードでシミュレートするには、次を行います。
[コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。
[シミュレーション ターゲット] ペインで、ヘッダー ファイルとソース ファイルを指定します。
[詳細設定パラメーター] で、[カスタム コードのインポート] を選択します。
詳細については、カスタム コードの構成を参照してください。

カスタム コードの再使用によるバッテリーの SOC の推定
バッテリーの SOC を推定するため、モデルはカスタム C コード アルゴリズムを利用します。インクルード ファイル estimateSOC.c には、以下のコードが含まれています。

このアルゴリズムを使用すると、Stateflow チャートで C コード関数を再実装しなくても C コード関数を呼び出せます。
estimateSOC アルゴリズムでは、デバウンスを使用して電流測定値からノイズを除外します。Stateflow ロジックにより、SOC の値が 5 つのステートにマッピングされます。
MINLOWNORMALHIGHMAX
これらの範囲の使用により、異なる制御ステートの間での急速な変動を防止します。子ステートからの exit 遷移では、親ステートの端に移動します。これらの遷移が実行されると、Stateflow は親ステートのデフォルト遷移に戻ります。

デバイスの SOC を制御するためのロジック
カスタム コードを使用してロジック制御を実装するよりも、Stateflow チャートを使用してこの制御ロジックを設計する方が簡単です。このチャートは、推定されたバッテリー状態に基づいて、バッテリーの電力限界を実装します。

このチャートは、バッテリーの電力限界のモードとして考えられる 5 種類のモードを表します。
パフォーマンス モード: バッテリーの充電率が高い場合は大量の電力消費ができます。
バッテリー セーバー モード: 充電率が低い場合にバッテリーの電力消費を抑え、効率性を高めます。
オフ: バッテリーが SOC の限界にある場合に電力消費ができないようにします。
高速充電: 充電率が低い場合にバッテリーを高速充電します。
低速充電: バッテリーを正常に保つため、バッテリーの充電率が高い場合は低速で充電します。
ダッシュボード パネルを使用したシミュレーション
モデルが正常に動作することをテストするため、ダッシュボード パネルを使用して、電圧、電流、温度の値をシミュレートすることができます。スイッチを使用すると、センサー エラーをシミュレートして、故障検出ロジックをテストできます。ゲージおよびプロットの Dashboard ブロックは、Stateflow チャートのアクティビティに対してバインドされ、内部のステートとデータを可視化します。モデルのナビゲート中に、ダッシュボード パネルを移動および最小化できます。Dashboard ブロックの詳細については、対話型のダッシュボードを使用したシミュレーションの制御 (Simulink)を参照してください。

コード生成
チャート Sensor Readings with Fault Detection への入力は、batteryMonitorDriver.h および batteryMonitorDriver.c の 2 つの C コード ファイルにより提供されます。これらの 2 つのファイルは、システムからのセンサー データを取得するために使用するデバイス ドライバー コードを表します。センサー データには以下が含まれます。
バッテリー電圧
電流
温度
このモデルをコード生成に使用するには、ドライバー コードが外部ハードウェアと通信しなければなりません。この機能を有効にするため、コードを生成してノイズがあるセンサー値をシミュレートするときに、制御変数 CODEGEN_FLAG を使用したバリアント遷移により Stateflow チャートで C コードを直接呼び出せます。コマンド プロンプトで CODEGEN_FLAG の値を true に設定します。
CODEGEN_FLAG = true;
Stateflow バリアントとバリアント遷移の詳細については、バリアント条件を使用したインジケーター ランプ調光器の制御を参照してください。
生成されたコードをドライバー コードでコンパイルするには、[コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[コード生成]、[カスタム コード] ペインでヘッダー ファイルとソース ファイルを指定します。詳細については、カスタム コードの構成を参照してください。

参照
[1] Ramadass, P., B. Haran, R. E. White, and B. N. Popov. “Mathematical modeling of the capacity fade of Li-ion cells.” Journal of Power Sources. 123 (2003), pp. 230–240.
[2] Ning, G., B. Haran, and B. N. Popov. “Capacity fade study of lithium-ion batteries cycled at high discharge rates.” Journal of Power Sources. 117 (2003), pp. 160–169.
参考
トピック
- Stateflow チャートでのカスタム コードの再利用
- バリアント条件を使用したインジケーター ランプ調光器の制御
- Simulink Coder を使用したコード生成 (Simulink Coder)
- Embedded Coder を使用したコード生成ワークフロー (Embedded Coder)
- ブロック パラメーター値の調整と試行 (Simulink)