Posts Tagged with "failure rate"

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

前稿の続きです。このFTについて、Solve⇒Cut setを実施し、MCSを図946.1のように取得しました。

図%%.1
図946.1 改善アーキテクチャのFT

前のアーキテクチャから比べてちょうどTop 1が抜けた形となっています。これにより最も大きな残余故障はメインマイコンであり、サブマイコンによる故障検出だけでなく、ECCやクロックモニタ等の別の故障検出手段を追加して全体のPMHFを下げることが可能です。

このようにMCSはどこが弱いかが一目瞭然であるため、弱い部分から手当することにより効率的なアーキテクチャの改善やSMの追加が可能です。

なお、本稿はRAMS 2026に投稿予定のため一部を秘匿していますが、論文公開後の2026年2月頃に開示予定です。


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

posted by sakurai on February 6, 2025 #943

ChatGPTに前稿のRBDを読ませたところ、次のMARDを取得しました。

TEST.BED

*Saphire 8.2.9
TEST =
* Name , Descriptions , Project
APS_SENSOR , APS sensor (1FIT) , TEST
TPS_SENSOR , TPS sensor (1FIT) , TEST
FCAN_LINE , FCAN line (10FIT) , TEST
MAIN_MCU , Main MCU (200FIT) , TEST
MOTOR_DRV , Motor driver (10FIT) , TEST
MOTOR , Motor (0FIT) , TEST
THROTTLE , Throttle (0FIT) , TEST
DRIVER_DIAG , Driver DIAG (1FIT) , TEST
SUB_MCU , Sub MCU (150FIT) , TEST
RELAY_DRV , Relay driver (10FIT) , TEST
RELAY , Relay (0FIT) , TEST
COV_REM , SM leftover (1-DC=10%) , TEST
COV_90 , SM coverage (DC=90%) , TEST

TEST.BEI

*Saphire 8.2.9
TEST =
* Name ,FdT,UdC,UdT,UdValue, Prob, Lambda, Tau, Mission, Init,PF,UdValue2,Calc. Prob,Freq,Analysis Type,Phase Type,Project
APS_SENSOR ,3, , , , ,1.0E-009, ,1.0E+004, , , ,1.0E-005, ,RANDOM,CD,TEST
TPS_SENSOR ,3, , , , ,1.0E-009, ,1.0E+004, , , ,1.0E-005, ,RANDOM,CD,TEST
FCAN_LINE ,3, , , , ,1.0E-008, ,1.0E+004, , , ,1.0E-004, ,RANDOM,CD,TEST
MAIN_MCU ,3, , , , ,2.0E-007, ,1.0E+004, , , ,2.0E-003, ,RANDOM,CD,TEST
MOTOR_DRV ,3, , , , ,1.0E-008, ,1.0E+004, , , ,1.0E-004, ,RANDOM,CD,TEST
MOTOR ,1, , , ,0.0E+000, , , , , , ,0.0E+000, ,RANDOM,CD,TEST
THROTTLE ,1, , , ,0.0E+000, , , , , , ,0.0E+000, ,RANDOM,CD,TEST
DRIVER_DIAG,3, , , , ,1.0E-009, ,1.0E+004, , , ,1.0E-005, ,RANDOM,CD,TEST
SUB_MCU ,3, , , , ,1.5E-007, ,1.0E+004, , , ,1.5E-003, ,RANDOM,CD,TEST
RELAY_DRV ,3, , , , ,1.0E-008, ,1.0E+004, , , ,1.0E-004, ,RANDOM,CD,TEST
RELAY ,1, , , ,0.0E+000, , , , , , ,0.0E+000, ,RANDOM,CD,TEST
COV_REM ,1, , , ,1.0E-001, , , , , , ,1.0E-001, ,RANDOM,CD,TEST
COV_90 ,1, , , ,9.0E-001, , , , , , ,9.0E-001, ,RANDOM,CD,TEST

TEST.FTD

TEST =
* Name , Description, SubTree, Alternate, Project
TOP , TEST , , , TEST

TEST.FTL

