Main Content

Math Operations

hisl_0001: Abs ブロックの使用法

ID: タイトルhisl_0001: Abs ブロックの使用法
説明Abs ブロックの使用時に、生成コードのロバスト性をサポートするには以下に従ってください。
AAbs ブロックへの入力として Boolean データ型と符号なしデータ型を避ける。
Bブロック パラメーター [整数オーバーフローで飽和] を選択する。
メモ:

Abs ブロックは、Boolean データ型をサポートしていません。符号なし入力データ型を指定すると、生成されたコードの外で Abs ブロックが最適化され、その結果、生成コードまでトレースできないブロックになる可能性があります。

符号付きデータ型の場合、Simulink® は最小の負の絶対値を表現しません。[整数オーバーフローで飽和] を選択すると、データ型の絶対値は、表現可能な最大の正の数値まで飽和します。[整数オーバーフローで飽和] の選択を解除すると、シミュレーションでの絶対値の計算と生成コードに一貫性がなくなるか予期しないものになることがあります。

根拠Aトレース可能なコードの生成のサポート。
Bモデル シミュレーションと生成コードの一定の動作および予想される動作を実行する。
モデル アドバイザー チェック Check usage of Abs blocks (Simulink Check)
参考文献
  • IEC 61508-3, Table A.3 (3) 'Language subset'
    IEC 61508-3, Table A.4 (3) 'Defensive programming'
    IEC 61508-3, Table A.3 (2) 'Strongly typed programming language’
    IEC 61508-3, Table B.8 (3) 'Control Flow Analysis'

  • IEC 62304, 5.5.3 - Software Unit acceptance criteria

  • ISO 26262-6, Table 1 (1b) 'Use of language subsets'
    ISO 26262-6, Table 1 (1d) 'Use of defensive implementation techniques'
    ISO 26262-6, Table 7 (1f) 'Control flow analysis'

  • EN 50128, Table A.4 (11) 'Language Subset'
    EN 50128, Table A.3 (1) 'Defensive Programming'
    EN 50128, Table A.4 (8) 'Strongly Typed Programming Language'
    EN 50128, Table A.19 (3) 'Control Flow Analysis'

  • DO-331, Section MB.6.3.2.d 'Low-level requirements are verifiable'
    DO-331, Section MB.6.3.2.g – 'Algorithms are accurate'

  • MISRA C:2012, Dir 4.1

  • INT32-C. 符号付き整数演算がオーバーフローを引き起こさないことを保証する

最終更新R2021b

推奨

非推奨

hisl_0002: 残余演算および逆数演算の使用

ID: タイトルhisl_0002: 残余演算および逆数演算の使用
説明

除算後の残余演算 (rem) または逆数演算 (reciprocal) を含む Math Function ブロックの使用時に、生成コードのロバスト性をサポートするには以下に従ってください。

A

関数 reciprocal の入力がゼロになるのを防ぐ。

B

関数 rem の 2 つ目の入力がゼロになるのを防ぐ。

メモ:

ゼロ除算演算が生成される場合があります。その場合、関数 reciprocal の出力値は無限 (Inf) になり、関数 rem の出力値は不定値 (NaN) になります。オーバーフローまたは未定義の値になるのを避けるには、対応する入力がゼロになるのを防いでください。

根拠オーバーフローまたは未定義の値になるのを防ぐ
モデル アドバイザー チェックCheck usage of remainder and reciprocal operations (Simulink Check)
参考文献
  • IEC 61508-3, Table A.3 (3) 'Language subset’
    IEC 61508-3, Table A.4 (3) 'Defensive programming’

  • IEC 62304, 5.5.3 - Software Unit acceptance criteria

  • ISO 26262-6, Table 1(b) 'Use of language subsets'
    ISO 26262-6, Table 1(d) 'Use of defensive implementation techniques'

  • EN 50128, Table A.4 (11) 'Language Subset'
    EN 50128, Table A.3 (1) 'Defensive Programming'

  • DO-331, Section MB.6.3.2.g 'Algorithms are accurate'

  • MISRA C:2012, Dir 4.1

  • INT33-C. 除算および剰余演算がゼロ除算エラーを引き起こさないことを保証する

