Posts Tagged with "ISO 26262"

既に発行済みのブログであっても適宜修正・追加することがあります。
We may make changes and additions to blogs already published.

PMHF式関連論文Rogova2019 (3)

posted by sakurai on April 11, 2024 #774

仮定のまとめ

本論文$\dagger$はその中程に、置いた4つの仮定をまとめてリストしています。

(i) すべての危険故障の故障率は,λD である(IEC 61508 の概念では DD と DU を区別せず,ISO 26262 の概念では SPF,RF,DPF 及び MPF を区別しない)
(ii) PFH 公式におけるプルーフテスト間隔$\tau$は、PMHF 公式における運転寿命間隔 $T_{Lifetime}$と等価である
(iii) システムは修理不可能である
(iv) チャネルが同一で独立している

これはいずれも誤りです。一項目ずつ見ていきます。

  • IEC 61508はいざ知らず、ISO 26262においてはSPF, RFとは区別せず、DPF, MPFも区別せずで良いですが、それら2グループには明確な区別があります。言うまでもなく故障によるVSG確率が全く異なるため、それを考慮しなければなりません。具体的にはDPFは2重故障を意味するため、故障確率の2乗項が出現します。
  • 「PMHF式では$\tau=T_{lifetime}$として良い」と言っていますが、前稿で指摘したようにこれは誤りで、ISO 26262にもプルーフテストというか定期検査修理は存在するため、テスト周期は$\tau$となり、車両寿命ではありません。反対にこう仮定すると、2nd SMの存在が無いことになります。規格書では2nd SMの存在がブロック図に書かれているにも関わらず、それが無視されています。
  • ISO 26262で対象とするサブシステムは修理可能です。Part 10のPMHF式の箇所に、ドライバーがMPFを通知され、修理工場へ持ち込む表現があります。もちろんMPFを検出するのが2nd SMです。
  • チャネルは前項のように、独立であっても同一ではありません。「冗長」は必ずしも対称冗長を意味しません。

以上から、論文途中の仮定リストの全点が誤っている(=ISO 26262非互換である)ため、ここから先の検討は不要となります。


$\dagger$E. Rogova, C. Nowak, M. Ramold, et al., "Comparison of Analytical Formulas of PFH and PMHF Calculation for M-out-of-N Redundancy Architecture," Europ. Safe. Reliab. Conf.,, pp.1-5, 2019


左矢前のブログ 次のブログ右矢

PMHF式関連論文Rogova2019 (2)

posted by sakurai on April 10, 2024 #773

不当な仮定1

正しく引用されたことは良かったのですが、本論文$\dagger$では弊社の式に対して新たに以下の(12)という仮定を加えており、残念なことにこれでは一般性を失う不要な仮定です。

$$ \lambda_{m,MPF}=\lambda_{sm,MPF}=\lambda_{MPF}=\lambda_{D}\tag{12} $$

この(12)の意味するところは"m"も"sm"も同じ故障率を持つこと、すなわち対称冗長を意味しており、これは特殊な場合に限られます。

反例を示すと、例えば過去記事の図70.1に示すヘッドライト装置の実例のように、

図70.1
図70.1 非対称冗長の例

メカスイッチからのON信号をメインのチャネルではマイコンで点灯し、バックアップチャネルではトランジスタで点灯するような非対称冗長には(12)は当てはまりません。以下のように"m"系の故障率のほうが"sm"系よりも巨大になるためです。 $$ \lambda_{m,MPF}\gg\lambda_{sm,MPF} $$ さらに言えば、このような非対称冗長は、特にASIL分解においては、規格ではむしろ推奨されています。マイコンに低いASILを割り当てておき、複雑なシステムの開発を容易にできる一方、壊れにくい単純なトランジスタで元の安全要求を保証できるためです。

不当な仮定2

さらに別の仮定の問題があります。弊社の式における2nd SMの検査周期である$\tau$について、$\tau=T_{lifetime}$と仮定してしまったことです。これは2nd SMが存在しないか、あるいはDCがゼロであることを意味します。これは誤った仮定です。

なぜそうしたかはその箇所には書かれていませんが、アンリペアラブルという仮定を置いているのが後からわかります。