*Saphire 8.2.9
TEST, TOP =
TOP AND IF_FAIL SM_FAIL
IF_FAIL OR APS_SENSOR TPS_SENSOR FCAN_LINE MAIN_MCU MOTOR_DRV MOTOR THROTTLE
SM_FAIL OR COV_REM SM_PATH
SM_PATH AND COV_90 SM_EXPAND
SM_EXPAND OR DETECT_FAIL CONTROL_FAIL
DETECT_FAIL AND LANE_APS LANE_TPS LANE_DIAG LANE_SUB
LANE_APS OR APS_SENSOR MAIN_MCU
LANE_TPS OR TPS_SENSOR MAIN_MCU
LANE_DIAG OR DRIVER_DIAG MAIN_MCU
LANE_SUB OR SUB_MCU
CONTROL_FAIL OR BLOCK_PAR RELAY_DRV RELAY
BLOCK_PAR AND MAIN_MCU SUB_MCU

TEST.GTD

*Saphire 8.2.9
TEST=
* Name , Description, Project
TOP , TEST , ,TEST
IF_FAIL , IF fail , ,TEST
SM_FAIL , SM fail , ,TEST
SM_PATH , SM coverage path , ,TEST
SM_EXPAND , SM expanded , ,TEST
DETECT_FAIL , detection fail , ,TEST
LANE_APS , lane APS , ,TEST
LANE_TPS , lane TPS , ,TEST
LANE_DIAG , lane DIAG , ,TEST
LANE_SUB , lane SUB , ,TEST
CONTROL_FAIL , control fail , ,TEST
BLOCK_PAR , parallel block , ,TEST

これらをSaphireに取り込んだところ、図943.1のようなFTが自動生成されました。

$$\img[-1.35em]{/images/withinseminar.png}$$

なお、本稿はRAMS 2026に投稿予定のため一部を秘匿していますが、論文公開後の2026年2月頃に開示予定です。


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

posted by sakurai on February 5, 2025 #942

さてMCSを取ることにより、このアーキテクチャの欠点が見えてきました。

図%%.1
図942.1 MCSのTop 3

積項No.1とNo.2の論理和を取れば、 $$ \mathtt{MAIN\_MCU}\cdot \mathtt{COV\_90}+\mathtt{MAIN\_MCU}\cdot \mathtt{COV\_REM}\\=\mathtt{MAIN\_MCU}\cdot \mathtt{COV\_90}+\mathtt{MAIN\_MCU}\cdot\overline{\mathtt{COV\_90}}\\=\mathtt{MAIN\_MCU} $$

積項No.1とNo.2の割合を加えれば89.04+9.89=99.29。このように、約99%以上のPMHFがメインマイコンとなっており、その理由は先の通りメインマイコンがIFパスとSMパスに存在するため、単一故障で両方のパス共に故障するためです。

これを避けるため、サブマイコンがメインマイコンの故障を検出したらいきなりリレーをオフするようにパスを変更します。

$$\img[-1.35em]{/images/withinseminar.png}$$

図942.2 修正後のアーキテクチャ

なお、本稿はRAMS 2026に投稿予定のため一部を秘匿していますが、論文公開後の2026年2月頃に開示予定です。


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

Fault treeの自動生成 (24)

posted by sakurai on January 31, 2025 #941

特にSMのパスの論理が分かりにくいので解説します。図941.1は前稿の図940.1のうちSM部を抜き出した図です。

$$\img[-1.35em]{/images/withinseminar.png}$$

図941.1 SM部のRBD

図で見るように、SM部前半の検出手段は次の4つが存在します。

  • APSの情報を受けTPSからのズレをメインマイコンが故障検出
  • TPSの情報を受けAPSからのズレをメインマイコンが故障検出
  • DRIVER_DIAGの故障診断をメインマイコンが故障検出
  • サブマイコンによるメインマイコンの故障検出

RBDで書くとこのように、EGASシステムはいずれの故障が検出されてもORされ、リレーによりモータ電源が遮断される安全なシステムであると言えます。

一方FTでは動作ではなく故障を伝えるので、論理が反転となりORはANDになります。 RBDにおいては動作を

「いずれか一つの故障が検出されたら、モータ電源が遮断される」

と書き、FTでは

「全ての故障が起きた場合のみ、モータ電源が遮断されない」

と故障を書くわけです。つまりSMの動作ではなく、SMの故障について考えなければなりません。従って、図941.2のように、全ての故障検出のAND関係となります。

図%%.2
図941.2 SM検出部のFT

ただしSM部後半の手段のほうはこれと異なり、メインマイコンからリレードライバ経由でリレーが直列になっているため、メインマイコンかリレードライバのいずれかの故障でモータ電源が遮断されないOR関係となります。