最終更新R2021b

次の例では、入力信号がゼロ近傍で振動している場合、出力値に大きな変化が見られます。値の大幅な変化を防ぐことが必要です。

hisl_0003: 平方根演算の使用

ID: タイトルhisl_0003: 平方根演算の使用
説明

Square Root 演算の使用時に、生成されたコードのロバスト性をサポートするには、以下のいずれかを行います。

A

複素数を出力として見なす。

B

入力が負の値になるのを防ぐ。

根拠生成されたコードの望ましくない結果を避ける。
モデル アドバイザー チェックCheck usage of square root operations (Simulink Check)
参考文献
  • IEC 61508-3, Table A.3 (3) 'Language subset’
    IEC 61508-3, Table A.4 (3) 'Defensive programming’

  • IEC 62304, 5.5.3 - Software Unit acceptance criteria

  • ISO 26262-6, Table 1(b) 'Use of language subsets'
    ISO 26262-6, Table 1(d) 'Use of defensive implementation techniques'

  • EN 50128, Table A.4 (11) 'Language Subset'
    EN 50128, Table A.3 (1) 'Defensive Programming'

  • DO-331, Section MB.6.3.2.g 'Algorithms are accurate'

  • MISRA C:2012, Dir 4.1

最終更新R2021b

hisl_0028: Reciprocal Square Root ブロックの使用

ID: タイトルhisl_0028: Reciprocal Square Root ブロックの使用
説明

Reciprocal Square Root ブロックの使用時に、生成されたコードのロバスト性をサポートするには、以下のいずれかを行います。

A

入力が負の値になるのを防ぐ。

B

入力がゼロになるのを防ぐ。

メモ:

ゼロ除算演算が生成される場合があります。その場合、逆関数の (Inf) の出力値が生成されます。オーバーフローまたは未定義の値になるのを避けるには、対応する入力がゼロになるのを防いでください。

根拠A、B生成されたコードの望ましくない結果を避ける。
モデル アドバイザー チェックCheck usage of Reciprocal Sqrt blocks (Simulink Check)
参考文献
  • IEC 61508-3, Table A.3 (3) 'Language subset’
    IEC 61508-3, Table A.4 (3) 'Defensive programming’

  • IEC 62304, 5.5.3 - Software Unit acceptance criteria

  • ISO 26262-6, Table 1(b) 'Use of language subsets'
    ISO 26262-6, Table 1(d) 'Use of defensive implementation techniques'

  • EN 50128, Table A.4 (11) 'Language Subset'
    EN 50128, Table A.3 (1) 'Defensive Programming'

  • DO-331, Section MB.6.3.2.g 'Algorithms are accurate'

  • MISRA C:2012, Dir 4.1

  • INT33-C. 除算および剰余演算がゼロ除算エラーを引き起こさないことを保証する

最終更新R2021b

hisl_0004: 自然対数演算と 10 を底とする対数演算の使用

ID: タイトルhisl_0004: 自然対数演算と 10 を底とする対数演算の使用
説明

自然対数 (log) や 10 を底とする対数 (log10) などの数学演算の使用時に、生成コードのロバスト性をサポートするには以下に従ってください。

A

入力が負の値になるのを防ぐ。

B

入力がゼロになるのを防ぐ。

C

複素数を出力値として見なす。

メモ:

出力データ型を複素数に設定した場合、自然対数関数と 10 を底とする対数関数は、負の入力値に対して複素数値を出力します。出力データ型を実数に設定すると、これらの関数は、負の数値には NAN を、ゼロの値には負の無限大 (-inf) を出力します。

