mcpField
S
simulink-single-precision-conversion

simulink-single-precision-conversion

github.com/matlab開発1.3k40 回インストール1 週間前に更新
リポジトリ

simulink-single-precision-conversion について

Fixed-Point Designerを使い、ロード済みのSimulinkモデルやサブシステムの倍精度型を単精度に変換するスキルです。互換性を確認して変換後の状態を検証し、モデルは保存せずに結果を報告します。

主な機能

  1. 01対象型を単精度に変換
  2. 02変換前の互換性チェック
  3. 03残存する倍精度演算の検証
  4. 04変換とメモリ結果の報告
  5. 05未保存のモデル基準状態を維持

活用シーン

  1. 01Simulinkモデルの単精度変換
  2. 02組み込みハードウェアのメモリ削減
  3. 03一括変換やCIチェックの実行
  4. 04互換性と変換結果の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/matlab/simulink-agentic-toolkit --skill simulink-single-precision-conversion

インストール後、Claude Code で/simulink-single-precision-conversionを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

manifest.yaml
references/
edge-cases.md
reporting-format.md

詳細

Simulink モデルの単精度変換(Fixed-Point Designer)

ツールボックス:Fixed-Point Designer 関数:DataTypeWorkflow.Single.convertToSingle

ユーザーが指定した倍精度データ型を、ブロック設定、Stateflow チャート設定、信号オブジェクト、バスオブジェクト全体にわたって単精度に変換します。Boolean、組み込み整数型(int8、uint8、int16、…)、および固定小数点型は変更されません。

使用する場合

  • Simulink モデル(.slx)またはサブシステムを倍精度から単精度に変換する場合
  • ネイティブで単精度をサポートする組み込みハードウェアのメモリ使用量を削減する場合
  • バッチ/CI 変換、変換の互換性チェック、または残存する倍精度型がないことの確認を行う場合
  • 単精度変換の互換性レポートと変換結果を、ユーザー向けに平易な言葉で要約する場合

使用しない場合

  • 単独の MATLAB .m コード — 代わりに coder.config('single') を指定して convertToSingle 関数を使用します
  • 固定小数点データ型の最適化 — 代わりに DataTypeWorkflow.Converter を使用します
  • 関数の近似、または LUT を使用した Lookup Table ブロックの縮小 — 代わりに simulink-optimize-lookup-tables を使用します

公開 API

ConversionReport = DataTypeWorkflow.Single.convertToSingle(systemToConvert)
  • systemToConvert(char)— 読み込み済みモデルまたはサブシステムのブロックパス全体(例:'myModel' または 'myModel/Controller')。
  • ConversionReport(struct)— 互換性チェック、変換された項目、検証ステータス(以下のフィールド表を参照)。

実行例:openExample("fixedpoint/ConvertSystemToSinglePrecisionExample")

ルール
  1. load_system ではなく open_system(modelName) で開きます。変換前後のダイアグラムをユーザーが確認できるようにします。
  2. 自分で save_system を呼び出してはいけません。 保存すると倍精度のベースラインが失われ、意味のある再実行ができなくなります。モデルは未保存の変更がある状態のままにします。これは、ユーザーが「変更を確定して」「保存して」「最初から最後まで全部やって」と依頼した場合も同様です。これらの依頼は自動保存への同意ではありません。その場合は、自分ではモデルを保存しないこと、保存すると倍精度のベースラインが上書きされることを明確に伝え、ユーザー自身が確認するか save_system を実行するよう依頼します。保存についてユーザーが明示的に確認した場合に限り(単に「全部やって」という一般的な依頼は含みません)、保存します。
  3. 互換性チェックは convertToSingle の内部で実行されます。結果は report.CheckInfo から読み取ります(別途呼び出す関数ではありません)。
  4. 変換する前に、必ずユーザーの明示的な同意を得ます。モデルのパス、サブシステム、または範囲が曖昧な場合は、推測せずに質問します。 ユーザーがモデル名を挙げずに「自分のモデル」と言った場合は、どのモデルか尋ねます。作業ディレクトリ内で見つけた .slx をユーザーのモデルとして扱ってはいけません(サンプルやフィクスチャのファイルは、ユーザーが変換したいモデルではありません)。ユーザーがモデル名を指定してから変換を実行します。
  5. 変換後は必ず report.VerifyInfo.StowawayDblBlks を確認します。残存する迷い込んだ倍精度型がある場合、変換は未完了です。該当ブロックの型指定を倍精度に固定しない、Stateflow データを単精度に設定する、または SUD の範囲を広げるなどして、ソースで修正し、convertToSingle を再実行します。該当信号に single(...) キャストや Data Type Conversion ブロックを手作業で挿入するよう勧めてはいけません。それでは倍精度型を排除せず、隠してしまいます。
  6. レポートはローカル変数に代入します(report = ...;)。ベースワークスペースを汚したり、生の構造体をそのまま出力したりしないでください。

レポートの構造

このツールはチェック → 変換 → 検証を実行し、レポートに3つのサブ構造体を格納します。

report.CheckInfo
フィールド説明
ready論理値 — システムを変換できる場合は true です。この値が true の場合のみ ConvertInfo/VerifyInfo を読み取ってください。
errエラー情報(成功時は空)
IncompatibleBlksDataTypeWorkflow.Single.Result のセル配列 — 単精度に対応していないブロック(下記のブロック名に関する注記を参照)
UnsupportedBlksDataTypeWorkflow.Single.Result のセル配列 — 変換ツールでサポートされていないブロック(ErrorMsgs を含む)
DTLockedDblBlksデータ型が double にロックされたブロック(変換を妨げません)
StowawayDblBlksチェック中に見つかった double 演算を生成するブロック
TLSSettingsTarget Language Standard が C99 に更新されたモデル
DTOSettingsData Type Override がリセットされたシステム
SolverSettings可変ステップソルバーが固定ステップに変更されたモデル
configSettings更新された構成パラメーター(例:GenerateComments、ParameterPrecisionLossMsg)
memoryUse.BeforeValueパラメーターごとのメモリテーブル。変換前の RuntimeMemory(バイト)列

診断リストからブロック名を取得する方法。 IncompatibleBlks、UnsupportedBlks、StowawayDblBlks、DTLockedDblBlks は、ブロックパス文字列ではなく、DataTypeWorkflow.Single.Result オブジェクトのセル配列です。 各要素の ID から getDisplayName() を使って読み取り可能なブロックパスを取得してください。要素に対して get_param、getfullname、または string() を呼び出さないでください。「get_param の最初の入力は、'double'、'char'、または 'cell' 型である必要があります。」 というエラーが発生します。

for k = 1:numel(report.CheckInfo.IncompatibleBlks)
    r = report.CheckInfo.IncompatibleBlks{k};
    fprintf('  %s\n', r.ID.getDisplayName());   % e.g. 'myModel/Integrator'
    if ~isempty(r.ErrorMsgs)
        fprintf('    %s\n', strjoin(string(r.ErrorMsgs), '; '));
    end
end
report.ConvertInfo

コンバーターが実際に行った処理を記録します。

フィールド説明
ready論理値 — 変換ステップが正常に実行された場合は true です
errエラー情報。成功時は空([])です
resultsfxptds.BlockResult のセル配列 — double から single に変更されたブロック/信号
report.VerifyInfo
フィールド説明
StowawayDblBlks変換後も double 演算を生成しているブロック
memoryUse.AfterValueパラメーターごとのメモリテーブル。変換後の RuntimeMemory(バイト)列

チェックフェーズでは、Target Language Standard、Data Type Override、非互換ブロック、残存する double、データ型がロックされた double、ソルバー設定を検証し、そのうちいくつかを自動更新します。ツールは TLS→C99、DTO のクリーンアップ、ソルバーの変更を自動的に処理するため、手動で設定する必要はありません。 自動更新の動作、エラー識別子、エッジケースの詳細は、references/edge-cases.md を参照してください。

  • モデルが読み込まれていない/パスが無効(Simulink:Commands:InvSimulinkObjectName)、モデル更新の失敗(DataTypeWorkflow:Single:UpdateDiagramFailed)
  • 非互換ブロック(連続ブロック、MATLAB System ブロック)と、サポートされていない MATLAB Function ブロック(グローバル変数、MCOS クラス、Simulink 関数の呼び出し)
  • 自動更新(TLS、DTO、ソルバー、構成)、モデル参照のスコープ処理、冪等性、モデルを閉じる際のクリーンアップ

変換レポートの生成

convertToSingle の戻り後、生の構造体をそのまま出力せず、結果をユーザーにわかりやすい言葉で要約してください。追跡可能性を確保するため、使用した正確な API 呼び出しを先頭に記載してください。

必須の出力セクション、レポートが空の場合の代替処理、レポート作成の規則、および Embedded Coder の準備状況チェックのフォローアップについては、references/reporting-format.md を参照してください。


前提条件と制限事項

  • MATLAB、Simulink、および Fixed-Point Designer が必要です。モデルが読み込まれている必要があります。
  • 変換エンジンはシングルトンです。一度にアクティブにできる変換セッションは 1 つだけです。
  • 複雑なロジックを含む MATLAB Function ブロックやモデル参照については、個別の確認が必要になる場合があります。詳細は references/edge-cases.md を参照してください。

Copyright 2026 The MathWorks, Inc.


コメント