結果として、SM部の前半のANDと後半のORを組み合わせると図941.3のようになります。これも手で構成したのではなく、ChatGPT により自動生成されたものです。 $$\img[-1.35em]{/images/withinseminar.png}$$ なお、本稿はRAMS 2026に投稿予定のため一部を秘匿していますが、論文公開後の2026年2月頃に開示予定です。


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

Fault treeの自動生成 (23)

posted by sakurai on January 30, 2025 #940

図940.1にSaphireで取得したMCSを示します。

図%%.1
図940.1 生成されたFTのMCS

Saphireで生成したcut setの表に対してPMHFの欄を追加し、かつ故障率の項を黄色で塗っています。#7~10のように黄色行が2段になっている積項はDPFを表します。万一DPF項が大きければ2nd SMの効果も加えなければなりませんが、割合の欄がいずれも0.01%未満なことからわかるように、DPFが全体に占める割合は非常に小さいことが多く、通常は2nd SMの効果は不要です。今後はこのような単項で0.01%未満の積項はMCS表から省略します。

さて、このMCSを分析します。

#1, #2の論理式を加えて見ると、次のようにMAIN_MCUはSMにより全く保護されていないことがわかります。

$$ \mathtt{MAIN\_MCU}\cdot \mathtt{COV\_90}+\mathtt{MAIN\_MCU}\cdot \mathtt{COV\_REM}\\=\mathtt{MAIN\_MCU}\cdot \mathtt{COV\_90}+\mathtt{MAIN\_MCU}\cdot\overline{\mathtt{COV\_90}}\\=\mathtt{MAIN\_MCU} $$

#1はSMが故障しているため保護されない場合であり、#2はSMが動作していても保護されない場合です。いずれにしてもSMにより保護されていません。

#2は通常のSMの動作であるものの、#1はIFとSMの両方のパスが故障しているので、これはいわゆるCCFでSMの効果を無効にします。

ちなみにこれは論理圧縮であるため、Saphireで実施しても良さそうですが、やってくれません。$\mathtt{COV\_90}$と$\mathtt{COV\_REM}$は$\mathtt{DC}$と$\mathtt{1-DC}$の関係にあるのですが、それぞれのイベントが無関係だからかと思い、$\mathtt{COV\_90}$と$\overline{\mathtt{COV\_90}}$にしても同じでした。

図940.2に#1のパストレース図を示します。

$$\img[-1.35em]{/images/withinseminar.png}$$

図940.2 MAIN_MCUからのパストレース#1

図940.3に#2のパストレース図を示します。

$$\img[-1.35em]{/images/withinseminar.png}$$

図940.3 MAIN_MCUからのパストレース#2

なお、本稿はRAMS 2026に投稿予定のため一部を秘匿していますが、論文公開後の2026年2月頃に開示予定です。


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

Fault treeの自動生成 (22)

posted by sakurai on January 29, 2025 #939

一連のスレッドですがタイトルは以前の記事から引き継いでいます。

それではEGASアーキテクチャのブロック図を図939.1に示すので、MARDを提供して下さい。

$$\img[-1.35em]{/images/withinseminar.png}$$

図939.1 RBD

図939.1を読み取ったChatGPTの生成したMARDファイルを以下に示します。

TEST.BED

*Saphire 8.2.9
TEST =
* Name , Descriptions , Project
APS_SENSOR , APS sensor (1FIT) , TEST
TPS_SENSOR , TPS sensor (1FIT) , TEST
FCAN_LINE , FCAN line (10FIT) , TEST
MAIN_MCU , Main MCU (200FIT) , TEST
MOTOR_DRV , Motor driver (10FIT) , TEST
DRIVER_DIAG , Driver DIAG (1FIT) , TEST
SUB_MCU , Sub MCU (150FIT) , TEST
RELAY_DRV , Relay driver (10FIT) , TEST
COV_REM , SM leftover (1-DC=10%) , TEST
COV_90 , SM coverage (DC=90%) , TEST

TEST.BEI