根拠A、B、Cロバストなコードの生成のサポート。
モデル アドバイザー チェックCheck usage of log and log10 operations (Simulink Check)
参考文献
  • IEC 61508-3, Table A.3 (3) 'Language subset’
    IEC 61508-3, Table A.4 (3) 'Defensive programming’

  • IEC 62304, 5.5.3 - Software Unit acceptance criteria

  • ISO 26262-6, Table 1(b) 'Use of language subsets'
    ISO 26262-6, Table 1(d) 'Use of defensive implementation techniques'

  • EN 50128, Table A.4 (11) 'Language Subset'
    EN 50128, Table A.3 (1) 'Defensive Programming'

  • DO-331, Section MB.6.3.2.g 'Algorithms are accurate'

  • MISRA C:2012, Dir 4.1

  • INT33-C. 除算および剰余演算がゼロ除算エラーを引き起こさないことを保証する

最終更新R2021b

以下の保護が可能です。

  • Abs ブロックを使用することによる負の数値からの保護。

  • MinMax ブロックと Constant ブロックの組み合わせを使用することによるゼロ値からの保護。[定数値]eps (epsilon) に設定します。

以下の例では、-100100 の入力値に対する結果の出力を示しています。

hisl_0005: Product ブロックの使用方法

ID: タイトルhisl_0005: Product ブロックの使用方法
説明

Product ブロック パラメーター [乗算][行列 (*)] に設定されている場合に、約数入力が特異値入力行列になるのを防ぎます。

メモ

Product ブロックを使用して逆行列、または逆行列除算を計算する場合、特異行列による除算が発生することがあります。この除算により NaN が出力されます。オーバーフローを避けるには、約数入力が特異値入力行列になるのを防いでください。

根拠オーバーフローを防ぎ、生成コードのロバスト性をサポートします。
モデル アドバイザー チェックモデル アドバイザー チェックを使用して、このモデリング ガイドラインへの準拠を確認することはできません。
参考文献
  • IEC 61508-3, Table A.3 (3) 'Language subset’
    IEC 61508-3, Table A.4 (3) 'Defensive programming’

  • IEC 62304, 5.5.3 - Software Unit acceptance criteria

  • ISO 26262-6, Table 1 (1b) 'Use of language subsets'
    ISO 26262-6, Table 1 (1d) 'Use of defensive implementation techniques'

  • EN 50128, Table A.4 (11) 'Language Subset'
    EN 50128, Table A.3 (1) 'Defensive Programming'

  • DO-331, Section MB.6.3.2.g 'Algorithms are accurate

  • MISRA C:2012, Dir 4.1

前提条件hisl_0314: [コンフィギュレーション パラメーター]、[診断]、[データ有効性]、[信号]
最終更新R2021a

hisl_0029: Assignment ブロックの使用方法

ID: タイトルhisl_0029: Assignment ブロックの使用方法
説明

Assignment ブロックの使用時に、生成されたコードのロバスト性をサポートするには、最初に使用する前に配列フィールドを初期化します。

メモ:

Assignment ブロックの出力ベクトルがブロックへの入力で初期化されていない場合は、ベクトルの要素が生成コードで初期化されない可能性があります。

1 回のシミュレーション タイム ステップの間に Assignment ブロックを反復して使用し、すべての配列フィールドを割り当てる場合は、ブロックへの初期化入力は必要ありません。

初期化されていないブロック出力の要素にアクセスすると、予期しない動作が発生する可能性があります。

根拠生成されたコードの望ましくない結果を避ける。
モデル アドバイザー チェックCheck usage of Assignment blocks (Simulink Check)
参考文献
  • IEC 61508-3, Table A.3 (3) 'Language subset’
    IEC 61508-3, Table A.4 (3) 'Defensive programming’
    IEC 61508-3, Table A.3 (2) ‘Strongly typed programming language’

  • IEC 62304, 5.5.3 - Software Unit acceptance criteria

  • ISO 26262–6, Table 1(b) 'Use of language subsets'
    ISO 26262–6, Table 1(d) 'Use of defensive implementation techniques'

  • EN 50128, Table A.4 (11) 'Language Subset'
    EN 50128, Table A.3 (1) 'Defensive Programming'
    EN 50128, Table A.4 (8) 'Strongly Typed Programming Language'

  • DO-331, Section MB.6.3.2.g – 'Algorithms are accurate'

  • MISRA C:2012, Rule 9.1

  • EXP33-C. 初期化されていないメモリからの読み込みを行わない

最終更新R2021b

非推奨: ブロックを反復して使用しない場合に初期化入力 Y0 なし


推奨: ブロックを反復して使用しない場合に初期化入力 Y0 あり


推奨: ブロックを反復して使用する場合に配列フィールドを初期化

hisl_0066: Gain ブロックの使用方法

ID: タイトルhisl_0066: Gain ブロックの使用方法
説明生成されたコードのトレーサビリティをサポートするためには、Gain ブロックの値を 1 に関連付けてはなりません。
メモ

コード生成プロセスは、最適化中に 1 と等しいゲイン値を削除し、追跡可能なコードをもたないモデル要素を得ることができます。

非自動ストレージ クラスをもつ名前付きパラメーターのデータ オブジェクトに対するゲイン値の設定は、このルールに対する例外です。

根拠追跡可能なコードの生成をサポートする。
モデル アドバイザー チェックCheck usage of Gain blocks (Simulink Check)
参考文献
  • DO-331, Section MB 6.3.2.b 'Low-level requirements are accurate and consistent'

  • IEC 61508-3, Table A.3 (3) 'Language subset'
    IEC 61508-3, Table A.4 (3) 'Defensive programming'
    IEC 61508-3, Table B.8 (3) 'Control Flow Analysis'

  • IEC 62304, 5.5.3 - Software Unit acceptance criteria

  • ISO 26262-6, Table 1 (1b) 'Use of language subsets'
    ISO 26262-6, Table 1 (1d) 'Use of defensive implementation techniques'
    ISO 26262-6, Table 7 (1f) 'Control flow analysis'

  • EN 50128, Table A.4 (11) 'Language Subset'
    EN 50128, Table A.3 (1) 'Defensive Programming'
    EN 50128, Table A.19 (3) 'Control Flow Analysis'

最終更新R2018a

hisl_0067: ゼロ除算の計算を回避

ID: タイトルhisl_0067: ゼロ除算の計算を回避
説明生成コードのロバスト性をサポートするため、除算演算を行うときに、除数がゼロになるのを防ぎます。
メモ

ゼロ除算が不可能であることを証明するため、モデルの静的解析を実行します。

ゼロ除算が可能である場合は、以下のいずれかを実装します。1 つを超えるオプションを使用すると、冗長保護演算になる可能性があります。

  • ゼロ除算モデル アドバイザー チェックを実行する

  • コード置換ライブラリ (CRL) を使用するようコード生成プロセスを変更する

  • 整数ベースの演算の場合は、コンフィギュレーション パラメーター [除算演算の例外処理を防止するコードを削除] (Embedded Coder) をクリアする

CRL を使用するか、コンフィギュレーション パラメーター [除算演算の例外処理を防止するコードを削除] (Embedded Coder) をクリアすると、除算演算がゼロ除算演算から保護されます。ただし、このアクションによって追加の計算およびメモリのオーバーヘッドが発生するうえ、到達不能コードが生じる可能性もあります。

根拠生成されるコードのコード準拠性を高める
モデル アドバイザー チェックCheck for divide-by-zero calculations (Simulink Check)
参考文献
  • IEC 61508-3, Table A.3 (3) 'Language subset’

    IEC 61508-3, Table A.4 (3) 'Defensive programming’

  • IEC 62304, 5.5.3 - Software Unit acceptance criteria

  • ISO 26262-6, Table 1(b) 'Use of language subsets'

    ISO 26262-6, Table 1(d) 'Use of defensive implementation techniques'

  • EN 50128, Table A.4 (11) 'Language Subset'

    EN 50128, Table A.3 (1) 'Defensive Programming'

  • DO-331, Section MB.6.3.2.g 'Algorithms are accurate'

  • MISRA C:2012, Dir 4.1

参考
最終更新R2021a

不正解

除算演算にはゼロ除算シナリオとなる可能性があります。

Divide-by-zero exists in model example.

正解

ゼロ除算チェックをモデル化するグラフィカル関数。

Correct example of modeling to prevent divide-by-zero.