$\dagger$E. Rogova, C. Nowak, M. Ramold, et al., "Comparison of Analytical Formulas of PFH and PMHF Calculation for M-out-of-N Redundancy Architecture," Europ. Safe. Reliab. Conf.,, pp.1-5, 2019


左矢前のブログ 次のブログ右矢

PMHF式関連論文Rogova2019

posted by sakurai on April 9, 2024 #772

M-out-of-N冗長アーキテクチャにおいて、PFHとPMHFを比較するという大変興味深い論文$\dagger$をたまたま見つけたので読んでいきます。弊社の論文が引用されていたにも関わらず最近まで知りませんでした。

アブストラクト

例によって、DeepLで翻訳しながら見ていきます。まずアブストラクトから。

道路運送車両の国際機能安全規格ISO 26262は、ランダムなハードウェア故障が安全目標に違反する確率を定量的に推定する方法として、ランダムなハードウェア故障に対する確率的指標(PMHF)を用いることを提案している。PMHFの計算例はISO 26262に示されている。しかし、この規格にはM-out-of-Nの冗長アーキテクチャに対するPMHFの計算公式は含まれていない。 この公式は、冗長性の問題と冗長アーキテクチャの確率論的メトリクスの計算が特に関連するドライブ・バイ・ワイヤ・システムにおいて重要な応用を見出すことができる。

本論文では、M-out-of-N冗長アーキテクチャのPMHF計算公式を開発し、国際機能安全規格IEC 61508で定義されている高需要モードと連続需要モードの安全システムの平均危険故障頻度(PFH)公式と比較した。本論文で示す比較分析により、PFH公式とPMHF公式が異なるケーススタディに対して同様の結果を与えることが実証された。これらのケーススタディは、IEC 61508とISO 26262で定義されているさまざまなタイプの故障を考慮して調査されている。

アブストラクトに示すように、IEC 61508で定義されているPFDとPFHと、ISO 26262で定義されているPMHFを比較し、さらにMooN冗長サブシステムへの式の拡張を行ったものです。

弊社論文

弊社でも2018年以前にISO 26262のPMHFを実際のプロジェクトに適用した経験があり、さらにそのサブシステムが冗長構成であったので、PMHFの適用には悩みました。というのは2011年に発行された規格初版において、規格PMHF式は冗長に対応していなかったためです。そこで、弊社は2017年に冗長構成に対応したPMHF式の拡張を提案する論文を発表しましたが、本論文にはきちんと弊社論文が引用されています。

異なるチャネルを持つ2チャネル冗長アーキテクチャのPMHF公式は桜井によって得られている(桜井, 2018)。非同一チャネルを持つMooN冗長アーキテクチャのための一般化されたPMHF公式は非常に複雑になる。式(13)は非同一チャネルを持つ2チャネル冗長アーキテクチャのPMHF公式を示す。桜井は、一次安全機構(冗長ミッション機能を果たす)に加えて、二次安全機構(潜在的欠陥の防止)も考慮している(桜井, 2018)。本節では、桜井が開発した公式を、"M "と "SM "の二次安全機構を持たないことを念頭に、図2bに示したケーススタディに適用する:
$$ PMHF^{1oo2}=\frac{1}{2}\lambda_{m,MPF}\lambda_{sm,MPF}T_{lifetime}+\frac{1}{2}\lambda_{m,MPF}\lambda_{sm,MPF}T_{lifetime}\tag{13} $$ 式(12)で示されるように、同一チャネルの故障率は等しいことを考慮すると、式(13)は、同一チャネルを持つ1oo2アーキテクチャのPMHFの値を示す式(14)に変換できる: $$ PMHF^{1oo2}=\lambda_D^2T_{lifetime}\tag{14} $$


$\dagger$E. Rogova, C. Nowak, M. Ramold, et al., "Comparison of Analytical Formulas of PFH and PMHF Calculation for M-out-of-N Redundancy Architecture," Europ. Safe. Reliab. Conf.,, pp.1-5, 2019


左矢前のブログ 次のブログ右矢

PMHF式の誤り

posted by sakurai on April 8, 2024 #771

Youtubeで「ISO 26262 Hardware Safety Metrics Youtube」と検索して出てきた動画にもPMHF式の誤りがありました。

図%%.1
図771.1 PMHF式の説明