*Saphire 8.2.9
TEST =
* Name ,FdT,UdC,UdT,UdValue, Prob, Lambda, Tau, Mission, Init,PF,UdValue2,Calc. Prob,Freq,Analysis Type,Phase Type,Project
APS_SENSOR ,3, , , , ,1.0E-009, ,1.0E+004, , , ,1.0E-005, ,RANDOM,CD,TEST
TPS_SENSOR ,3, , , , ,1.0E-009, ,1.0E+004, , , ,1.0E-005, ,RANDOM,CD,TEST
FCAN_LINE ,3, , , , ,1.0E-008, ,1.0E+004, , , ,1.0E-004, ,RANDOM,CD,TEST
MAIN_MCU ,3, , , , ,2.0E-007, ,1.0E+004, , , ,2.0E-003, ,RANDOM,CD,TEST
MOTOR_DRV ,3, , , , ,1.0E-008, ,1.0E+004, , , ,1.0E-004, ,RANDOM,CD,TEST
DRIVER_DIAG ,3, , , , ,1.0E-009, ,1.0E+004, , , ,1.0E-005, ,RANDOM,CD,TEST
SUB_MCU ,3, , , , ,1.5E-007, ,1.0E+004, , , ,1.5E-003, ,RANDOM,CD,TEST
RELAY_DRV ,3, , , , ,1.0E-008, ,1.0E+004, , , ,1.0E-004, ,RANDOM,CD,TEST
COV_REM ,1, , , ,1.0E-001, , , , , , ,1.0E-001, ,RANDOM,CD,TEST
COV_90 ,1, , , ,9.0E-001, , , , , , ,9.0E-001, ,RANDOM,CD,TEST

TEST.FTD

TEST =
* Name , Description, SubTree, Alternate, Project
TOP , TEST , , , TEST

TEST.FTL

TEST, TOP =
TOP AND IF_FAIL SM_FAIL
IF_FAIL OR APS_SENSOR TPS_SENSOR FCAN_LINE MAIN_MCU MOTOR_DRV SM_FAIL OR COV_REM SM_PATH SM_PATH AND COV_90 SM_EXPAND SM_EXPAND OR DETECT_FAIL CTRL_FAIL DETECT_FAIL AND APS_SENSOR TPS_SENSOR DRIVER_DIAG SUB_MCU CTRL_FAIL OR MAIN_MCU RELAY_DRV

TEST.GTD

TEST=
* Name , Description, Project
TOP , TEST , ,TEST
IF_FAIL , IF fail , ,TEST
SM_FAIL , SM fail , ,TEST
SM_PATH , coverage path , ,TEST
SM_EXPAND , SM expand , ,TEST
DETECT_FAIL , detection fail , ,TEST
CTRL_FAIL , control fail , ,TEST

図939.2にこれらのMARDをSpahireにロードし生成したFTを示します。

$$\img[-1.35em]{/images/withinseminar.png}$$

図939.2 生成されたFT

なお、本稿はRAMS 2026に投稿予定のため一部を秘匿していますが、論文公開後の2026年2月頃に開示予定です。


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

Fault treeの自動生成 (21)

posted by sakurai on January 20, 2025 #932

次に、IFやSMを単一エレメントではなく複数エレメントのグループとします。これは実際には基本形のFTに対してIFやSMの部分はBEではなくサブツリーが配置されるため、その処理を行わせるためのAIに対する学習となります。

図%%.1
図932.1 RBD

図932.1を読み取ったChatGPTの生成したMARDファイルを以下に示します。

TEST.BED

*Saphire 8.2.9
TEST =
* Name , Descriptions , Project
A , A fault (20FIT) , TEST
B , B fault (40FIT) , TEST
D , D fault (5FIT) , TEST
E , E fault (10FIT) , TEST
SM_IF_COVREM , SM_IF coverage leftover (1-DC=40%) , TEST
SM_IF_COV , SM_IF coverage (DC=60%) , TEST

TEST.BEI

*Saphire 8.2.9
TEST =
* Name ,FdT,UdC,UdT,UdValue, Prob, Lambda, Tau, Mission, Init,PF,UdValue2,Calc. Prob,Freq,Analysis Type,Phase Type,Project
A ,3, , , , ,2.0E-008, ,1.0E+005, , , ,2.0E-003, ,RANDOM,CD,TEST
B ,3, , , , ,4.0E-008, ,1.0E+005, , , ,4.0E-003, ,RANDOM,CD,TEST
D ,3, , , , ,5.0E-009, ,1.0E+005, , , ,5.0E-004, ,RANDOM,CD,TEST
E ,3, , , , ,1.0E-008, ,1.0E+005, , , ,1.0E-003, ,RANDOM,CD,TEST
SM_IF_COVREM ,1, , , ,4.0E-001, , , , , , ,4.0E-001, ,RANDOM,CD,TEST
SM_IF_COV ,1, , , ,6.0E-001, , , , , , ,6.0E-001, ,RANDOM,CD,TEST

