feat: Safety Goals + Drive-Away-Assist + vollst. Traceability
Validate / build-test (macos-latest) (push) Failing after 4s
Validate / build-test (windows-latest) (push) Failing after 17s
Validate / build-test (ubuntu-latest) (push) Successful in 16s
Validate / reports (push) Has been skipped
Release / release (push) Successful in 48s
Validate / build-test (macos-latest) (push) Failing after 4s
Validate / build-test (windows-latest) (push) Failing after 17s
Validate / build-test (ubuntu-latest) (push) Successful in 16s
Validate / reports (push) Has been skipped
Release / release (push) Successful in 48s
Neue Layer: - safety/sg/SG-001..005 als eigene Doorstop-Items (ASIL D/D/A/C/B) - SYS-Reqs verlinken nach oben auf SG via frontmatter - Kette ist jetzt: SG -> SYS -> SA, SWE -> SWA -> Code (@arch) + Test (@reqs) Drive-Away-Assist im Safety Manager: - SWE-011 (Anfahrabsicht erkennen) implementiert - SWE-012 (Sicherheits-Check Tuer + Gurt) implementiert - Neuer State SAFETY_DRIVE_AWAY + safety_mgr_release_requested() - SafetyInputs erweitert um gas_pedal_percent, gear_in_drive, door_closed, seatbelt_fastened - 5 neue Tests (DRIVE_AWAY armed/blocked/end-conditions) - Test-Header @reqs erweitert auf SWE-007..012 traceability.py erweitert: - SG als neuer Top-Level - Code-Mapping-Check: @arch im Header von src/*.c muss SWA-id matchen - Test-Mapping-Check: @reqs im Header der Tests muss alle SWE der zugehoerigen SWA abdecken - HTML zeigt 7 Spalten: SG | SYS | SA | SWE | SWA | Code | Test - 2 zusaetzliche Tabellen: Code->Arch und Test->Reqs test_apply_controller.c: - @reqs Header um SWE-005 ergaenzt (war funktional drin, nur Tag fehlte) Counts: - 55 doorstop-Items (war 50) - 46 Unit-Tests (war 41) - Traceability vollstaendig in beide Richtungen
This commit is contained in:
@@ -18,12 +18,72 @@ REPO = Path(__file__).resolve().parent.parent
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# System Requirements
|
||||
# Safety Goals (ISO 26262, abgeleitet aus HARA)
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
SG_GOALS = [
|
||||
{
|
||||
"id": "SG-001", "asil": "D",
|
||||
"title": "Kein ungewolltes Loesen der Parkbremse im Stillstand",
|
||||
"text": (
|
||||
"Die EPB darf sich im Stillstand des Fahrzeugs nicht ungewollt loesen. "
|
||||
"Abgeleitet aus HARA-Hazards H-01 (ungewolltes Loesen, Parkphase) und "
|
||||
"H-04 (Klemmkraftverlust im Hold).\n\n"
|
||||
"**FTTI:** 5 s (H-01) / 30 s (H-04).\n"
|
||||
"**Safe State:** APPLIED (Klemmkraft halten)."
|
||||
),
|
||||
},
|
||||
{
|
||||
"id": "SG-002", "asil": "D",
|
||||
"title": "Kein ungewolltes Festklemmen waehrend der Fahrt",
|
||||
"text": (
|
||||
"Die EPB darf nicht waehrend der Fahrt ungewollt festklemmen. "
|
||||
"Abgeleitet aus HARA-Hazard H-02.\n\n"
|
||||
"**FTTI:** 100 ms.\n"
|
||||
"**Safe State:** Aktor stop (kein Apply einleiten)."
|
||||
),
|
||||
},
|
||||
{
|
||||
"id": "SG-003", "asil": "A",
|
||||
"title": "Schutz gegen Aktor-Ueberlast",
|
||||
"text": (
|
||||
"Das System muss Aktor-Motorschaeden durch Ueberstrom verhindern. "
|
||||
"Abgeleitet aus HARA-Hazard H-05.\n\n"
|
||||
"**FTTI:** 100 ms.\n"
|
||||
"**Safe State:** Aktor abschalten, DTC setzen."
|
||||
),
|
||||
},
|
||||
{
|
||||
"id": "SG-004", "asil": "C",
|
||||
"title": "Zuverlaessige Hill-Hold-Uebergabe",
|
||||
"text": (
|
||||
"Beim Loslassen des Bremspedals an einem Hang muss die EPB die "
|
||||
"Bremskraft uebernehmen, bevor das Fahrzeug zu rollen beginnt. "
|
||||
"Abgeleitet aus HARA-Hazard H-06.\n\n"
|
||||
"**FTTI:** 500 ms.\n"
|
||||
"**Safe State:** Apply einleiten."
|
||||
),
|
||||
},
|
||||
{
|
||||
"id": "SG-005", "asil": "B",
|
||||
"title": "Reaktion auf Fahreranforderung",
|
||||
"text": (
|
||||
"Das System muss in spezifizierter Zeit auf Fahrer-Apply- und Release-"
|
||||
"Anforderungen reagieren. Abgeleitet aus HARA-Hazards H-03 und H-07.\n\n"
|
||||
"**Reaktionszeit:** Apply <= 800 ms, Release <= 1500 ms."
|
||||
),
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# System Requirements (linken nach oben auf SG)
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
SYS_REQS = [
|
||||
{
|
||||
"id": "SYS-001", "asil": "D",
|
||||
"links": ["SG-001"],
|
||||
"title": "Halten der Parkbremse im Stillstand",
|
||||
"text": (
|
||||
"Wenn die Parkbremse aktiviert ist und das Fahrzeug stillsteht, "
|
||||
@@ -35,6 +95,7 @@ SYS_REQS = [
|
||||
},
|
||||
{
|
||||
"id": "SYS-002", "asil": "D",
|
||||
"links": ["SG-002", "SG-005"],
|
||||
"title": "Apply auf Fahrer-Anforderung",
|
||||
"text": (
|
||||
"Bei Betaetigung des EPB-Schalters in Apply-Richtung muss das "
|
||||
@@ -45,6 +106,7 @@ SYS_REQS = [
|
||||
},
|
||||
{
|
||||
"id": "SYS-003", "asil": "B",
|
||||
"links": ["SG-005"],
|
||||
"title": "Release auf Fahrer-Anforderung",
|
||||
"text": (
|
||||
"Bei Betaetigung des EPB-Schalters in Release-Richtung muss das "
|
||||
@@ -55,6 +117,7 @@ SYS_REQS = [
|
||||
},
|
||||
{
|
||||
"id": "SYS-004", "asil": "D",
|
||||
"links": ["SG-001"],
|
||||
"title": "Auto-Apply bei Motor-Aus",
|
||||
"text": (
|
||||
"Wenn der Motor ausgeschaltet wird und das Fahrzeug stillsteht "
|
||||
@@ -65,6 +128,7 @@ SYS_REQS = [
|
||||
},
|
||||
{
|
||||
"id": "SYS-005", "asil": "D",
|
||||
"links": ["SG-002", "SG-004"],
|
||||
"title": "Hill-Hold am Berg",
|
||||
"text": (
|
||||
"Bei aktivem Hill-Hold (Fahrzeug steht am Hang mit Neigung > 5%, "
|
||||
@@ -75,6 +139,7 @@ SYS_REQS = [
|
||||
},
|
||||
{
|
||||
"id": "SYS-006", "asil": "B",
|
||||
"links": ["SG-004"],
|
||||
"title": "Auto-Release beim Anfahren (Drive-Away-Assist)",
|
||||
"text": (
|
||||
"Wenn die Parkbremse aktiv ist und der Fahrer Anfahrabsicht zeigt "
|
||||
@@ -86,6 +151,7 @@ SYS_REQS = [
|
||||
},
|
||||
{
|
||||
"id": "SYS-007", "asil": "B",
|
||||
"links": ["SG-003"],
|
||||
"title": "Aktor-Stromueberwachung",
|
||||
"text": (
|
||||
"Das System muss den Motorstrom jedes Aktors mit mindestens 1 kHz "
|
||||
@@ -795,9 +861,10 @@ def write_items(items, target_dir: Path, with_links=True):
|
||||
|
||||
|
||||
def main():
|
||||
write_items(SYS_REQS, REPO / "reqs" / "sys")
|
||||
write_items(SWE_REQS, REPO / "reqs" / "swe")
|
||||
write_items(SA_ELEMENTS, REPO / "arch" / "sys")
|
||||
write_items(SG_GOALS, REPO / "safety" / "sg")
|
||||
write_items(SYS_REQS, REPO / "reqs" / "sys")
|
||||
write_items(SWE_REQS, REPO / "reqs" / "swe")
|
||||
write_items(SA_ELEMENTS, REPO / "arch" / "sys")
|
||||
write_items(SWA_ELEMENTS, REPO / "arch" / "swe")
|
||||
print("\nTotal: {} reqs/arch items.".format(
|
||||
len(SYS_REQS) + len(SWE_REQS) + len(SA_ELEMENTS) + len(SWA_ELEMENTS)
|
||||
|
||||
Reference in New Issue
Block a user