PMHF式は本来確率式をベースにしていますが、この説明においても、シングルポイント確率とマルチプルポイント確率を同列に扱って、単に故障率として加算しています。マルチプルポイント確率は桁違いに小さいので同列に扱ってはいけません

2014年の論文「Assessing automotive functional safety microprocessor with ISO 26262 hardware requirements」が初出らしく、これを引用した全ての資料が誤りの連鎖を起こしています。以下の図326.1は過去記事の図です。

図326.1
図326.1 上記論文中のPMHF式

これは動画(図771.1)と同じ式ですが、既に記事#324, #325, #326, #523で指摘しているとおり誤りです。

動画(図771.1)の右下の計算もおかしく、$\lambda_\text{SPF/RF}$よりも$\lambda_\text{MPF,latent}$のほうが大きくなっていますが、実際にはこのようなことは起こりえません。一般には前者が支配的となります。論文を確認したところ、図771.2に示すように論文の表7そのままでした。

図%%.2
図771.2 論文Table 7

規格Part 10にPMHF式が掲載されているにも関わらず、ほとんどの論文やこのような教育資料でその式が無視され、どこかの論文の式が孫引きされているのは不思議なことです。


左矢前のブログ 次のブログ右矢

3月の検索結果

posted by sakurai on April 5, 2024 #770

弊社コンテンツの3月の検索結果です。

表770.1 上昇率上位のページ(前月との比較)
タイトル クリック数
ASILデコンポジション +99
機能安全用語集 +25
レイテントフォールトの奥深さ +22

表770.2 パフォーマンス上位のページ
タイトル クリック数
機能安全用語集 153
1st Editionと2nd Editionとの相違点 (Part 10) 138
ASILデコンポジション 115

表770.3 上昇率上位のクエリ
クエリ クリック数
SPFM +8
WINCUPL +7
ASIL decomposition +7

表770.4 パフォーマンス上位のクエリ
クエリ クリック数
FTTI 49
SPFM 36
PMHF 30


左矢前のブログ 次のブログ右矢

新方式によるPUDの導出 (2)

posted by sakurai on April 2, 2024 #767

論文に掲載したPUDのグラフ(前項に掲載)を描画するプログラムを貼付します。コメントを含めほとんど全てをChatGPTが作成しました。

    import numpy as np
    import matplotlib.pyplot as plt
    from functools import lru_cache
    
    plt.rcParams['font.family'] = 'serif'
    plt.rcParams['mathtext.rm'] = 'Times New Roman'
    plt.rcParams['mathtext.fontset'] = 'cm'
    
    # パラメータ設定
    lambdaVal = 0.1  # 故障率
    tau = 2  # 点検期間
    K = 0.5  # 修復率
    epsilon = 0.00001  # 不連続点の直前を示すために使用する小さい値
    
    def R(t):
        """信頼度関数"""
        return np.exp(-lambdaVal * t)
    
    def F(t):
        """故障関数"""
        return 1 - R(t)
    
    def f(t):
        """密度関数"""
        return lambdaVal * R(t)
    
    @lru_cache(maxsize=None)
    def Q_n(t, n):
        """Q_nの再帰関数。結果をキャッシュする。"""
        if n == 0:
            return F(t)
        else:
            tau_n = n * tau
            tau_n_minus_1 = (n - 1) * tau
            return 
    
    @lru_cache(maxsize=None)
    def q_n(t, n):
        """q_nの再帰関数。結果をキャッシュする。"""
        if n == 0:
            return f(t)
        else:
            tau_n = n * tau
            tau_n_minus_1 = (n - 1) * tau
            return 
        
    def q_approx(t):
        """tにおけるq(t)の近似値を計算する関数"""
        u = t % tau
        return (1 - K) * f(t) + K * f(u)
    
    # グラフ描画
    fontsize_axes_label = 24 * 1.8
    fontsize_ticks = 16 * 1.8
    fontsize_legend = 24 * 1.8
    
    plt.figure(figsize=(18, 11))
    #軸(spines)の線幅を太くする
    ax=plt.gca()#現在の軸を取得
    spine_width=2#軸の線幅
    for spine in ax.spines.values():
        spine.set_linewidth(spine_width)
        
    # 凡例用のダミープロット
    plt.plot([], [], '-', label=f'$q_{{\\text{{exact}},n}}(t)$ for $\\lambda = {lambdaVal}$', color='black')
    plt.plot([], [], '--', label=f'$q_{{\\text{{approx}}}}(t)$ for $\\lambda = {lambdaVal}$', color='black')
    
    # 不連続性を示すために各区間を個別にプロット
    for i in range(10):
        start = i * tau
        end = (i + 1) * tau -epsilon # epsilonを削除
        t_range_segment = np.linspace(start, end, 500)  # endの計算からepsilonを除去
        q_exact_segment_values = [q_n(t, i) for t in t_range_segment]
        q_approx_segment_values = [q_approx(t) for t in t_range_segment]
        
        # グラフ描画
        plt.plot(t_range_segment, q_exact_segment_values, 'k-', lw=2.5)
        plt.plot(t_range_segment, q_approx_segment_values, 'k--', lw=2.5)
        plt.plot(end, q_n(end, i), 'o', mfc='white', mec='black', mew=2, markersize=8)  # q_nの終点
        plt.plot(end, q_approx(end), 'o', mfc='white', mec='black', mew=2, markersize=8)  # q_approxの終点
        if (i > 0):
            # 不連続点で白丸を追加
            plt.plot(start, q_n(start, i), 'o', mfc='white', mec='black', mew=2, markersize=8)  # 区間の開始点
            plt.plot(start, q_approx(start), 'o', mfc='white', mec='black', mew=2, markersize=8)  # q_approxの開始点
    
    plt.xlabel('Time (t)', fontsize=fontsize_axes_label)
    plt.ylabel('$q(t)$', fontsize=fontsize_axes_label)
    plt.xticks(np.arange(0, 11*tau, tau), fontsize=fontsize_ticks)
    plt.yticks(fontsize=fontsize_ticks)
    legend = plt.legend(fontsize=fontsize_legend)
    for handle in legend.legendHandles:
        handle.set_linewidth(2.5)  # ここで線の太さを指定
    plt.grid(True, color='gray', linestyle='-', linewidth=1.4)
    plt.xlim(0,10*tau)
    plt.subplots_adjust(left=0.15, bottom=0.14) 
    plt.show()