TEST.FTD

TEST =
* Name , Description, SubTree, Alternate, Project
TOP , TEST , , , TEST

TEST.FTL

TEST, TOP =
TOP AND IF SM_IF
IF OR A B
SM_IF OR SM_IF_COVREM DPF
DPF AND SM_IF_COV SM_IF_GROUP
SM_IF_GROUP OR D E

TEST.GTD

TEST=
* Name , Description, Project
TOP , TEST , ,TEST
IF , IF Subtree , ,TEST
SM_IF , SM_IF , ,TEST
DPF , DPF , ,TEST
SM_IF_GROUP , SM_IF Subtree , ,TEST

図932.2にこれらのMARDをSpahireにロードし生成したFTを示します。

$$\img[-1.35em]{/images/withinseminar.png}$$

図932.2 生成されたFT

図932.3にSaphireで取得したMCSを示します。

図%%.3
図932.3 生成されたFTのMCS

Saphireで生成したcut setの表に対してPMHFの欄を追加し、かつ故障率の項を黄色で塗っています。これによりSPF/RFかDPFかが容易に理解されます。

なお、本稿はRAMS 2026に投稿予定のため一部を秘匿していますが、論文公開後の2026年2月頃に開示予定です。


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

Fault treeの自動生成 (20)

posted by sakurai on January 17, 2025 #931

前稿のExcelの整形マクロはChatGPTにより作成して貰ったものですが、備忘のため貼り付けておきます。

Option Explicit

Sub SampleMacro_Final()

    Dim ws As Worksheet
    Set ws = ActiveSheet  ' カレントシート

    '----------------------------------------------------------------------
    ' (A) まず、B列削除「前」のシートで C列(5行目以降)の最終行を求める
    '     ここをレコードの最終行とする。
    '----------------------------------------------------------------------
    Dim lastRow As Long
    With ws
        ' C列の最下行から上に向かい、最初に値(数値)がある行
        lastRow = .Cells(.Rows.Count, "C").End(xlUp).Row
    End With

    If lastRow < 5 Then
        MsgBox "C列の5行目以降にデータがありません。処理を中断します。"
        Exit Sub
    End If

    '----------------------------------------------------------------------
    ' (1) A6:A(lastRow) を数値化
    '----------------------------------------------------------------------
    With ws.Range("A6:A" & lastRow)
        .NumberFormat = "General"
        .Value = .Value
    End With

    '----------------------------------------------------------------------
    ' (2) B列を削除
    '----------------------------------------------------------------------
    ws.Columns("B").Delete

    '----------------------------------------------------------------------
    ' (3) B5:B(lastRow) → 旧C列 の内容を数値化
    '----------------------------------------------------------------------
    With ws.Range("B5:B" & lastRow)
        .NumberFormat = "General"
        .Value = .Value
    End With

    '----------------------------------------------------------------------
    ' (4) C5:C(lastRow) → 旧D列 の内容を数値化
    '----------------------------------------------------------------------
    With ws.Range("C5:C" & lastRow)
        .NumberFormat = "General"
        .Value = .Value
    End With

    '----------------------------------------------------------------------
    ' (5) グリッド線のチェックを外す
    '----------------------------------------------------------------------
    ActiveWindow.DisplayGridlines = False

    '----------------------------------------------------------------------
    ' (6) A4:F4 に罫線 & グレー15% & 中央揃え、見出し "PMHF[FIT]" を F4 に
    '----------------------------------------------------------------------
    With ws.Range("A4:F4")
        .Borders.LineStyle = xlContinuous
        .Borders.Weight = xlThin
        .Borders(xlInsideVertical).LineStyle = xlContinuous
        .Borders(xlInsideVertical).Weight = xlThin
        .Borders(xlInsideHorizontal).LineStyle = xlContinuous
        .Borders(xlInsideHorizontal).Weight = xlThin
        .Interior.ColorIndex = 15
        .HorizontalAlignment = xlCenter
    End With
    ws.Range("F4").Value = "PMHF[FIT]"

    '----------------------------------------------------------------------
    ' (7) A5:F5 を罫線(背景は標準)、揃えはあとでまとめる
    '----------------------------------------------------------------------
    With ws.Range("A5:F5")
        .Borders.LineStyle = xlContinuous
        .Borders.Weight = xlThin
        .Borders(xlInsideVertical).LineStyle = xlContinuous
        .Borders(xlInsideVertical).Weight = xlThin
        .Borders(xlInsideHorizontal).LineStyle = xlContinuous
        .Borders(xlInsideHorizontal).Weight = xlThin
    End With

    '----------------------------------------------------------------------
    ' A列が "total" or 数値 → F列に =B列/1E4*1E9 (小数点1桁表示)
    ' 対象は 行5~lastRow
    '----------------------------------------------------------------------
    Dim r As Long
    Dim valA As Variant
    For r = 5 To lastRow
        valA = ws.Range("A" & r).Value
        If LCase(valA) = "total" Or (IsNumeric(valA) And Not IsEmpty(valA)) Then
            ws.Range("F" & r).Formula = "=B" & r & "/1E4*1E9"
            ws.Range("F" & r).NumberFormat = "0.0"
        End If
    Next r

    '----------------------------------------------------------------------
    ' (8)~(10) グループごとに "外枠のみ" 罫線 → 行6~lastRow
    '----------------------------------------------------------------------
    Dim i As Long, j As Long
    Dim dataA As Variant, dataD As Variant
    Dim foundRow As Long

    i = 6
    Do While i <= lastRow
        dataA = ws.Range("A" & i).Value
        dataD = ws.Range("D" & i).Value  ' 旧E列→新D列など列シフトに注意

        ' 終了条件: AもDも空 or i>lastRow
        If (IsEmpty(dataA) Or dataA = "") And (IsEmpty(dataD) Or dataD = "") Then
            Exit Do
        End If

        foundRow = 0
        For j = i + 1 To lastRow + 1
            If j > lastRow Then
                ' 見つからず最後まで到達 → グループをラスト行までで終える
                foundRow = lastRow + 1
                Exit For
            End If

            Dim tmpA As Variant, tmpD As Variant
            tmpA = ws.Range("A" & j).Value
            tmpD = ws.Range("D" & j).Value

            If (IsEmpty(tmpA) Or tmpA = "") And (IsEmpty(tmpD) Or tmpD = "") Then
                foundRow = j
                Exit For
            End If
            If (IsNumeric(tmpA) And Not IsEmpty(tmpA)) Or (IsEmpty(tmpD) Or tmpD = "") Then
                foundRow = j
                Exit For
            End If
        Next j

        If foundRow = 0 Then
            Exit Do
        End If

        ' グループ外枠のみ罫線
        Call SetOuterBorders(ws.Range(ws.Cells(i, "A"), ws.Cells(foundRow - 1, "F")))

        i = foundRow
    Loop

    '----------------------------------------------------------------------
    ' (11)~(15) 相当: A6:F(lastRow) に最終的な罫線(外枠+縦罫線)
    '----------------------------------------------------------------------
    Call SetOuterBorders(ws.Range("A6:F" & lastRow))
    Call SetInsideVerticalBorders(ws.Range("A6:F" & lastRow))

    '----------------------------------------------------------------------
    ' D1結合対策(任意)
    '----------------------------------------------------------------------
    ws.Range("D1").MergeArea.ClearContents
    With ws.Range("A1:E1")
        .Merge
        .HorizontalAlignment = xlLeft
    End With

    '----------------------------------------------------------------------
    ' ★ E列の色付け
    '   A列が "total" or 数値 → 色なし
    '   A列がその他(空含む) → E列末尾が FIT/% なら色なし、その他はオレンジ
    '   E列が空なら色なし
    '----------------------------------------------------------------------
    Dim valE As Variant
    Dim strA As String, strE As String
    
    For r = 5 To lastRow

        valA = ws.Range("A" & r).Value
        ' A列を文字列化&Trim
        strA = Replace(Replace(Replace(CStr(valA), vbCr, ""), vbLf, ""), " ", "")
        strA = Trim(strA)
        
        ' A列が "total" or 数値(1,2,3...) → E列は色なし
        If LCase(strA) = "total" Or (IsNumeric(strA) And strA <> "") Then
            ws.Range("E" & r).Interior.ColorIndex = xlNone
        
        Else
            ' A列が空やその他 → E列の末尾チェック
            valE = ws.Range("E" & r).Value
            strE = Replace(Replace(Replace(CStr(valE), vbCr, ""), vbLf, ""), " ", "")
            strE = Replace(strE, Chr(160), "")  ' ノーブレークスペースも除去
            strE = Trim(strE)
            
            Dim chkE As String
            chkE = LCase(strE)
            
            ' 末尾が ")" なら削除(必要なら)
            If Right(chkE, 1) = ")" Then
                chkE = Left(chkE, Len(chkE) - 1)
            End If
            
            ' E列が空
            If chkE = "" Then
                ws.Range("E" & r).Interior.ColorIndex = xlNone
                
            ' FIT で終わる
            ElseIf Right(chkE, 3) = "fit" Then
                ws.Range("E" & r).Interior.ColorIndex = 6
            
            ' %  で終わる
            ElseIf Right(chkE, 1) = "%" Then
                ws.Range("E" & r).Interior.ColorIndex = xlNone
            
            ' その他 → オレンジ
            Else
                ws.Range("E" & r).Interior.ColorIndex = 45
            End If
            
        End If
    Next r
    
    '----------------------------------------------------------------------
    ' 列オートフィット & 横位置
    '    (A,B,C,F→右揃え / D,E→左揃え) を最終行まで
    '----------------------------------------------------------------------
    ws.Range("A4:F" & lastRow).Columns.AutoFit
    
    With ws.Range("A5:A" & lastRow): .HorizontalAlignment = xlRight: End With
    With ws.Range("B5:B" & lastRow): .HorizontalAlignment = xlRight: End With
    With ws.Range("C5:C" & lastRow): .HorizontalAlignment = xlRight: End With
    With ws.Range("D5:D" & lastRow): .HorizontalAlignment = xlLeft:  End With
    With ws.Range("E5:E" & lastRow): .HorizontalAlignment = xlLeft:  End With
    With ws.Range("F5:F" & lastRow): .HorizontalAlignment = xlRight: End With

    MsgBox "処理が完了しました。最終行は " & lastRow

End Sub


'------------------------------------------------------------------------------
' 外枠だけ罫線を付ける
'------------------------------------------------------------------------------
Private Sub SetOuterBorders(rng As Range)
    With rng
        With .Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .Weight = xlThin
        End With
        With .Borders(xlEdgeTop)
            .LineStyle = xlContinuous
            .Weight = xlThin
        End With
        With .Borders(xlEdgeRight)
            .LineStyle = xlContinuous
            .Weight = xlThin
        End With
        With .Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .Weight = xlThin
        End With
    End With
End Sub

'------------------------------------------------------------------------------
' 縦の内側線だけ
'------------------------------------------------------------------------------
Private Sub SetInsideVerticalBorders(rng As Range)
    With rng.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlThin
    End With
End Sub

ChatGPT の回答は必ずしも正しいとは限りません。重要な情報は確認するようにしてください。

なお、本稿はRAMS 2026に投稿予定のため一部を秘匿していますが、論文公開後の2026年2月頃に開示予定です。


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

Fault treeの自動生成 (19)

posted by sakurai on January 16, 2025 #930

ChatGPTにRBDを示してFTを生成させます。まず基本形のRBDを図930.1に示します。

図%%.1
図930.1 RBD

ここでは2nd SMは省略しています。その理由はワーストケース評価を行いたいためです。冗長系ではRFがほとんど存在しないため、2nd SMの効果が大きく見えてきますが、このような非冗長系においては1st SMの効果であるRFが支配的であり、経験からはRFは95%以上となる場合が多いと考えます。

図930.1を読み取ったChatGPTの生成したMARDファイルを以下に示します。

TEST.BED

*Saphire 8.2.9
TEST =
* Name , Descriptions , Project
IF_FAULT , IF fault(10FIT) , TEST
SM_FAULT , SM_IF fault(20FIT) , TEST
SM_IF_COVREM , SM_IF coverage leftover(1-DC=10%) , TEST
SM_IF_COV , SM_IF coverage(DC=90%) , TEST

TEST.BEI

*Saphire 8.2.9
TEST =
* Name ,FdT,UdC,UdT,UdValue, Prob, Lambda, Tau, Mission, Init,PF,UdValue2,Calc. Prob,Freq,Analysis Type,Phase Type,Project
IF_FAULT ,3, , , , ,1.0E-008, ,1.0E+005, , , ,1.0E-003, ,RANDOM,CD,TEST
SM_FAULT ,3, , , , ,2.0E-008, ,1.0E+005, , , ,2.0E-003, ,RANDOM,CD,TEST
SM_IF_COVREM ,1, , , ,1.0E-001, , , , , , ,1.0E-001, ,RANDOM,CD,TEST
SM_IF_COV ,1, , , ,9.0E-001, , , , , , ,9.0E-001, ,RANDOM,CD,TEST

TEST.FTD

TEST =
* Name , Description, SubTree, Alternate, Project
TOP , TEST , , , TEST

TEST.FTL

TEST, TOP =
TOP AND IF_FAULT SM_IF
SM_IF OR SM_IF_COVREM DPF
DPF AND SM_IF_COV SM_FAULT

TEST.GTD

TEST=
* Name , Description, Project
TOP , TEST , ,TEST
SM_IF , SM_IF gate , ,TEST
DPF , coverage partial path , ,TEST

図930.2にこれらのMARDをSpahireにロードし生成したFTを示します。

$$\img[-1.35em]{/images/withinseminar.png}$$

比較のために前記事に掲載した基本形のFT図$\dagger$を示します。

図%%.3
図929.1 生成されたFT

図930.3にSaphireで取得したMCSを示します。予想どおりRFが98%以上であり、DPFは2%未満となりました。

図%%.3
図930.3 生成されたFTのMCS

Saphireで生成したcut setの表に対してPMHFの欄を追加し、かつ故障率の項を黄色で塗っています。これによりSPF/RFかDPFかが容易に理解されます。

なお、本稿はRAMS 2026に投稿予定のため一部を秘匿していますが、論文公開後の2026年2月頃に開示予定です。


$\dagger$ S. Atsushi, "A Framework for Performing Quantitative Fault Tree Analyses for Subsystems with Periodic Repairs," 2021 Annual Reliability and Maintainability Symposium (RAMS), Orlando, FL, USA, 2021, pp. 1-6.


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

Fault treeの自動生成 (18)

posted by sakurai on January 15, 2025 #929

Fault Treeの構成

PMHF式に準拠してFault Tree (FT)を構成します。まず基礎となるFTは図929.1のとおりです。このFT構成法は弊社の$\dagger$過去論文に依るものです。これは後で示すPMHF式を再現するように構成しています。

図%%.1
図929.1 FTの構成

次に対応するPMHF式を示します。前記FTの構成法にはMethod 1, 2, 3と3種あり、それぞれ以下のような特徴があります。

  • Method 1: 2nd SMが無いものとする。もっとも単純なツリーであり、真値よりもPMHFは大となるため、初期にワーストケースを見るのに都合が良い。 $$ M_\text{PMHF}=(1-K_\text{IF,RF})\lambda_\text{IF}+K_\text{IF,RF}\lambda_\text{IF}\lambda_\text{SM} $$
  • Method 2: 2nd SMのカバレージ$K_\text{SM,MPF}$の効果を加えたもの。ただし、真値よりも次のMethod 3で加わる効果が入っていない分だけPMHFが小さく算出されることが問題。ただしこの誤差は$K_\text{SM,MPF}$が小さい時または$\tau$が小さい時は無視できる。 $$ M_\text{PMHF}=(1-K_\text{IF,RF})\lambda_\text{IF}+K_\text{IF,RF}\lambda_\text{IF}\lambda_\text{SM}\color{red}{\left((1-K_\text{SM,MPF})T_\text{lifetime}\right)} $$
  • Method 3: Method 2の効果に加えて、2nd SMの定期検査周期間$\tau$内の不検出効果を加える。PMHFとしては真値であるが、加えた不検出効果は、$K_\text{SM,MPF}$が小さい時または$\tau$が小さい時は無視できる。 $$ M_\text{PMHF}=(1-K_\text{IF,RF})\lambda_\text{IF}+K_\text{IF,RF}\lambda_\text{IF}\lambda_\text{SM}\left((1-K_\text{SM,MPF})T_\text{lifetime}\color{red}{+K_\text{SM,MPF}\tau}\right) $$

Method 3の係数の効果を3Dグラフに表すと図929.2のような形になります。

$$\img[-1.35em]{/images/withinseminar.png}$$

記事#927で述べたように、$K_\text{MPF}$が小さいか$\tau$が小さい場合にはこの効果は無視できます。

なお、本稿はRAMS 2026に投稿予定のため一部を秘匿していますが、論文公開後の2026年2月頃に開示予定です。


$\dagger$ S. Atsushi, "A Framework for Performing Quantitative Fault Tree Analyses for Subsystems with Periodic Repairs," 2021 Annual Reliability and Maintainability Symposium (RAMS), Orlando, FL, USA, 2021, pp. 1-6.


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


ページ: