1

問題

およそ 20 ~ 25 の異なるサブシステムで構成された、かなり大規模な油圧空気圧システム モデルがあります。各サブシステムは、デジタル ロジック、エッジ遅延ブロック、および外部出力ポート (実際の出力) へのゲートウェイで構成されます。さらに、小さなビルディング ブロックの一部は、費用対効果を最大化するために S-Function としてインポートされたレガシー C コードです。各サブシステム モデルは、基本的なブロックセットを使用して SIMULINK で設計されています。つまり、アドオンの商用ブロックセット (航空宇宙、simscape、simMechanics など) は使用されていません。

主な問題は、SIMULINK でのモデルのテストに関する十分な知識がないことです。Mathworks がテストと検証用に提供する特注の単体テスト フレームワークがあることは知っています。問題は、これが私のドメインにどのように関連するのかよくわからないことです. さらに、私のサブシステムはそれ自体が非常に複雑であり、それぞれの単体テストは悪夢です。しかし、入力と出力を使用したブラックボックス テストが唯一の方法である場合は、それで問題ありません。喜んでそれを受け入れます。

私の質問は、SIMULINK で大規模で複雑なシステムをテストすることに関するものですが、私の目的は、過去にそれを行ったことがあり、将来も多くのことを行う経験豊富な SIMULINK ユーザーから提案を得ることです。以前に SIMULINK で単体テストを行ったことがありますが、これらのテストはすべて、正しい設計の近くにさえありませんでした。

どんな助けでも大歓迎です!!

@PHILGODDARD のコメント以降の更新

上記で言い忘れていましたが、私は HIL と PIL に精通しています。ただし、これらは、ターゲットのリアルタイム プラットフォームをループ テストに使用できる場合にのみ有効です。誰かがソフト リアルタイム テストを行いたい場合はどうすればよいでしょうか?

Mathworks の大規模システム テスト ウェビナーを 1 日か 2 日で完了するのを待っています。願わくば、それを通じてより良い回答/提案を得ることができますか?

@AM304 のコメント以降の更新

コンテキストをもう少し明確にするために、物理的なデバイスを使用せずに、相互作用するすべてのシステムをソフトウェアでモデル化しています。つまり、ソフトウェアですべてのシステムをモデル化およびシミュレーションし、出力をオペレータ/インストラクター端末に表示します。電気、空調、油圧空気圧システムが連携して動作していますが、ソフトウェアでモデル化しています。したがって、シミュレーションを行うと、すべての必要な信号がソフトウェア モデルの動作から生成され、実際のハードウェア/物理デバイスはこれらの動作出力の提供に関与しません。

4

3 に答える 3

0

C コードと Simulink モデルは、TPT を使用してテストできます。テストの開発とテストの評価に違いはありませんが、テストの実行環境に違いはありません。C コードをテストする場合、C コードが Simulink のいわゆる S-Function として Simulink に組み込まれている、いわゆる SiL モードで C コードをテストするかどうかを決定できます。S-Function の生成は、コード ジェネレーターに依存する m-scripts によって自動的に行うことができます。

Simulink Coder では、次の MATLAB コマンドを使用して SiL を強制できます。

set_param(<testFrameName>,'RTWSystemTargetFile','rtwsfcn.tlc');
set_param(<testFrameName>,'RTWTemplateMakefile','rtwsfcn_default_tmf');
rtwbuild(<subsystem to be tested>); 

TargetLink の場合、スクリプトは TargetLink コマンド「tl_built_host」および「tl_set_sim_mode」を使用します。

tl_build_host('Model', <testFrameName>, 'TlSubsystems', <subsystem to be tested>);
tl_set_sim_mode('Model', <testFrameName>, 'TlSubsystems', <subsystem to be tested>, 'SimMode', 'TL_CODE_HOST');

TPT では、代わりに Simulink を必要としない他の 2 つの方法で C コードをテストできますが、手動のプログラミングとコンパイルが必要です。

最初の選択肢は、いわゆる EXE プラットフォームを使用することです。ここでは、テスト ハーネスが C コードで構築され、ユーザーが独自のコンパイラによってコンパイルされます。テスト ハーネスの生成は、TPT の EXE プラットフォーム構成ダイアログでサポートされています。

2 番目の選択肢は、協調シミュレーション環境である、いわゆる FUSION プラットフォームです。FUSION はオープン アーキテクチャであり、ユーザーは明確に定義され文書化された API を使用して、テスト対象の C コードで独自のシステムを適応させることができます。C コードと API は、FUISON プラットフォームで単一のノードとして、または他のノードと一緒にシミュレートできる、いわゆるノードを形成します。それにもかかわらず、自動コード生成の場合、ほとんどのユーザーは Simulink で MiL および SiL テストを使用します。これは、MiL と SiL 間のバックツーバック回帰テストを含めて完全に自動化できるためです。

モデルではなく C コードをテストする必要があるのはなぜですか? その理由は、ほとんどの機能開発は浮動小数点表記で行われ、ターゲット ECU への実装は固定小数点表記で行われるためです。スケーリングと固定点計算のプロセスは、コード生成中に行われる少なくとも TargetLink の場合です。したがって、浮動小数点 (MiL) の結果を固定小数点の実装 (SiL) と比較する必要があります。これは、経験から、スケーリングによって多くのエラーが発生するためです。

ステートメントまたは条件のカバレッジが 100% の場合、TPT には TASMO という機能があります。TASMO は、Simulink または TargetLink モデルのカバレッジを最大限に満たすために、テスト ケースを自動的に生成しようとします。アルゴリズムは最適化に基づいており、検索ベースです。テスト ケースの自動生成は、機能テスト ケースを置き換えるものではないことに注意してください。カバレッジの目標は、CTC++、V&V ツールボックス、または独自のカバレッジ測定をもたらす TargetLink などのコード カバレッジ ツールを使用して確認できます。カバレッジの結果を見ることで、ユーザーは自分で死角を刺激する方法を決定し、デッド コードを特定できます。

私は TPT 開発者の 1 人です。TPTの詳細については、当社の Web サイトをご覧ください。

于 2015-03-23T12:32:59.923 に答える