なお、本稿はRAMS 2025に投稿予定のため一部を秘匿しています。


左矢前のブログ 次のブログ右矢

新方式によるPUDの導出

posted by sakurai on April 1, 2024 #766

過去記事のPUAのグラフの続きです。

過去記事において、新方式$\dagger$による正確なPUA(758.4)である$Q_{\text{exact},n}(t)$を導出しましたが、本稿では正確なPUDである$q_{\text{exact},n}(t)$を導出します。これは $$ q_{\text{exact},n}(t)=\frac{dQ_{\text{exact},n}(t)}{dt} $$ であるため、過去記事におけるPUA(758.4)を時間微分するだけです(ただし、微分不可能な時刻$t=i\tau, i=1, 2, 3...$を除く)。従って、正確なPUDは、 $$ q_{\text{exact},n}(t)=f(t)+\img[-1.35em]{/images/withinseminar.png},\\ t\notin \{i\tau; i=1, 2, 3,...,n\},\ n=\lfloor t/\tau\rfloor\ge1\tag{766.1} $$ 一方、近似PUDは、同様に近似PUA(759.2)である$Q_\text{approx}(t)$を時間微分して、 $$ q_\text{approx}(t)=\frac{dQ_\text{approx}(t)}{dt}=(1-K_\text{MPF})f(t)+K_\text{MPF}f(u),\\ \ u=t\bmod\tau,\ t\notin \{i\tau; i=1, 2, 3,...,n\},\ n=\lfloor t/\tau\rfloor\tag{766.2} $$

正確なPUD及び近似PUDのグラフの$\lambda=0.1$、$0.01$、$0.001$の3例をChatGPTに書かせてみます。

図%%.1
図766.1 $q_{\text{exact},n}(t)$と$q_\text{approx}(t), \lambda=0.1$のグラフ

図%%.2
図766.2 $q_{\text{exact},n}(t)$と$q_\text{approx}(t), \lambda=0.01$のグラフ

図%%.3
図766.3 $q_{\text{exact},n}(t)$と$q_\text{approx}(t), \lambda=0.001$のグラフ

PUDもPUAと同様に$\lambda$が小さければカーブは直線に近づき、誤差が少なくなります。

なお、本稿はRAMS 2025に投稿予定のため一部を秘匿しています。


$\dagger$2nd SMのDCである$K_\text{MPF}$を条件付き確率と変更する方式


左矢前のブログ 次のブログ右矢

新方式によるPUAの導出 (8)

posted by sakurai on March 26, 2024 #762

ChatGPTにより $Q_{\text{exact},n}(t)$と$Q_\text{approx}(t)$のグラフ作成プログラムを作成してもらいました。そのリストを示します。

import numpy as np
import matplotlib.pyplot as plt
from functools import lru_cache

plt.rcParams['font.family'] = 'serif'
plt.rcParams['mathtext.rm'] = 'Times New Roman'
plt.rcParams['mathtext.fontset'] = 'cm'

# パラメータ設定
lambdaVal = 0.1  # 故障率
tau = 2    # 点検期間
K = 0.5    # 修復率
epsilon = 0.00001  # 不連続点の直前を示すために使用する小さい値

# 関数定義
def R(t):
    """信頼度関数"""
    return np.exp(-lambdaVal * t)

def F(t):
    """故障関数"""
    return 1 - R(t)

@lru_cache(maxsize=None)
def Q_n(t, n):
    """Q_nの再帰関数。結果をキャッシュする。"""
    if n == 0:
        return F(t)
    else:
        return 

def Q_approx(t):
    """tにおけるQ(t)の近似値を計算する関数"""
    u = t % tau
    return (1 - K) * F(t) + K * F(u)

# グラフ描画
fontsize_axes_label = 24 * 1.8
fontsize_ticks = 16 * 1.8
fontsize_legend = 24 * 1.8

plt.figure(figsize=(18, 11))
# 軸(spines)の線幅を太くする
ax = plt.gca()  # 現在の軸を取得
spine_width = 2  # 軸の線幅
for spine in ax.spines.values():
    spine.set_linewidth(spine_width)
    
# 凡例用のダミープロット
plt.plot([], [], '-', label=f'$Q_{{\\text{{exact}},n}}(t)$ for $\\lambda = {lambdaVal}$', color='black')
plt.plot([], [], '--', label=f'$Q_{{\\text{{approx}}}}(t)$ for $\\lambda = {lambdaVal}$', color='black')

# 不連続性を示すために各区間を個別にプロット
for i in range(10):
    start = i * tau
    end = (i + 1) * tau -epsilon # epsilonを削除
    t_vals = np.linspace(start, end, 200)
    Q_exact_vals = [Q_n(t, i) for t in t_vals[:-1]]  # 区間の最後の点を除外してプロット
    Q_approx_vals = [Q_approx(t) for t in t_vals[:-1]]
    
    plt.plot(t_vals[:-1], Q_exact_vals, 'k-', lw=2.5)
    plt.plot(t_vals[:-1], Q_approx_vals, 'k--', lw=2.5)

    # 区間の終わりに白丸をプロット
    plt.plot(end, Q_n(end, i), 'o', mfc='white', mec='black', mew=2, markersize=8)
    plt.plot(end, Q_approx(end), 'o', mfc='white', mec='black', mew=2, markersize=8)

plt.xlabel('Time (t)', fontsize=fontsize_axes_label)
plt.ylabel('$Q(t)$', fontsize=fontsize_axes_label)
plt.xticks(np.arange(0, 11*tau, tau), fontsize=fontsize_ticks)
plt.yticks(fontsize=fontsize_ticks)
legend = plt.legend(fontsize=fontsize_legend)
for handle in legend.legendHandles:
    handle.set_linewidth(2.5)  # ここで線の太さを指定    
plt.grid(True, color='gray', linestyle='-', linewidth=1.4)
plt.ylim(bottom=0)
plt.xlim(0,10*tau)
plt.subplots_adjust(left=0.14, bottom=0.14) 
plt.show()

図762.1に実行結果を示します。これは論文に掲載したグラフの一部です。

図%%.1
図762.1 $Q_{\text{exact},n}(t)$と$Q_\text{approx}(t), \lambda=0.1$のグラフ

図%%.2
図762.2 $Q_{\text{exact},n}(t)$と$Q_\text{approx}(t), \lambda=0.01$のグラフ

図%%.3
図762.3 $Q_{\text{exact},n}(t)$と$Q_\text{approx}(t), \lambda=0.001$のグラフ

なお、

に掲載しています。さらに、

に続きます。

なお、本稿はRAMS 2025に投稿予定のため一部を秘匿しています。


左矢前のブログ 次のブログ右矢

新方式によるPUAの導出 (7)

posted by sakurai on March 25, 2024 #761

前項までで、正確な$Q_{\text{exact},n}(t)$と近似の$Q_\text{approx}(t)$が求められたので、誤差評価を行います。パラメータは$\lambda=100FIT$、$T_\text{lifetime}=$10万時間、$K=0.5$、$\tau=$1か月とします。すると、$T_\text{lifetime}=1.0\times10^5[H]$、$\tau=730[H]$であり、 $$ Q_n(t)=F(t)-\img[-1.35em]{/images/withinseminar.png}\ n=\lfloor t/\tau\rfloor\ge1\tag{761.1} $$ これより、正確な車両寿命での不稼働確率は、 $$ Q_{\text{exact},136}(T_\text{lifetime})=0.005023250473883639 $$

一方近似式では、 $$ Q_\text{approx}(t)=(1-K_\text{MPF})F(t)+K_\text{MPF}F(u),\ u=\bmod\tau\tag{761.2} $$ これより、 $$ Q_\text{approx}(T_\text{lifetime})=0.005011081829447039 $$

両方の値から誤差は車両寿命において相対誤差は、 $$ \frac{Q_{\text{exact},136}(T_\text{lifetime})-Q_\text{approx}(T_\text{lifetime})}{Q_\text{approx}(T_\text{lifetime})}=\frac{0.005023250473883639-0.005011081829447039}{0.005023250473883639}\\=\img[-1.35em]{/images/withinseminar.png}[\%] $$ と計算され、PMHFの計算上では問題にならないレベルだと判明しました。

ちなみに、前項のChatGPTの作成したグラフ描画ソフトのパラメータを上記のパラメータに置き換え、グラフを車両寿命まで作成しました。次にChatGPTにプログラムを渡して、グラフは不要だからPUAの車両寿命における値を$Q_\text{exact}$と$Q_\text{approx}$の2つを求めて、誤差評価をしてと依頼したところ、修正されたプログラムにより上記の値が算出できました。

ChatGPTにプログラムを書いてもらうのはかなり実施して来ましたが、プログラムを渡してこんな風に改造してというのは新しい試みです。なぜなら、他人のプログラムの改造は人間は嫌がるからです。機械は嫌がらずに素直に実行すると言うのは新しい経験でした。

なお、本稿はRAMS 2025に投稿予定のため一部を秘匿しています。


左矢前のブログ 次のブログ右矢

posted by sakurai on March 22, 2024 #760

論文のアブストラクトをAJEに提出しましたが、「全体感が見たいので全体を出してくれ」とのご要望で、原稿全体を提出しました。前回までは冠詞の誤り等の文法ミスの修正が中心で、せいぜいが「意味が同じか確認してくれ」というメッセージ付きで文章を修正してきたことはありました。

ところが今回はVIPコースを選択したためか「この間に話題を繋げるような短い段落があると良い」「パラメータを選択した理由があると理解しやすい」「結論はまとめではないから、新規性のあることを書くべきである」等の内容に踏み込んだ示唆を貰い、大変にありがたく感じています。

図%%.1
図760.1 一旦完成した論文6ページの原稿

原稿全体は修正中ですが、一旦アブストラクトを投稿し、No.9のIDを受領しました。後は6月初旬の採択通知を待つのみです。

表760.1 RAMS 2025へのマイルストーン
期限 マイルストーン 状態
2024/5/3 アブストラクト投稿締め切り(システム入力) 投稿済
2024/6/10 アブストラクト採択結果
2024/8/1 論文、プレゼン投稿締め切り(名前、所属無し版)
2024/9/1 第1回論文、プレゼン資料査読コメント受領
2024/10/9 改訂版論文、プレゼン投稿締め切り(名前、所属無し版)
2024/10/22 最終査読コメント受領
2024/10/10 学会出席登録締め切り
2024/10/10 最終論文、プレゼン投稿締め切り(名前、所属有り版)


左矢前のブログ 次のブログ右矢


ページ: