feat(i18n): tools + landing page + doorstop generator in English
Phase 1 of full English translation: - generate_doorstop_items.py: all 55 items (SG/SYS/SWE/SA/SWA) rewritten in English - generate_landing_page.py: full UI labels, KPI cards, section headings in English - traceability.py: docstring, error messages, HTML headers in English - generate_test_report.py: report content + table headers in English - All 55 markdown items in safety/sg/, reqs/, arch/ regenerated in English Still to come: - demo-epb filled Word docs (PID, plans, safety, manuals, audit artefacts) - Code comments + test names + CI workflow step names - README + dev-process repo templates
This commit is contained in:
+15
-15
@@ -17,12 +17,12 @@ asil: D
|
||||
|
||||
# SWA-001: Safety Manager
|
||||
|
||||
## Verantwortung
|
||||
## Responsibility
|
||||
|
||||
Hoechste Sicherheitsschicht. Erkennt Motor-Aus, aktiviert Hill-Hold,
|
||||
triggert Auto-Apply. Lebenswichtige Logik mit redundanter Pruefung.
|
||||
Highest safety layer. Detects engine-off, activates hill-hold,
|
||||
triggers auto-apply. Life-critical logic with redundant checks.
|
||||
|
||||
## Statische Sicht
|
||||
## Static view
|
||||
|
||||
```plantuml
|
||||
@startuml
|
||||
@@ -31,20 +31,20 @@ package "Safety Manager" {
|
||||
[Hill-Hold Logic]
|
||||
[Auto-Apply Logic]
|
||||
}
|
||||
[Safety Manager] ..> [Apply Controller] : Apply-Anforderung
|
||||
[Safety Manager] ..> [Apply Controller] : apply request
|
||||
[Wheel Speed Plausi] --> [Safety Manager] : v_vehicle
|
||||
[Inclinometer Filter] --> [Safety Manager] : grade
|
||||
@enduml
|
||||
```
|
||||
|
||||
## Schnittstellen (Provided)
|
||||
## Provided interfaces
|
||||
|
||||
```c
|
||||
Status safety_mgr_init(void);
|
||||
void safety_mgr_step_50ms(const SafetyInputs* in);
|
||||
```
|
||||
|
||||
## Dynamisches Verhalten
|
||||
## Dynamic behaviour
|
||||
|
||||
```plantuml
|
||||
@startuml
|
||||
@@ -58,16 +58,16 @@ AutoApplyTriggered --> Idle : applied
|
||||
@enduml
|
||||
```
|
||||
|
||||
## Ressourcen
|
||||
## Resources
|
||||
|
||||
- Stack: <= 256 B
|
||||
- Worst-Case Timing: 200 us / Aufruf
|
||||
- Worst-case timing: 200 us per call
|
||||
|
||||
## Mapping auf Anforderungen
|
||||
## Mapping to requirements
|
||||
|
||||
| Anforderung | Wie abgedeckt |
|
||||
|-------------|---------------|
|
||||
| Requirement | How covered |
|
||||
|-------------|-------------|
|
||||
| SWE-007 | engine_off + v<0.5 in step_50ms |
|
||||
| SWE-008 | 2s-Filter und Trigger |
|
||||
| SWE-009 | Hill-Hold-Aktivierung |
|
||||
| SWE-010 | Brake-Released-Detektion |
|
||||
| SWE-008 | 2 s filter and trigger |
|
||||
| SWE-009 | hill-hold activation |
|
||||
| SWE-010 | brake-released detection |
|
||||
|
||||
+22
-21
@@ -16,12 +16,13 @@ asil: D
|
||||
|
||||
# SWA-002: Apply Controller
|
||||
|
||||
## Verantwortung
|
||||
## Responsibility
|
||||
|
||||
Zentraler Controller fuer Apply, Hold und Release der Parkbremse.
|
||||
ASIL-D-Kern der EPB-Software. Implementiert in `src/apply_controller.c`.
|
||||
Central controller for apply, hold and release of the parking brake.
|
||||
ASIL-D core of the EPB software. Implemented in
|
||||
`src/apply_controller.c`.
|
||||
|
||||
## Statische Sicht
|
||||
## Static view
|
||||
|
||||
```plantuml
|
||||
@startuml
|
||||
@@ -34,7 +35,7 @@ ASIL-D-Kern der EPB-Software. Implementiert in `src/apply_controller.c`.
|
||||
@enduml
|
||||
```
|
||||
|
||||
## Schnittstellen (Provided)
|
||||
## Provided interfaces
|
||||
|
||||
```c
|
||||
Status apply_ctrl_init(void);
|
||||
@@ -42,7 +43,7 @@ void apply_ctrl_step_50ms(const ApplyInputs* in);
|
||||
EpbStatus apply_ctrl_get_status(void);
|
||||
```
|
||||
|
||||
## Dynamisches Verhalten
|
||||
## Dynamic behaviour
|
||||
|
||||
```plantuml
|
||||
@startuml
|
||||
@@ -58,24 +59,24 @@ Error --> Released : reset & no fault
|
||||
@enduml
|
||||
```
|
||||
|
||||
## Ressourcen
|
||||
## Resources
|
||||
|
||||
- Stack: <= 384 B
|
||||
- Worst-Case Timing: 350 us / Aufruf
|
||||
- Worst-case timing: 350 us per call
|
||||
|
||||
## Designentscheidungen
|
||||
## Design decisions
|
||||
|
||||
| Entscheidung | Begruendung |
|
||||
|--------------|-------------|
|
||||
| Statische Allokation, kein Heap | Determinismus, MISRA C 21.3 |
|
||||
| State Machine | Einfacher zu verifizieren, deterministisch |
|
||||
| 50ms Step-Funktion | Synchron zur Inclinometer-Abtastung |
|
||||
| Decision | Rationale |
|
||||
|----------|-----------|
|
||||
| Static allocation, no heap | Determinism, MISRA C 21.3 |
|
||||
| State machine | Easier to verify, deterministic |
|
||||
| 50 ms step function | Synchronous with inclinometer sample rate |
|
||||
|
||||
## Mapping auf Anforderungen
|
||||
## Mapping to requirements
|
||||
|
||||
| Anforderung | Wie abgedeckt |
|
||||
|-------------|---------------|
|
||||
| SWE-001 | Hold-Zustand mit periodischer Klemmkraft-Pruefung |
|
||||
| SWE-002 | Watchdog-Pet im step_50ms |
|
||||
| SWE-003 | sw_apply Input wird sofort ausgewertet |
|
||||
| SWE-004 | Current-Target-Detektion via Actuator-Driver-Feedback |
|
||||
| Requirement | How covered |
|
||||
|-------------|-------------|
|
||||
| SWE-001 | Hold state with periodic clamping-force check |
|
||||
| SWE-002 | Watchdog pet in step_50ms |
|
||||
| SWE-003 | sw_apply input is evaluated immediately |
|
||||
| SWE-004 | current-target detection via actuator-driver feedback |
|
||||
|
||||
+16
-16
@@ -15,13 +15,13 @@ asil: B
|
||||
|
||||
# SWA-003: Actuator Driver
|
||||
|
||||
## Verantwortung
|
||||
## Responsibility
|
||||
|
||||
Low-Level-Ansteuerung der beiden Aktor-Motoren. PWM-Generierung,
|
||||
Strom-Messung, Overcurrent-Cutoff, Klemmkraft-Schaetzung.
|
||||
Implementiert in `src/actuator_driver.c`.
|
||||
Low-level control of the two actuator motors. PWM generation,
|
||||
current measurement, overcurrent cutoff, clamping-force estimation.
|
||||
Implemented in `src/actuator_driver.c`.
|
||||
|
||||
## Statische Sicht
|
||||
## Static view
|
||||
|
||||
```plantuml
|
||||
@startuml
|
||||
@@ -32,7 +32,7 @@ Implementiert in `src/actuator_driver.c`.
|
||||
@enduml
|
||||
```
|
||||
|
||||
## Schnittstellen (Provided)
|
||||
## Provided interfaces
|
||||
|
||||
```c
|
||||
Status actuator_init(void);
|
||||
@@ -40,20 +40,20 @@ void actuator_apply(ActuatorId id, uint8_t pwm_percent);
|
||||
void actuator_release(ActuatorId id, uint8_t pwm_percent);
|
||||
void actuator_stop(ActuatorId id);
|
||||
ActuatorStatus actuator_get_status(ActuatorId id);
|
||||
void actuator_isr_1khz(void); // Strom-Sampling
|
||||
void actuator_isr_1khz(void); // Current sampling
|
||||
```
|
||||
|
||||
## Ressourcen
|
||||
## Resources
|
||||
|
||||
- Stack: <= 256 B
|
||||
- Worst-Case Timing: 50 us / ISR
|
||||
- Static RAM: 64 B pro Aktor
|
||||
- Worst-case timing: 50 us per ISR
|
||||
- Static RAM: 64 B per actuator
|
||||
|
||||
## Mapping auf Anforderungen
|
||||
## Mapping to requirements
|
||||
|
||||
| Anforderung | Wie abgedeckt |
|
||||
|-------------|---------------|
|
||||
| SWE-006 | actuator_release fuer beide Aktoren parallel |
|
||||
| Requirement | How covered |
|
||||
|-------------|-------------|
|
||||
| SWE-006 | actuator_release for both actuators in parallel |
|
||||
| SWE-013 | actuator_isr_1khz |
|
||||
| SWE-014 | Overcurrent-Detektor in ISR |
|
||||
| SWE-015 | Peak-Current-Tracking + lineare Klemmkraft-Schaetzung |
|
||||
| SWE-014 | overcurrent detector in ISR |
|
||||
| SWE-015 | peak-current tracking + linear clamping-force estimate |
|
||||
|
||||
+6
-6
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Wheel Speed Plausibilisierung'
|
||||
header: 'Wheel Speed Plausibilisation'
|
||||
level: 1.4
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -11,14 +11,14 @@ links:
|
||||
asil: B
|
||||
---
|
||||
|
||||
# SWA-004: Wheel Speed Plausibilisierung
|
||||
# SWA-004: Wheel Speed Plausibilisation
|
||||
|
||||
## Verantwortung
|
||||
## Responsibility
|
||||
|
||||
Aufbereitung und Plausibilisierung der 4 Wheel-Speed-Signale. Erkennt
|
||||
Stillstand und plausibilisiert untereinander.
|
||||
Conditioning and plausibilisation of the four wheel-speed signals.
|
||||
Detects standstill and cross-checks the wheels.
|
||||
|
||||
## Schnittstellen (Provided)
|
||||
## Provided interfaces
|
||||
|
||||
```c
|
||||
Status wheel_speed_init(void);
|
||||
|
||||
+4
-3
@@ -12,11 +12,12 @@ asil: B
|
||||
|
||||
# SWA-005: Inclinometer Filter
|
||||
|
||||
## Verantwortung
|
||||
## Responsibility
|
||||
|
||||
Tiefpass-Filterung des Inclinometer-Roh-Signals fuer die Hill-Hold-Bewertung.
|
||||
Low-pass filtering of the raw inclinometer signal for hill-hold
|
||||
evaluation.
|
||||
|
||||
## Schnittstellen (Provided)
|
||||
## Provided interfaces
|
||||
|
||||
```c
|
||||
Status inclino_init(void);
|
||||
|
||||
+9
-8
@@ -12,12 +12,13 @@ asil: QM
|
||||
|
||||
# SWA-006: Switch Debouncer
|
||||
|
||||
## Verantwortung
|
||||
## Responsibility
|
||||
|
||||
Software-Entprellung des EPB-Schalters. Liefert stabiles Apply / Release
|
||||
Signal an den Apply-Controller. Implementiert in `src/switch_debouncer.c`.
|
||||
Software debouncing of the EPB switch. Provides a stable apply /
|
||||
release signal to the apply controller. Implemented in
|
||||
`src/switch_debouncer.c`.
|
||||
|
||||
## Schnittstellen (Provided)
|
||||
## Provided interfaces
|
||||
|
||||
```c
|
||||
Status switch_init(void);
|
||||
@@ -25,8 +26,8 @@ void switch_step_10ms(SwitchRaw raw);
|
||||
SwitchState switch_get_state(void);
|
||||
```
|
||||
|
||||
## Mapping auf Anforderungen
|
||||
## Mapping to requirements
|
||||
|
||||
| Anforderung | Wie abgedeckt |
|
||||
|-------------|---------------|
|
||||
| SWE-025 | 50ms Debounce-Logik |
|
||||
| Requirement | How covered |
|
||||
|-------------|-------------|
|
||||
| SWE-025 | 50 ms debounce logic |
|
||||
|
||||
+5
-5
@@ -13,15 +13,15 @@ asil: QM
|
||||
|
||||
# SWA-007: Display Manager
|
||||
|
||||
## Verantwortung
|
||||
## Responsibility
|
||||
|
||||
Steuert LED am EPB-Schalter und CAN-Status-Frame an das Kombi-Display.
|
||||
Empfaengt Status vom Apply-Controller.
|
||||
Drives the LED on the EPB switch and the CAN status frame to the
|
||||
instrument cluster. Receives status from the apply controller.
|
||||
|
||||
## Schnittstellen (Provided)
|
||||
## Provided interfaces
|
||||
|
||||
```c
|
||||
Status display_init(void);
|
||||
void display_set_status(EpbStatus s);
|
||||
void display_step_20ms(void); // 50 Hz CAN-Frame
|
||||
void display_step_20ms(void); // 50 Hz CAN frame
|
||||
```
|
||||
|
||||
+4
-3
@@ -13,11 +13,12 @@ asil: QM
|
||||
|
||||
# SWA-008: Diagnostic Manager
|
||||
|
||||
## Verantwortung
|
||||
## Responsibility
|
||||
|
||||
UDS-Diagnose nach ISO 14229: ReadDTC, ReadDataByIdentifier, RoutineControl.
|
||||
UDS diagnostics per ISO 14229: ReadDTC, ReadDataByIdentifier,
|
||||
RoutineControl.
|
||||
|
||||
## Schnittstellen (Provided)
|
||||
## Provided interfaces
|
||||
|
||||
```c
|
||||
Status diag_init(void);
|
||||
|
||||
+4
-3
@@ -13,7 +13,8 @@ asil: QM
|
||||
|
||||
# SWA-009: Service Mode
|
||||
|
||||
## Verantwortung
|
||||
## Responsibility
|
||||
|
||||
Service-Modus fuer Werkstatt. Wird ueber UDS RoutineControl 0x31, Routine-ID
|
||||
0x0301 aktiviert. Steuert Aktoren in Wartungsposition.
|
||||
Service mode for the workshop. Activated via UDS RoutineControl
|
||||
0x31, routine ID 0x0301. Drives the actuators into maintenance
|
||||
position.
|
||||
|
||||
+4
-4
@@ -13,12 +13,12 @@ asil: QM
|
||||
|
||||
# SWA-010: Logger
|
||||
|
||||
## Verantwortung
|
||||
## Responsibility
|
||||
|
||||
Logging fuer Entwicklung und Service. Ringpuffer im RAM (1 KB) sowie
|
||||
Persistenz im EEPROM bei kritischen Ereignissen.
|
||||
Logging for development and service. Ring buffer in RAM (1 KB)
|
||||
plus persistence in EEPROM on critical events.
|
||||
|
||||
## Schnittstellen (Provided)
|
||||
## Provided interfaces
|
||||
|
||||
```c
|
||||
Status log_init(void);
|
||||
|
||||
+30
-30
@@ -21,28 +21,28 @@ asil: D
|
||||
|
||||
# SA-001: EPB ECU
|
||||
|
||||
## Verantwortung
|
||||
## Responsibility
|
||||
|
||||
Zentrales Steuergeraet der elektrischen Parkbremse. Beinhaltet alle Software-
|
||||
Komponenten und die elektronische Ansteuerung der Aktoren.
|
||||
Central control unit of the electric parking brake. Contains all
|
||||
software components and the electronic actuation of the actuators.
|
||||
|
||||
## System-Kontext
|
||||
## System context
|
||||
|
||||
```plantuml
|
||||
@startuml
|
||||
node "EPB ECU" as ECU
|
||||
node "Aktor links" as AL
|
||||
node "Aktor rechts" as AR
|
||||
node "Wheel Speed Sensoren (x4)" as WS
|
||||
node "Actuator left" as AL
|
||||
node "Actuator right" as AR
|
||||
node "Wheel-speed sensors (x4)" as WS
|
||||
node "Inclinometer" as IN
|
||||
node "EPB-Schalter + LED" as SW
|
||||
node "CAN-Bus" as CAN
|
||||
node "Kombi-Display" as DI
|
||||
node "OBD-Tester" as OBD
|
||||
node "EPB switch + LED" as SW
|
||||
node "CAN bus" as CAN
|
||||
node "Instrument cluster" as DI
|
||||
node "OBD tester" as OBD
|
||||
|
||||
ECU --> AL : PWM, I-Mess
|
||||
ECU --> AR : PWM, I-Mess
|
||||
WS --> ECU : Pulse
|
||||
ECU --> AL : PWM, I-meas
|
||||
ECU --> AR : PWM, I-meas
|
||||
WS --> ECU : pulses
|
||||
IN --> ECU : SPI
|
||||
SW --> ECU : GPIO
|
||||
ECU --> SW : LED
|
||||
@@ -52,24 +52,24 @@ CAN <-> OBD
|
||||
@enduml
|
||||
```
|
||||
|
||||
## Schnittstellen
|
||||
## Interfaces
|
||||
|
||||
| Schnittstelle | Typ | Richtung |
|
||||
|---------------|----------------|----------|
|
||||
| Aktor L/R | PWM + Shunt | I/O |
|
||||
| Wheel Speed | Hall-Pulse | In |
|
||||
| Inclinometer | SPI | In |
|
||||
| Schalter | GPIO debounced | In |
|
||||
| LED | GPIO | Out |
|
||||
| CAN | ISO 11898 | I/O |
|
||||
| Interface | Type | Direction |
|
||||
|---------------|------------------|-----------|
|
||||
| Actuator L/R | PWM + shunt | I/O |
|
||||
| Wheel speed | Hall pulses | in |
|
||||
| Inclinometer | SPI | in |
|
||||
| Switch | GPIO debounced | in |
|
||||
| LED | GPIO | out |
|
||||
| CAN | ISO 11898 | I/O |
|
||||
|
||||
## Subkomponenten (Aufteilung auf SW)
|
||||
## Subcomponents (allocated to software)
|
||||
|
||||
Realisiert in Software: alle SWA-Elemente SWA-001..SWA-010.
|
||||
Realised in software: all SWA elements SWA-001..SWA-010.
|
||||
|
||||
## Nichtfunktionale Eigenschaften
|
||||
## Non-functional properties
|
||||
|
||||
- Worst-Case Reaktionszeit (Schalter → Aktor-Bewegung): 250 ms
|
||||
- Flash-Bedarf: < 256 KB
|
||||
- RAM-Bedarf: < 32 KB
|
||||
- Stromaufnahme: < 200 mA (Standby) / < 30 A (Aktor-Spitze)
|
||||
- Worst-case reaction time (switch to actuator motion): 250 ms
|
||||
- Flash demand: < 256 KB
|
||||
- RAM demand: < 32 KB
|
||||
- Current: < 200 mA (standby) / < 30 A (actuator peak)
|
||||
|
||||
+17
-17
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Aktoren (Caliper-Motoren)'
|
||||
header: 'Actuators (calliper motors)'
|
||||
level: 1.2
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -13,25 +13,25 @@ links:
|
||||
asil: D
|
||||
---
|
||||
|
||||
# SA-002: Aktoren (Caliper-Motoren)
|
||||
# SA-002: Actuators (calliper motors)
|
||||
|
||||
## Verantwortung
|
||||
## Responsibility
|
||||
|
||||
Zwei elektromechanische Aktoren an den hinteren Bremssaetteln klemmen
|
||||
und loesen die Bremsbelaege. Geliefert (Annahme): kommerzielles Bauteil
|
||||
eines Tier-1-Lieferanten.
|
||||
Two electromechanical actuators on the rear callipers clamp and
|
||||
release the brake pads. Supplied (assumption): commercial component
|
||||
from a Tier-1 supplier.
|
||||
|
||||
## Schnittstellen
|
||||
## Interfaces
|
||||
|
||||
| Schnittstelle | Typ | Bemerkung |
|
||||
|---------------|--------------|-----------------------------------|
|
||||
| Power | 12 V, PWM | bidirektional fuer Apply/Release |
|
||||
| Strom-Shunt | Analog | wird in der ECU abgegriffen |
|
||||
| Interface | Type | Notes |
|
||||
|---------------|--------------|---------------------------------|
|
||||
| Power | 12 V, PWM | bidirectional for apply/release |
|
||||
| Current shunt | analog | sampled inside the ECU |
|
||||
|
||||
## Nichtfunktionale Eigenschaften
|
||||
## Non-functional properties
|
||||
|
||||
- Max. Klemmkraft: 20 kN
|
||||
- Apply-Zeit (0 → max): 600 ms
|
||||
- Strom (nominal): 4 A
|
||||
- Strom (Spitze): 30 A (kurzzeitig)
|
||||
- Temperaturbereich: -40°C bis +85°C
|
||||
- Max clamping force: 20 kN
|
||||
- Apply time (0 → max): 600 ms
|
||||
- Nominal current: 4 A
|
||||
- Peak current: 30 A (brief)
|
||||
- Temperature range: -40 °C to +85 °C
|
||||
|
||||
+19
-19
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Sensor-Cluster'
|
||||
header: 'Sensor cluster'
|
||||
level: 1.3
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -12,27 +12,27 @@ links:
|
||||
asil: B
|
||||
---
|
||||
|
||||
# SA-003: Sensor-Cluster
|
||||
# SA-003: Sensor cluster
|
||||
|
||||
## Verantwortung
|
||||
## Responsibility
|
||||
|
||||
Zusammenfassung aller fuer die EPB benoetigten Eingangssignale:
|
||||
Wheel-Speed-Sensoren (4x), Inclinometer (1x), EPB-Schalter, Bremspedal-
|
||||
Status, Gear-Position, Door-Open, Seat-Belt — die letzten vier per CAN.
|
||||
Summary of all input signals required by the EPB: wheel-speed
|
||||
sensors (4x), inclinometer (1x), EPB switch, brake-pedal status,
|
||||
gear position, door open, seatbelt — the last four via CAN.
|
||||
|
||||
## Schnittstellen
|
||||
## Interfaces
|
||||
|
||||
| Sensor | Typ | Quelle |
|
||||
|-----------------|------------------|--------------|
|
||||
| Wheel Speed x4 | Hall-Pulse | direkt |
|
||||
| Inclinometer | SPI 1 kHz | direkt |
|
||||
| EPB-Schalter | GPIO | direkt |
|
||||
| Bremspedal | CAN 0x100 | aus BCM |
|
||||
| Gear | CAN 0x110 | aus TCU |
|
||||
| Door / Belt | CAN 0x120 | aus BCM |
|
||||
| Sensor | Type | Source |
|
||||
|-----------------|--------------|------------|
|
||||
| Wheel speed x4 | Hall pulses | direct |
|
||||
| Inclinometer | SPI 1 kHz | direct |
|
||||
| EPB switch | GPIO | direct |
|
||||
| Brake pedal | CAN 0x100 | from BCM |
|
||||
| Gear | CAN 0x110 | from TCU |
|
||||
| Door / belt | CAN 0x120 | from BCM |
|
||||
|
||||
## Nichtfunktionale Eigenschaften
|
||||
## Non-functional properties
|
||||
|
||||
- Wheel-Speed-Genauigkeit: +/- 0.1 km/h ab 1 km/h
|
||||
- Inclinometer-Genauigkeit: +/- 0.5°
|
||||
- Sampling-Frequenz Inclinometer: 100 Hz
|
||||
- Wheel-speed accuracy: +/- 0.1 km/h above 1 km/h
|
||||
- Inclinometer accuracy: +/- 0.5°
|
||||
- Inclinometer sampling rate: 100 Hz
|
||||
|
||||
+11
-11
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'HMI (Schalter, LED, Display)'
|
||||
header: 'HMI (switch, LED, display)'
|
||||
level: 1.4
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -11,17 +11,17 @@ links:
|
||||
asil: QM
|
||||
---
|
||||
|
||||
# SA-004: HMI (Schalter, LED, Display)
|
||||
# SA-004: HMI (switch, LED, display)
|
||||
|
||||
## Verantwortung
|
||||
## Responsibility
|
||||
|
||||
Fahrer-Interaktion und -Information: Tippschalter mit integrierter LED,
|
||||
Statusanzeige im Kombi-Display via CAN.
|
||||
Driver interaction and information: tap switch with integrated LED,
|
||||
status display in the instrument cluster via CAN.
|
||||
|
||||
## Schnittstellen
|
||||
## Interfaces
|
||||
|
||||
| Element | Typ | Verhalten |
|
||||
|---------------|----------|--------------------------------------------|
|
||||
| Tippschalter | GPIO | Apply-Richtung / Release-Richtung |
|
||||
| LED | GPIO | aus / an / blink 2 Hz / blink 4 Hz |
|
||||
| Display | CAN 0x3A0 | 50 Hz Status-Frame |
|
||||
| Element | Type | Behaviour |
|
||||
|---------------|----------|-------------------------------------------|
|
||||
| Tap switch | GPIO | apply direction / release direction |
|
||||
| LED | GPIO | off / on / blink 2 Hz / blink 4 Hz |
|
||||
| Display | CAN 0x3A0| 50 Hz status frame |
|
||||
|
||||
+11
-10
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'CAN-Bus'
|
||||
header: 'CAN bus'
|
||||
level: 1.5
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -11,16 +11,17 @@ links:
|
||||
asil: QM
|
||||
---
|
||||
|
||||
# SA-005: CAN-Bus
|
||||
# SA-005: CAN bus
|
||||
|
||||
## Verantwortung
|
||||
## Responsibility
|
||||
|
||||
Kommunikations-Backbone fuer Eingangsdaten (Bremspedal, Gang, Tuer, Gurt),
|
||||
Ausgabe (Status-Frame an Display) und Diagnose (UDS auf Tester-Adresse).
|
||||
Communication backbone for input data (brake pedal, gear, door,
|
||||
belt), output (status frame to the display) and diagnostics (UDS
|
||||
on the tester address).
|
||||
|
||||
## Schnittstellen
|
||||
## Interfaces
|
||||
|
||||
- Baudrate: 500 kbit/s, CAN 2.0B
|
||||
- Empfangene Frames: 0x100 (Bremspedal), 0x110 (Gang), 0x120 (Door/Belt),
|
||||
0x712 (UDS-Request)
|
||||
- Gesendete Frames: 0x3A0 (Status 50 Hz), 0x71A (UDS-Response)
|
||||
- Baud rate: 500 kbit/s, CAN 2.0B
|
||||
- Received frames: 0x100 (brake pedal), 0x110 (gear),
|
||||
0x120 (door/belt), 0x712 (UDS request)
|
||||
- Sent frames: 0x3A0 (status 50 Hz), 0x71A (UDS response)
|
||||
|
||||
@@ -14,7 +14,7 @@ h1{color:#1f3864}h2{color:#1f3864;margin-top:30px}
|
||||
.missing{color:#c00}
|
||||
</style></head><body>
|
||||
<h1>demo-epb — Traceability Matrix</h1>
|
||||
<p>Vollstaendige Kette: <code>SG → SYS → SA, SWE → SWA → Code (@arch) + Test (@reqs)</code></p>
|
||||
<p>Complete chain: <code>SG → SYS → SA, SWE → SWA → Code (@arch) + Test (@reqs)</code></p>
|
||||
<p>
|
||||
<strong>SG:</strong> 5
|
||||
<strong>SYS:</strong> 10
|
||||
@@ -25,125 +25,125 @@ h1{color:#1f3864}h2{color:#1f3864;margin-top:30px}
|
||||
<strong>Test-Files:</strong> 4
|
||||
</p>
|
||||
<table>
|
||||
<tr><th>Safety Goal</th><th>System-Requirement</th><th>System-Arch</th><th>Software-Req</th><th>Software-Arch</th><th>Code</th><th>Test</th></tr>
|
||||
<tr><th>Safety Goal</th><th>System Requirement</th><th>System Arch</th><th>Software Req</th><th>Software Arch</th><th>Code</th><th>Test</th></tr>
|
||||
<tr>
|
||||
<td><div><span class='id'>SG-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Kein ungewolltes Loesen der Parkbremse im Stillstand</div></td>
|
||||
<td><div><span class='id'>SYS-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Halten der Parkbremse im Stillstand</div></td>
|
||||
<td><div><span class='id'>SA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>EPB ECU</div><div><span class='id'>SA-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Aktoren (Caliper-Motoren)</div></td>
|
||||
<td><div><span class='id'>SWE-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Apply-Controller haelt Klemmkraft</div><div><span class='id'>SWE-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Watchdog ueberwacht Apply-Controller</div><div><span class='id'>SWE-022</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Stillstands-Erkennung aus Wheel Speeds</div></td>
|
||||
<td><div><span class='id'>SWA-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Apply Controller</div><div><span class='id'>SWA-004</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Wheel Speed Plausibilisierung</div></td>
|
||||
<td><div><span class='id'>SG-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>No unintended release of the parking brake during standstill</div></td>
|
||||
<td><div><span class='id'>SYS-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Holding the parking brake at standstill</div></td>
|
||||
<td><div><span class='id'>SA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>EPB ECU</div><div><span class='id'>SA-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Actuators (calliper motors)</div></td>
|
||||
<td><div><span class='id'>SWE-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Apply controller maintains clamping force</div><div><span class='id'>SWE-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Watchdog monitors the apply controller</div><div><span class='id'>SWE-022</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Standstill detection from wheel speeds</div></td>
|
||||
<td><div><span class='id'>SWA-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Apply Controller</div><div><span class='id'>SWA-004</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Wheel Speed Plausibilisation</div></td>
|
||||
<td><div class='id'>src/apply_controller.c</div></td>
|
||||
<td><div class='id'>tests/unit/test_apply_controller.c</div></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><div><span class='id'>SG-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Kein ungewolltes Loesen der Parkbremse im Stillstand</div></td>
|
||||
<td><div><span class='id'>SYS-004</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Auto-Apply bei Motor-Aus</div></td>
|
||||
<td><div><span class='id'>SG-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>No unintended release of the parking brake during standstill</div></td>
|
||||
<td><div><span class='id'>SYS-004</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Auto-apply on engine off</div></td>
|
||||
<td><div><span class='id'>SA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>EPB ECU</div></td>
|
||||
<td><div><span class='id'>SWE-007</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Motor-Aus-Bedingung erkennen</div><div><span class='id'>SWE-008</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Auto-Apply nach 2 s Verzoegerung</div></td>
|
||||
<td><div><span class='id'>SWE-007</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Detect engine-off condition</div><div><span class='id'>SWE-008</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Auto-apply after 2 s delay</div></td>
|
||||
<td><div><span class='id'>SWA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Safety Manager</div></td>
|
||||
<td><div class='id'>src/safety_manager.c</div></td>
|
||||
<td><div class='id'>tests/unit/test_safety_manager.c</div></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><div><span class='id'>SG-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Kein ungewolltes Festklemmen waehrend der Fahrt</div></td>
|
||||
<td><div><span class='id'>SYS-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Apply auf Fahrer-Anforderung</div></td>
|
||||
<td><div><span class='id'>SA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>EPB ECU</div><div><span class='id'>SA-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Aktoren (Caliper-Motoren)</div></td>
|
||||
<td><div><span class='id'>SWE-003</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Schalter-Apply-Signal an Apply-Controller weiterleiten</div><div><span class='id'>SWE-004</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Klemmkraft-Erreichen bestaetigen</div><div><span class='id'>SWE-022</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Stillstands-Erkennung aus Wheel Speeds</div><div><span class='id'>SWE-025</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>Switch-Debouncing</div></td>
|
||||
<td><div><span class='id'>SWA-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Apply Controller</div><div><span class='id'>SWA-004</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Wheel Speed Plausibilisierung</div><div><span class='id'>SWA-006</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>Switch Debouncer</div></td>
|
||||
<td><div><span class='id'>SG-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>No unintended clamping while driving</div></td>
|
||||
<td><div><span class='id'>SYS-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Apply on driver request</div></td>
|
||||
<td><div><span class='id'>SA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>EPB ECU</div><div><span class='id'>SA-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Actuators (calliper motors)</div></td>
|
||||
<td><div><span class='id'>SWE-003</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Forward switch apply signal to the apply controller</div><div><span class='id'>SWE-004</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Confirm target clamping force reached</div><div><span class='id'>SWE-022</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Standstill detection from wheel speeds</div><div><span class='id'>SWE-025</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>Switch debouncing</div></td>
|
||||
<td><div><span class='id'>SWA-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Apply Controller</div><div><span class='id'>SWA-004</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Wheel Speed Plausibilisation</div><div><span class='id'>SWA-006</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>Switch Debouncer</div></td>
|
||||
<td><div class='id'>src/apply_controller.c</div><div class='id'>src/switch_debouncer.c</div></td>
|
||||
<td><div class='id'>tests/unit/test_apply_controller.c</div><div class='id'>tests/unit/test_switch_debouncer.c</div></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><div><span class='id'>SG-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Kein ungewolltes Festklemmen waehrend der Fahrt</div></td>
|
||||
<td><div><span class='id'>SYS-005</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Hill-Hold am Berg</div></td>
|
||||
<td><div><span class='id'>SA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>EPB ECU</div><div><span class='id'>SA-003</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Sensor-Cluster</div></td>
|
||||
<td><div><span class='id'>SWE-009</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Hill-Hold-Aktivierungsbedingung</div><div><span class='id'>SWE-010</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Hill-Hold-Uebergabe an Apply-Controller</div><div><span class='id'>SWE-024</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Inclinometer Tiefpass-Filter</div></td>
|
||||
<td><div><span class='id'>SG-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>No unintended clamping while driving</div></td>
|
||||
<td><div><span class='id'>SYS-005</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Hill-hold on an incline</div></td>
|
||||
<td><div><span class='id'>SA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>EPB ECU</div><div><span class='id'>SA-003</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Sensor cluster</div></td>
|
||||
<td><div><span class='id'>SWE-009</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Hill-hold activation condition</div><div><span class='id'>SWE-010</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Hill-hold handover to the apply controller</div><div><span class='id'>SWE-024</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Inclinometer low-pass filter</div></td>
|
||||
<td><div><span class='id'>SWA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Safety Manager</div><div><span class='id'>SWA-005</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Inclinometer Filter</div></td>
|
||||
<td><div class='id'>src/safety_manager.c</div></td>
|
||||
<td><div class='id'>tests/unit/test_safety_manager.c</div></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><div><span class='id'>SG-003</span> <span class='asil' style='background:#1f77b4'>A</span></div><div class='cnt'>Schutz gegen Aktor-Ueberlast</div></td>
|
||||
<td><div><span class='id'>SYS-007</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Aktor-Stromueberwachung</div></td>
|
||||
<td><div><span class='id'>SA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>EPB ECU</div><div><span class='id'>SA-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Aktoren (Caliper-Motoren)</div><div><span class='id'>SA-003</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Sensor-Cluster</div></td>
|
||||
<td><div><span class='id'>SWE-013</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Strommessung mit 1 kHz</div><div><span class='id'>SWE-014</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Overcurrent-Cutoff</div><div><span class='id'>SWE-015</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Klemmkraft-Schaetzung aus Strom-Profil</div><div><span class='id'>SWE-023</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Wheel Speed Plausibilisierung</div></td>
|
||||
<td><div><span class='id'>SWA-003</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Actuator Driver</div><div><span class='id'>SWA-004</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Wheel Speed Plausibilisierung</div></td>
|
||||
<td><div><span class='id'>SG-003</span> <span class='asil' style='background:#1f77b4'>A</span></div><div class='cnt'>Protection against actuator overload</div></td>
|
||||
<td><div><span class='id'>SYS-007</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Actuator current monitoring</div></td>
|
||||
<td><div><span class='id'>SA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>EPB ECU</div><div><span class='id'>SA-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Actuators (calliper motors)</div><div><span class='id'>SA-003</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Sensor cluster</div></td>
|
||||
<td><div><span class='id'>SWE-013</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Current sampling at 1 kHz</div><div><span class='id'>SWE-014</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Overcurrent cutoff</div><div><span class='id'>SWE-015</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Clamping force estimation from current profile</div><div><span class='id'>SWE-023</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Wheel-speed plausibilisation</div></td>
|
||||
<td><div><span class='id'>SWA-003</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Actuator Driver</div><div><span class='id'>SWA-004</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Wheel Speed Plausibilisation</div></td>
|
||||
<td><div class='id'>src/actuator_driver.c</div></td>
|
||||
<td><div class='id'>tests/unit/test_actuator_driver.c</div></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><div><span class='id'>SG-004</span> <span class='asil' style='background:#ff7f0e'>C</span></div><div class='cnt'>Zuverlaessige Hill-Hold-Uebergabe</div></td>
|
||||
<td><div><span class='id'>SYS-005</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Hill-Hold am Berg</div></td>
|
||||
<td><div><span class='id'>SA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>EPB ECU</div><div><span class='id'>SA-003</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Sensor-Cluster</div></td>
|
||||
<td><div><span class='id'>SWE-009</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Hill-Hold-Aktivierungsbedingung</div><div><span class='id'>SWE-010</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Hill-Hold-Uebergabe an Apply-Controller</div><div><span class='id'>SWE-024</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Inclinometer Tiefpass-Filter</div></td>
|
||||
<td><div><span class='id'>SG-004</span> <span class='asil' style='background:#ff7f0e'>C</span></div><div class='cnt'>Reliable hill-hold handover</div></td>
|
||||
<td><div><span class='id'>SYS-005</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Hill-hold on an incline</div></td>
|
||||
<td><div><span class='id'>SA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>EPB ECU</div><div><span class='id'>SA-003</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Sensor cluster</div></td>
|
||||
<td><div><span class='id'>SWE-009</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Hill-hold activation condition</div><div><span class='id'>SWE-010</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Hill-hold handover to the apply controller</div><div><span class='id'>SWE-024</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Inclinometer low-pass filter</div></td>
|
||||
<td><div><span class='id'>SWA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Safety Manager</div><div><span class='id'>SWA-005</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Inclinometer Filter</div></td>
|
||||
<td><div class='id'>src/safety_manager.c</div></td>
|
||||
<td><div class='id'>tests/unit/test_safety_manager.c</div></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><div><span class='id'>SG-004</span> <span class='asil' style='background:#ff7f0e'>C</span></div><div class='cnt'>Zuverlaessige Hill-Hold-Uebergabe</div></td>
|
||||
<td><div><span class='id'>SYS-006</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Auto-Release beim Anfahren (Drive-Away-Assist)</div></td>
|
||||
<td><div><span class='id'>SA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>EPB ECU</div><div><span class='id'>SA-003</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Sensor-Cluster</div></td>
|
||||
<td><div><span class='id'>SWE-011</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Anfahrabsicht erkennen</div><div><span class='id'>SWE-012</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Sicherheits-Check vor Auto-Release</div><div><span class='id'>SWE-022</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Stillstands-Erkennung aus Wheel Speeds</div></td>
|
||||
<td><div><span class='id'>SWA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Safety Manager</div><div><span class='id'>SWA-004</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Wheel Speed Plausibilisierung</div></td>
|
||||
<td><div><span class='id'>SG-004</span> <span class='asil' style='background:#ff7f0e'>C</span></div><div class='cnt'>Reliable hill-hold handover</div></td>
|
||||
<td><div><span class='id'>SYS-006</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Auto-release on drive-away (Drive-Away Assist)</div></td>
|
||||
<td><div><span class='id'>SA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>EPB ECU</div><div><span class='id'>SA-003</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Sensor cluster</div></td>
|
||||
<td><div><span class='id'>SWE-011</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Detect drive-away intent</div><div><span class='id'>SWE-012</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Safety check before auto-release</div><div><span class='id'>SWE-022</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Standstill detection from wheel speeds</div></td>
|
||||
<td><div><span class='id'>SWA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Safety Manager</div><div><span class='id'>SWA-004</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Wheel Speed Plausibilisation</div></td>
|
||||
<td><div class='id'>src/safety_manager.c</div></td>
|
||||
<td><div class='id'>tests/unit/test_safety_manager.c</div></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><div><span class='id'>SG-005</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Reaktion auf Fahreranforderung</div></td>
|
||||
<td><div><span class='id'>SYS-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Apply auf Fahrer-Anforderung</div></td>
|
||||
<td><div><span class='id'>SA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>EPB ECU</div><div><span class='id'>SA-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Aktoren (Caliper-Motoren)</div></td>
|
||||
<td><div><span class='id'>SWE-003</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Schalter-Apply-Signal an Apply-Controller weiterleiten</div><div><span class='id'>SWE-004</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Klemmkraft-Erreichen bestaetigen</div><div><span class='id'>SWE-022</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Stillstands-Erkennung aus Wheel Speeds</div><div><span class='id'>SWE-025</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>Switch-Debouncing</div></td>
|
||||
<td><div><span class='id'>SWA-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Apply Controller</div><div><span class='id'>SWA-004</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Wheel Speed Plausibilisierung</div><div><span class='id'>SWA-006</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>Switch Debouncer</div></td>
|
||||
<td><div><span class='id'>SG-005</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Response to driver requests</div></td>
|
||||
<td><div><span class='id'>SYS-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Apply on driver request</div></td>
|
||||
<td><div><span class='id'>SA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>EPB ECU</div><div><span class='id'>SA-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Actuators (calliper motors)</div></td>
|
||||
<td><div><span class='id'>SWE-003</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Forward switch apply signal to the apply controller</div><div><span class='id'>SWE-004</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Confirm target clamping force reached</div><div><span class='id'>SWE-022</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Standstill detection from wheel speeds</div><div><span class='id'>SWE-025</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>Switch debouncing</div></td>
|
||||
<td><div><span class='id'>SWA-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Apply Controller</div><div><span class='id'>SWA-004</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Wheel Speed Plausibilisation</div><div><span class='id'>SWA-006</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>Switch Debouncer</div></td>
|
||||
<td><div class='id'>src/apply_controller.c</div><div class='id'>src/switch_debouncer.c</div></td>
|
||||
<td><div class='id'>tests/unit/test_apply_controller.c</div><div class='id'>tests/unit/test_switch_debouncer.c</div></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><div><span class='id'>SG-005</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Reaktion auf Fahreranforderung</div></td>
|
||||
<td><div><span class='id'>SYS-003</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Release auf Fahrer-Anforderung</div></td>
|
||||
<td><div><span class='id'>SA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>EPB ECU</div><div><span class='id'>SA-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Aktoren (Caliper-Motoren)</div></td>
|
||||
<td><div><span class='id'>SWE-005</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Release-Voraussetzungen pruefen</div><div><span class='id'>SWE-006</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Aktoren in Release-Position fahren</div><div><span class='id'>SWE-025</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>Switch-Debouncing</div></td>
|
||||
<td><div><span class='id'>SG-005</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Response to driver requests</div></td>
|
||||
<td><div><span class='id'>SYS-003</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Release on driver request</div></td>
|
||||
<td><div><span class='id'>SA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>EPB ECU</div><div><span class='id'>SA-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Actuators (calliper motors)</div></td>
|
||||
<td><div><span class='id'>SWE-005</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Check release preconditions</div><div><span class='id'>SWE-006</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Drive actuators into release position</div><div><span class='id'>SWE-025</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>Switch debouncing</div></td>
|
||||
<td><div><span class='id'>SWA-002</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>Apply Controller</div><div><span class='id'>SWA-003</span> <span class='asil' style='background:#2ca02c'>B</span></div><div class='cnt'>Actuator Driver</div><div><span class='id'>SWA-006</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>Switch Debouncer</div></td>
|
||||
<td><div class='id'>src/apply_controller.c</div><div class='id'>src/actuator_driver.c</div><div class='id'>src/switch_debouncer.c</div></td>
|
||||
<td><div class='id'>tests/unit/test_actuator_driver.c</div><div class='id'>tests/unit/test_apply_controller.c</div><div class='id'>tests/unit/test_switch_debouncer.c</div></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='missing'>—</td>
|
||||
<td><div><span class='id'>SYS-008</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>Service-Modus fuer Werkstatt</div></td>
|
||||
<td><div><span class='id'>SA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>EPB ECU</div><div><span class='id'>SA-004</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>HMI (Schalter, LED, Display)</div></td>
|
||||
<td><div><span class='id'>SWE-016</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>UDS RoutineControl 0x31 fuer Service-Release</div><div><span class='id'>SWE-017</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>Service-Mode-Indikator</div></td>
|
||||
<td><div><span class='id'>SYS-008</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>Service mode for the workshop</div></td>
|
||||
<td><div><span class='id'>SA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>EPB ECU</div><div><span class='id'>SA-004</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>HMI (switch, LED, display)</div></td>
|
||||
<td><div><span class='id'>SWE-016</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>UDS RoutineControl 0x31 for service release</div><div><span class='id'>SWE-017</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>Service mode indicator</div></td>
|
||||
<td><div><span class='id'>SWA-009</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>Service Mode</div></td>
|
||||
<td class='cnt'>—</td>
|
||||
<td class='cnt'>—</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='missing'>—</td>
|
||||
<td><div><span class='id'>SYS-009</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>UDS-Diagnose</div></td>
|
||||
<td><div><span class='id'>SA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>EPB ECU</div><div><span class='id'>SA-005</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>CAN-Bus</div></td>
|
||||
<td><div><span class='id'>SWE-018</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>UDS Service 0x19 ReadDTC</div><div><span class='id'>SWE-019</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>UDS Service 0x22 ReadDataByIdentifier</div></td>
|
||||
<td><div><span class='id'>SYS-009</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>UDS diagnostics</div></td>
|
||||
<td><div><span class='id'>SA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>EPB ECU</div><div><span class='id'>SA-005</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>CAN bus</div></td>
|
||||
<td><div><span class='id'>SWE-018</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>UDS service 0x19 ReadDTC</div><div><span class='id'>SWE-019</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>UDS service 0x22 ReadDataByIdentifier</div></td>
|
||||
<td><div><span class='id'>SWA-008</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>Diagnostic Manager</div><div><span class='id'>SWA-010</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>Logger</div></td>
|
||||
<td class='cnt'>—</td>
|
||||
<td class='cnt'>—</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='missing'>—</td>
|
||||
<td><div><span class='id'>SYS-010</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>HMI-Statusanzeige</div></td>
|
||||
<td><div><span class='id'>SA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>EPB ECU</div><div><span class='id'>SA-004</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>HMI (Schalter, LED, Display)</div><div><span class='id'>SA-005</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>CAN-Bus</div></td>
|
||||
<td><div><span class='id'>SWE-020</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>LED-Steuerung</div><div><span class='id'>SWE-021</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>CAN-Status-Frame</div></td>
|
||||
<td><div><span class='id'>SYS-010</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>HMI status display</div></td>
|
||||
<td><div><span class='id'>SA-001</span> <span class='asil' style='background:#d62728'>D</span></div><div class='cnt'>EPB ECU</div><div><span class='id'>SA-004</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>HMI (switch, LED, display)</div><div><span class='id'>SA-005</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>CAN bus</div></td>
|
||||
<td><div><span class='id'>SWE-020</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>LED control</div><div><span class='id'>SWE-021</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>CAN status frame</div></td>
|
||||
<td><div><span class='id'>SWA-007</span> <span class='asil' style='background:#888'>QM</span></div><div class='cnt'>Display Manager</div></td>
|
||||
<td class='cnt'>—</td>
|
||||
<td class='cnt'>—</td>
|
||||
</tr>
|
||||
</table>
|
||||
<h2>Code → Architektur</h2>
|
||||
<table><tr><th>Datei</th><th>@arch</th><th>@reqs</th></tr>
|
||||
<h2>Code → Architecture</h2>
|
||||
<table><tr><th>File</th><th>@arch</th><th>@reqs</th></tr>
|
||||
<tr><td class='id'>src/safety_manager.c</td><td>SWA-001</td><td class='cnt'>SWE-007 SWE-008 SWE-009 SWE-010 SWE-011 SWE-012</td></tr>
|
||||
<tr><td class='id'>src/apply_controller.c</td><td>SWA-002</td><td class='cnt'>SWE-001 SWE-002 SWE-003 SWE-004</td></tr>
|
||||
<tr><td class='id'>src/actuator_driver.c</td><td>SWA-003</td><td class='cnt'>SWE-006 SWE-013 SWE-014 SWE-015</td></tr>
|
||||
<tr><td class='id'>src/switch_debouncer.c</td><td>SWA-006</td><td class='cnt'>SWE-025</td></tr>
|
||||
</table>
|
||||
<h2>Test → Anforderungen</h2>
|
||||
<table><tr><th>Test-Datei</th><th>Decklt SWA</th><th>@reqs</th></tr>
|
||||
<h2>Test → Requirements</h2>
|
||||
<table><tr><th>Test file</th><th>Covers SWA</th><th>@reqs</th></tr>
|
||||
<tr><td class='id'>tests/unit/test_safety_manager.c</td><td>SWA-001</td><td class='cnt'>SWE-007 SWE-008 SWE-009 SWE-010 SWE-011 SWE-012</td></tr>
|
||||
<tr><td class='id'>tests/unit/test_apply_controller.c</td><td>SWA-002</td><td class='cnt'>SWE-001 SWE-002 SWE-003 SWE-004 SWE-005</td></tr>
|
||||
<tr><td class='id'>tests/unit/test_actuator_driver.c</td><td>SWA-003</td><td class='cnt'>SWE-006 SWE-013 SWE-014 SWE-015</td></tr>
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"sys": {
|
||||
"id": "SYS-001",
|
||||
"asil": "D",
|
||||
"title": "Halten der Parkbremse im Stillstand"
|
||||
"title": "Holding the parking brake at standstill"
|
||||
},
|
||||
"sa": [
|
||||
{
|
||||
@@ -58,7 +58,7 @@
|
||||
"sys": {
|
||||
"id": "SYS-004",
|
||||
"asil": "D",
|
||||
"title": "Auto-Apply bei Motor-Aus"
|
||||
"title": "Auto-apply on engine off"
|
||||
},
|
||||
"sa": [
|
||||
{
|
||||
@@ -97,7 +97,7 @@
|
||||
"sys": {
|
||||
"id": "SYS-002",
|
||||
"asil": "D",
|
||||
"title": "Apply auf Fahrer-Anforderung"
|
||||
"title": "Apply on driver request"
|
||||
},
|
||||
"sa": [
|
||||
{
|
||||
@@ -158,7 +158,7 @@
|
||||
"sys": {
|
||||
"id": "SYS-005",
|
||||
"asil": "D",
|
||||
"title": "Hill-Hold am Berg"
|
||||
"title": "Hill-hold on an incline"
|
||||
},
|
||||
"sa": [
|
||||
{
|
||||
@@ -209,7 +209,7 @@
|
||||
"sys": {
|
||||
"id": "SYS-007",
|
||||
"asil": "B",
|
||||
"title": "Aktor-Stromueberwachung"
|
||||
"title": "Actuator current monitoring"
|
||||
},
|
||||
"sa": [
|
||||
{
|
||||
@@ -268,7 +268,7 @@
|
||||
"sys": {
|
||||
"id": "SYS-005",
|
||||
"asil": "D",
|
||||
"title": "Hill-Hold am Berg"
|
||||
"title": "Hill-hold on an incline"
|
||||
},
|
||||
"sa": [
|
||||
{
|
||||
@@ -319,7 +319,7 @@
|
||||
"sys": {
|
||||
"id": "SYS-006",
|
||||
"asil": "B",
|
||||
"title": "Auto-Release beim Anfahren (Drive-Away-Assist)"
|
||||
"title": "Auto-release on drive-away (Drive-Away Assist)"
|
||||
},
|
||||
"sa": [
|
||||
{
|
||||
@@ -370,7 +370,7 @@
|
||||
"sys": {
|
||||
"id": "SYS-002",
|
||||
"asil": "D",
|
||||
"title": "Apply auf Fahrer-Anforderung"
|
||||
"title": "Apply on driver request"
|
||||
},
|
||||
"sa": [
|
||||
{
|
||||
@@ -431,7 +431,7 @@
|
||||
"sys": {
|
||||
"id": "SYS-003",
|
||||
"asil": "B",
|
||||
"title": "Release auf Fahrer-Anforderung"
|
||||
"title": "Release on driver request"
|
||||
},
|
||||
"sa": [
|
||||
{
|
||||
@@ -487,7 +487,7 @@
|
||||
"sys": {
|
||||
"id": "SYS-008",
|
||||
"asil": "QM",
|
||||
"title": "Service-Modus fuer Werkstatt"
|
||||
"title": "Service mode for the workshop"
|
||||
},
|
||||
"sa": [
|
||||
{
|
||||
@@ -523,7 +523,7 @@
|
||||
"sys": {
|
||||
"id": "SYS-009",
|
||||
"asil": "QM",
|
||||
"title": "UDS-Diagnose"
|
||||
"title": "UDS diagnostics"
|
||||
},
|
||||
"sa": [
|
||||
{
|
||||
@@ -563,7 +563,7 @@
|
||||
"sys": {
|
||||
"id": "SYS-010",
|
||||
"asil": "QM",
|
||||
"title": "HMI-Statusanzeige"
|
||||
"title": "HMI status display"
|
||||
},
|
||||
"sa": [
|
||||
{
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Apply-Controller haelt Klemmkraft'
|
||||
header: 'Apply controller maintains clamping force'
|
||||
level: 1.1
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: D
|
||||
---
|
||||
|
||||
# SWE-001: Apply-Controller haelt Klemmkraft
|
||||
# SWE-001: Apply controller maintains clamping force
|
||||
|
||||
Der Apply-Controller muss die Klemmkraft im Hold-Zustand alle 50 ms verifizieren und bei Abweichung > 10% nachregeln.
|
||||
The apply controller must verify the clamping force in the hold state every 50 ms and re-apply when the deviation exceeds 10%.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Watchdog ueberwacht Apply-Controller'
|
||||
header: 'Watchdog monitors the apply controller'
|
||||
level: 1.2
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: D
|
||||
---
|
||||
|
||||
# SWE-002: Watchdog ueberwacht Apply-Controller
|
||||
# SWE-002: Watchdog monitors the apply controller
|
||||
|
||||
Ein unabhaengiger Watchdog muss die Liveness des Apply-Controllers mit 100 ms Timeout ueberwachen und bei Ausbleiben in den sicheren Zustand (Apply) gehen.
|
||||
An independent watchdog must monitor the liveness of the apply controller with a 100 ms timeout and, on failure to respond, transition to the safe state (apply).
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Schalter-Apply-Signal an Apply-Controller weiterleiten'
|
||||
header: 'Forward switch apply signal to the apply controller'
|
||||
level: 1.3
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: D
|
||||
---
|
||||
|
||||
# SWE-003: Schalter-Apply-Signal an Apply-Controller weiterleiten
|
||||
# SWE-003: Forward switch apply signal to the apply controller
|
||||
|
||||
Das Software-Modul Switch-Debouncer muss ein entprelltes Apply-Signal innerhalb von 50 ms an den Apply-Controller liefern.
|
||||
The Switch Debouncer software module must deliver a debounced apply signal to the apply controller within 50 ms.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Klemmkraft-Erreichen bestaetigen'
|
||||
header: 'Confirm target clamping force reached'
|
||||
level: 1.4
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: D
|
||||
---
|
||||
|
||||
# SWE-004: Klemmkraft-Erreichen bestaetigen
|
||||
# SWE-004: Confirm target clamping force reached
|
||||
|
||||
Der Apply-Controller muss das Erreichen der Ziel-Klemmkraft via Strommessung erkennen und ein Status-Flag setzen.
|
||||
The apply controller must detect that the target clamping force has been reached via current measurement and set a status flag.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Release-Voraussetzungen pruefen'
|
||||
header: 'Check release preconditions'
|
||||
level: 1.5
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: B
|
||||
---
|
||||
|
||||
# SWE-005: Release-Voraussetzungen pruefen
|
||||
# SWE-005: Check release preconditions
|
||||
|
||||
Vor jedem Release muss der Apply-Controller pruefen: Motor laeuft, Bremspedal betaetigt, Gang ist eingelegt. Andernfalls Release abweisen.
|
||||
Before any release, the apply controller must verify: engine running, brake pedal pressed, gear engaged. Otherwise reject the release.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Aktoren in Release-Position fahren'
|
||||
header: 'Drive actuators into release position'
|
||||
level: 1.6
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: B
|
||||
---
|
||||
|
||||
# SWE-006: Aktoren in Release-Position fahren
|
||||
# SWE-006: Drive actuators into release position
|
||||
|
||||
Der Actuator-Driver muss beide Aktoren parallel in Release-Position fahren. Maximalzeit: 1200 ms. Bei Timeout DTC setzen.
|
||||
The Actuator Driver must drive both actuators in parallel into the release position. Maximum time: 1200 ms. On timeout, set a DTC.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Motor-Aus-Bedingung erkennen'
|
||||
header: 'Detect engine-off condition'
|
||||
level: 1.7
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: D
|
||||
---
|
||||
|
||||
# SWE-007: Motor-Aus-Bedingung erkennen
|
||||
# SWE-007: Detect engine-off condition
|
||||
|
||||
Der Safety-Manager muss erkennen: Motor-Status = aus, Geschwindigkeit < 0.5 km/h. Auswertezyklus 50 ms.
|
||||
The Safety Manager must detect: engine status = off, vehicle speed < 0.5 km/h. Sampling period 50 ms.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Auto-Apply nach 2 s Verzoegerung'
|
||||
header: 'Auto-apply after 2 s delay'
|
||||
level: 1.8
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: D
|
||||
---
|
||||
|
||||
# SWE-008: Auto-Apply nach 2 s Verzoegerung
|
||||
# SWE-008: Auto-apply after 2 s delay
|
||||
|
||||
Ist die Motor-Aus-Bedingung 2 s stabil erfuellt und Parkbremse noch nicht aktiv, muss der Safety-Manager Apply-Anforderung an den Apply-Controller senden.
|
||||
If the engine-off condition is stable for 2 s and the parking brake is not yet active, the Safety Manager must send an apply request to the apply controller.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Hill-Hold-Aktivierungsbedingung'
|
||||
header: 'Hill-hold activation condition'
|
||||
level: 1.9
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: D
|
||||
---
|
||||
|
||||
# SWE-009: Hill-Hold-Aktivierungsbedingung
|
||||
# SWE-009: Hill-hold activation condition
|
||||
|
||||
Der Safety-Manager muss Hill-Hold aktivieren, wenn Neigung (gefiltert) > 5%, Geschwindigkeit < 0.5 km/h und Bremspedal betaetigt sind.
|
||||
The Safety Manager must activate hill-hold when grade (filtered) > 5%, vehicle speed < 0.5 km/h and the brake pedal is pressed.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Hill-Hold-Uebergabe an Apply-Controller'
|
||||
header: 'Hill-hold handover to the apply controller'
|
||||
level: 1.10
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: D
|
||||
---
|
||||
|
||||
# SWE-010: Hill-Hold-Uebergabe an Apply-Controller
|
||||
# SWE-010: Hill-hold handover to the apply controller
|
||||
|
||||
Wird das Bremspedal bei aktivem Hill-Hold losgelassen, muss der Safety-Manager unmittelbar Apply-Anforderung an den Apply-Controller senden, bevor das Fahrzeug zu rollen beginnen kann.
|
||||
If the brake pedal is released while hill-hold is active, the Safety Manager must immediately send an apply request to the apply controller before the vehicle can start to roll.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Anfahrabsicht erkennen'
|
||||
header: 'Detect drive-away intent'
|
||||
level: 1.11
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: B
|
||||
---
|
||||
|
||||
# SWE-011: Anfahrabsicht erkennen
|
||||
# SWE-011: Detect drive-away intent
|
||||
|
||||
Anfahrabsicht ist erkannt, wenn: Gaspedal > 10%, Gang in Vorwaerts oder Rueckwaerts, Motor laeuft.
|
||||
Drive-away intent is detected when: throttle > 10%, gear in forward or reverse, engine running.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Sicherheits-Check vor Auto-Release'
|
||||
header: 'Safety check before auto-release'
|
||||
level: 1.12
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: B
|
||||
---
|
||||
|
||||
# SWE-012: Sicherheits-Check vor Auto-Release
|
||||
# SWE-012: Safety check before auto-release
|
||||
|
||||
Vor Auto-Release muessen erfuellt sein: Fahrertuer geschlossen, Sicherheitsgurt angelegt. Andernfalls warnen und nicht loesen.
|
||||
Before auto-release, the following must be satisfied: driver door closed, seatbelt fastened. Otherwise warn and do not release.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Strommessung mit 1 kHz'
|
||||
header: 'Current sampling at 1 kHz'
|
||||
level: 1.13
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: B
|
||||
---
|
||||
|
||||
# SWE-013: Strommessung mit 1 kHz
|
||||
# SWE-013: Current sampling at 1 kHz
|
||||
|
||||
Der Actuator-Driver muss den Motorstrom jedes Aktors mit mindestens 1 kHz abtasten. Genauigkeit +/- 100 mA.
|
||||
The Actuator Driver must sample the motor current of each actuator at at least 1 kHz. Accuracy +/- 100 mA.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Overcurrent-Cutoff'
|
||||
header: 'Overcurrent cutoff'
|
||||
level: 1.14
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: B
|
||||
---
|
||||
|
||||
# SWE-014: Overcurrent-Cutoff
|
||||
# SWE-014: Overcurrent cutoff
|
||||
|
||||
Bei Motorstrom > 8 A laenger als 100 ms muss der Actuator-Driver den Motor abschalten und einen DTC P0xxx setzen.
|
||||
On motor current > 8 A for longer than 100 ms, the Actuator Driver must shut down the motor and set DTC P0xxx.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Klemmkraft-Schaetzung aus Strom-Profil'
|
||||
header: 'Clamping force estimation from current profile'
|
||||
level: 1.15
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: B
|
||||
---
|
||||
|
||||
# SWE-015: Klemmkraft-Schaetzung aus Strom-Profil
|
||||
# SWE-015: Clamping force estimation from current profile
|
||||
|
||||
Der Actuator-Driver muss die erreichte Klemmkraft aus dem Stromverlauf bei Apply schaetzen (Modell: F = k * I_peak).
|
||||
The Actuator Driver must estimate the achieved clamping force from the current waveform during apply (model: F = k * I_peak).
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'UDS RoutineControl 0x31 fuer Service-Release'
|
||||
header: 'UDS RoutineControl 0x31 for service release'
|
||||
level: 1.16
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: QM
|
||||
---
|
||||
|
||||
# SWE-016: UDS RoutineControl 0x31 fuer Service-Release
|
||||
# SWE-016: UDS RoutineControl 0x31 for service release
|
||||
|
||||
Service-Mode wird ueber UDS RoutineControl Service 0x31, Routine-ID 0x0301 aktiviert. Bedingung: Fahrzeug muss stillstehen.
|
||||
Service mode is activated via UDS RoutineControl service 0x31, routine ID 0x0301. Precondition: vehicle must be at standstill.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Service-Mode-Indikator'
|
||||
header: 'Service mode indicator'
|
||||
level: 1.17
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: QM
|
||||
---
|
||||
|
||||
# SWE-017: Service-Mode-Indikator
|
||||
# SWE-017: Service mode indicator
|
||||
|
||||
Im Service-Mode muss die EPB-LED am Schalter mit 2 Hz blinken.
|
||||
While in service mode, the EPB LED on the switch must blink at 2 Hz.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'UDS Service 0x19 ReadDTC'
|
||||
header: 'UDS service 0x19 ReadDTC'
|
||||
level: 1.18
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: QM
|
||||
---
|
||||
|
||||
# SWE-018: UDS Service 0x19 ReadDTC
|
||||
# SWE-018: UDS service 0x19 ReadDTC
|
||||
|
||||
Das System muss alle gespeicherten DTCs ueber Service 0x19 (Subfunktion 0x02 reportDTCByStatusMask) ausgeben.
|
||||
The system must output all stored DTCs via service 0x19 (sub-function 0x02 reportDTCByStatusMask).
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'UDS Service 0x22 ReadDataByIdentifier'
|
||||
header: 'UDS service 0x22 ReadDataByIdentifier'
|
||||
level: 1.19
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: QM
|
||||
---
|
||||
|
||||
# SWE-019: UDS Service 0x22 ReadDataByIdentifier
|
||||
# SWE-019: UDS service 0x22 ReadDataByIdentifier
|
||||
|
||||
Folgende DIDs muessen lesbar sein: 0xF187 (SW-Version), 0x0301 (Klemmkraft links), 0x0302 (Klemmkraft rechts).
|
||||
The following DIDs must be readable: 0xF187 (SW version), 0x0301 (clamping force left), 0x0302 (clamping force right).
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'LED-Steuerung'
|
||||
header: 'LED control'
|
||||
level: 1.20
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: QM
|
||||
---
|
||||
|
||||
# SWE-020: LED-Steuerung
|
||||
# SWE-020: LED control
|
||||
|
||||
Apply-aktiv: LED dauerleuchtend. Release: LED aus. Fehler: LED blinkt 4 Hz. Service-Mode: LED blinkt 2 Hz.
|
||||
Apply active: LED solid. Release: LED off. Fault: LED blinks at 4 Hz. Service mode: LED blinks at 2 Hz.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'CAN-Status-Frame'
|
||||
header: 'CAN status frame'
|
||||
level: 1.21
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: QM
|
||||
---
|
||||
|
||||
# SWE-021: CAN-Status-Frame
|
||||
# SWE-021: CAN status frame
|
||||
|
||||
Status-Frame 0x3A0 mit 50 Hz: Byte 0 = Status (0=Released, 1=Applied, 2=Applying, 3=Releasing, 0xFF=Error), Byte 1-2 = Klemmkraft links, Byte 3-4 = Klemmkraft rechts.
|
||||
Status frame 0x3A0 at 50 Hz: byte 0 = status (0=released, 1=applied, 2=applying, 3=releasing, 0xFF=error), byte 1-2 = left clamping force, byte 3-4 = right clamping force.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Stillstands-Erkennung aus Wheel Speeds'
|
||||
header: 'Standstill detection from wheel speeds'
|
||||
level: 1.22
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -12,6 +12,6 @@ links:
|
||||
asil: B
|
||||
---
|
||||
|
||||
# SWE-022: Stillstands-Erkennung aus Wheel Speeds
|
||||
# SWE-022: Standstill detection from wheel speeds
|
||||
|
||||
Stillstand ist erkannt, wenn alle 4 Wheel-Speed-Signale fuer mindestens 200 ms unter 0.5 km/h liegen.
|
||||
Standstill is detected when all 4 wheel-speed signals stay below 0.5 km/h for at least 200 ms.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Wheel Speed Plausibilisierung'
|
||||
header: 'Wheel-speed plausibilisation'
|
||||
level: 1.23
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: B
|
||||
---
|
||||
|
||||
# SWE-023: Wheel Speed Plausibilisierung
|
||||
# SWE-023: Wheel-speed plausibilisation
|
||||
|
||||
Spreizung der Wheel-Speed-Signale: bei Geradeaus-Fahrt darf die Differenz nicht > 3 km/h sein. Andernfalls Sensor-Fehler-DTC.
|
||||
Spread of the wheel-speed signals: when driving straight, the difference must not exceed 3 km/h. Otherwise set a sensor fault DTC.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Inclinometer Tiefpass-Filter'
|
||||
header: 'Inclinometer low-pass filter'
|
||||
level: 1.24
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: B
|
||||
---
|
||||
|
||||
# SWE-024: Inclinometer Tiefpass-Filter
|
||||
# SWE-024: Inclinometer low-pass filter
|
||||
|
||||
Das Roh-Neigungssignal muss mit einem Tiefpass 1. Ordnung (Zeitkonstante 200 ms) gefiltert werden, bevor es zur Hill-Hold-Bewertung verwendet wird.
|
||||
The raw inclinometer signal must be filtered with a first-order low-pass (time constant 200 ms) before being used for hill-hold evaluation.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Switch-Debouncing'
|
||||
header: 'Switch debouncing'
|
||||
level: 1.25
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -11,6 +11,6 @@ links:
|
||||
asil: QM
|
||||
---
|
||||
|
||||
# SWE-025: Switch-Debouncing
|
||||
# SWE-025: Switch debouncing
|
||||
|
||||
Der EPB-Schalter muss mit einer Entprell-Zeit von 50 ms entprellt werden. Stabiler Pegel = Eingangssignal fuer Apply-Controller.
|
||||
The EPB switch must be debounced with a debounce time of 50 ms. Stable level = input signal for the apply controller.
|
||||
|
||||
+4
-4
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Halten der Parkbremse im Stillstand'
|
||||
header: 'Holding the parking brake at standstill'
|
||||
level: 1.1
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,8 +10,8 @@ links:
|
||||
asil: D
|
||||
---
|
||||
|
||||
# SYS-001: Halten der Parkbremse im Stillstand
|
||||
# SYS-001: Holding the parking brake at standstill
|
||||
|
||||
Wenn die Parkbremse aktiviert ist und das Fahrzeug stillsteht, muss das EPB-System die mechanische Klemmkraft an beiden hinteren Bremssaetteln aufrecht erhalten, bis ein Loesen ausdruecklich angefordert wird. Sicherheitsziel: SG-01.
|
||||
When the parking brake is engaged and the vehicle is at a standstill, the EPB system must maintain the mechanical clamping force on both rear callipers until a release is explicitly requested. Safety goal: SG-001.
|
||||
|
||||
**Verifikation:** SiL-Test mit Auf-/Ab-Hangelung, Klemmkraftmessung.
|
||||
**Verification:** SiL test with up/down grade scenarios, clamping force measurement.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Apply auf Fahrer-Anforderung'
|
||||
header: 'Apply on driver request'
|
||||
level: 1.2
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -11,6 +11,6 @@ links:
|
||||
asil: D
|
||||
---
|
||||
|
||||
# SYS-002: Apply auf Fahrer-Anforderung
|
||||
# SYS-002: Apply on driver request
|
||||
|
||||
Bei Betaetigung des EPB-Schalters in Apply-Richtung muss das System innerhalb von 800 ms die Parkbremse anlegen, sofern die Voraussetzungen erfuellt sind (Stillstand oder Geschwindigkeit unter 5 km/h). Sicherheitsziel: SG-01.
|
||||
On apply-direction actuation of the EPB switch, the system must engage the parking brake within 800 ms, provided the preconditions are met (standstill or vehicle speed below 5 km/h). Safety goal: SG-002.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Release auf Fahrer-Anforderung'
|
||||
header: 'Release on driver request'
|
||||
level: 1.3
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: B
|
||||
---
|
||||
|
||||
# SYS-003: Release auf Fahrer-Anforderung
|
||||
# SYS-003: Release on driver request
|
||||
|
||||
Bei Betaetigung des EPB-Schalters in Release-Richtung muss das System die Parkbremse loesen, sofern die folgenden Voraussetzungen erfuellt sind: Motor laeuft, Fahrer betaetigt Bremspedal, Gang ist eingelegt. Maximalzeit fuer Loesen: 1500 ms.
|
||||
On release-direction actuation of the EPB switch, the system must release the parking brake provided the following preconditions are met: engine running, driver pressing the brake pedal, a gear is engaged. Maximum release time: 1500 ms.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Auto-Apply bei Motor-Aus'
|
||||
header: 'Auto-apply on engine off'
|
||||
level: 1.4
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: D
|
||||
---
|
||||
|
||||
# SYS-004: Auto-Apply bei Motor-Aus
|
||||
# SYS-004: Auto-apply on engine off
|
||||
|
||||
Wenn der Motor ausgeschaltet wird und das Fahrzeug stillsteht und keine Parkbremse aktiv ist, muss das System die Parkbremse spaetestens 2 s nach Erkennung Motor-Aus automatisch anlegen. Sicherheitsziel: SG-01.
|
||||
When the engine is switched off and the vehicle is at a standstill, and the parking brake is not yet engaged, the system must automatically engage the parking brake at the latest 2 s after detecting engine-off. Safety goal: SG-001.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Hill-Hold am Berg'
|
||||
header: 'Hill-hold on an incline'
|
||||
level: 1.5
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -11,6 +11,6 @@ links:
|
||||
asil: D
|
||||
---
|
||||
|
||||
# SYS-005: Hill-Hold am Berg
|
||||
# SYS-005: Hill-hold on an incline
|
||||
|
||||
Bei aktivem Hill-Hold (Fahrzeug steht am Hang mit Neigung > 5%, Fahrer betaetigt Bremspedal) uebernimmt das EPB-System die Bremskraft beim Loesen des Bremspedals und haelt diese, bis die Anfahrt erkannt wird. Sicherheitsziel: SG-01.
|
||||
When hill-hold is active (vehicle on a slope with grade > 5%, driver pressing the brake pedal), the EPB system shall take over the brake force when the brake pedal is released and shall maintain it until drive-away is detected. Safety goal: SG-002.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Auto-Release beim Anfahren (Drive-Away-Assist)'
|
||||
header: 'Auto-release on drive-away (Drive-Away Assist)'
|
||||
level: 1.6
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: B
|
||||
---
|
||||
|
||||
# SYS-006: Auto-Release beim Anfahren (Drive-Away-Assist)
|
||||
# SYS-006: Auto-release on drive-away (Drive-Away Assist)
|
||||
|
||||
Wenn die Parkbremse aktiv ist und der Fahrer Anfahrabsicht zeigt (Gaspedal-Betaetigung bei eingelegtem Gang), muss das System die Parkbremse innerhalb von 500 ms loesen. Voraussetzung: alle Sicherheitskriterien (Fahrertuer geschlossen, Sicherheitsgurt) erfuellt.
|
||||
When the parking brake is engaged and the driver shows intent to drive away (throttle actuation with gear engaged), the system must release the parking brake within 500 ms. Precondition: all safety criteria (driver door closed, seatbelt fastened) are met.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Aktor-Stromueberwachung'
|
||||
header: 'Actuator current monitoring'
|
||||
level: 1.7
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -10,6 +10,6 @@ links:
|
||||
asil: B
|
||||
---
|
||||
|
||||
# SYS-007: Aktor-Stromueberwachung
|
||||
# SYS-007: Actuator current monitoring
|
||||
|
||||
Das System muss den Motorstrom jedes Aktors mit mindestens 1 kHz ueberwachen und bei Ueberschreitung von 8 A fuer mehr als 100 ms den Aktor abschalten und einen DTC setzen. Sicherheitsziel: SG-03.
|
||||
The system must monitor the motor current of each actuator at at least 1 kHz and, on exceeding 8 A for more than 100 ms, shut down the actuator and set a DTC. Safety goal: SG-003.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Service-Modus fuer Werkstatt'
|
||||
header: 'Service mode for the workshop'
|
||||
level: 1.8
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -9,6 +9,6 @@ links: []
|
||||
asil: QM
|
||||
---
|
||||
|
||||
# SYS-008: Service-Modus fuer Werkstatt
|
||||
# SYS-008: Service mode for the workshop
|
||||
|
||||
Das System muss ueber UDS RoutineControl (Service 0x31) einen Service-Modus bereitstellen, in dem die Aktoren manuell in Wartungs-Position gefahren werden koennen (z.B. fuer Bremsbelag-Wechsel).
|
||||
The system must provide a service mode via UDS RoutineControl (service 0x31) in which the actuators can be moved manually into maintenance position (e.g. for brake pad replacement).
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'UDS-Diagnose'
|
||||
header: 'UDS diagnostics'
|
||||
level: 1.9
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -9,6 +9,6 @@ links: []
|
||||
asil: QM
|
||||
---
|
||||
|
||||
# SYS-009: UDS-Diagnose
|
||||
# SYS-009: UDS diagnostics
|
||||
|
||||
Das System muss UDS-Diagnose nach ISO 14229 bereitstellen: ReadDTC (0x19), ReadDataByIdentifier (0x22), RoutineControl (0x31), ECUReset (0x11). Tester-Adresse 0x712, Antwort-Adresse 0x71A.
|
||||
The system must provide UDS diagnostics per ISO 14229: ReadDTC (0x19), ReadDataByIdentifier (0x22), RoutineControl (0x31), ECUReset (0x11). Tester address 0x712, response address 0x71A.
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'HMI-Statusanzeige'
|
||||
header: 'HMI status display'
|
||||
level: 1.10
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -9,6 +9,6 @@ links: []
|
||||
asil: QM
|
||||
---
|
||||
|
||||
# SYS-010: HMI-Statusanzeige
|
||||
# SYS-010: HMI status display
|
||||
|
||||
Der EPB-Status muss dem Fahrer signalisiert werden: LED am Schalter (an = Apply, aus = Release, blinkend = Fehler) sowie Text im Kombi-Display via CAN-Bus (Frame-ID 0x3A0, 50 Hz).
|
||||
The EPB status must be signalled to the driver: LED on the switch (on = applied, off = released, blinking = error) and a text in the instrument cluster via CAN bus (frame ID 0x3A0, 50 Hz).
|
||||
|
||||
+4
-4
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Kein ungewolltes Loesen der Parkbremse im Stillstand'
|
||||
header: 'No unintended release of the parking brake during standstill'
|
||||
level: 1.1
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -9,9 +9,9 @@ links: []
|
||||
asil: D
|
||||
---
|
||||
|
||||
# SG-001: Kein ungewolltes Loesen der Parkbremse im Stillstand
|
||||
# SG-001: No unintended release of the parking brake during standstill
|
||||
|
||||
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).
|
||||
The EPB shall not unintentionally release while the vehicle is at a standstill. Derived from HARA hazards H-01 (unintended release during parking) and H-04 (clamping force loss in hold state).
|
||||
|
||||
**FTTI:** 5 s (H-01) / 30 s (H-04).
|
||||
**Safe State:** APPLIED (Klemmkraft halten).
|
||||
**Safe state:** APPLIED (maintain clamping force).
|
||||
|
||||
+4
-4
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Kein ungewolltes Festklemmen waehrend der Fahrt'
|
||||
header: 'No unintended clamping while driving'
|
||||
level: 1.2
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -9,9 +9,9 @@ links: []
|
||||
asil: D
|
||||
---
|
||||
|
||||
# SG-002: Kein ungewolltes Festklemmen waehrend der Fahrt
|
||||
# SG-002: No unintended clamping while driving
|
||||
|
||||
Die EPB darf nicht waehrend der Fahrt ungewollt festklemmen. Abgeleitet aus HARA-Hazard H-02.
|
||||
The EPB shall not unintentionally clamp while the vehicle is moving. Derived from HARA hazard H-02.
|
||||
|
||||
**FTTI:** 100 ms.
|
||||
**Safe State:** Aktor stop (kein Apply einleiten).
|
||||
**Safe state:** Actuator stop (do not initiate apply).
|
||||
|
||||
+4
-4
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Schutz gegen Aktor-Ueberlast'
|
||||
header: 'Protection against actuator overload'
|
||||
level: 1.3
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -9,9 +9,9 @@ links: []
|
||||
asil: A
|
||||
---
|
||||
|
||||
# SG-003: Schutz gegen Aktor-Ueberlast
|
||||
# SG-003: Protection against actuator overload
|
||||
|
||||
Das System muss Aktor-Motorschaeden durch Ueberstrom verhindern. Abgeleitet aus HARA-Hazard H-05.
|
||||
The system shall prevent actuator motor damage due to overcurrent. Derived from HARA hazard H-05.
|
||||
|
||||
**FTTI:** 100 ms.
|
||||
**Safe State:** Aktor abschalten, DTC setzen.
|
||||
**Safe state:** Disable actuator, set DTC.
|
||||
|
||||
+4
-4
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Zuverlaessige Hill-Hold-Uebergabe'
|
||||
header: 'Reliable hill-hold handover'
|
||||
level: 1.4
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -9,9 +9,9 @@ links: []
|
||||
asil: C
|
||||
---
|
||||
|
||||
# SG-004: Zuverlaessige Hill-Hold-Uebergabe
|
||||
# SG-004: Reliable hill-hold handover
|
||||
|
||||
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.
|
||||
When the driver releases the brake pedal on an incline, the EPB shall take over the braking force before the vehicle starts rolling. Derived from HARA hazard H-06.
|
||||
|
||||
**FTTI:** 500 ms.
|
||||
**Safe State:** Apply einleiten.
|
||||
**Safe state:** Initiate apply.
|
||||
|
||||
+4
-4
@@ -1,7 +1,7 @@
|
||||
---
|
||||
active: true
|
||||
derived: false
|
||||
header: 'Reaktion auf Fahreranforderung'
|
||||
header: 'Response to driver requests'
|
||||
level: 1.5
|
||||
normative: true
|
||||
reviewed: null
|
||||
@@ -9,8 +9,8 @@ links: []
|
||||
asil: B
|
||||
---
|
||||
|
||||
# SG-005: Reaktion auf Fahreranforderung
|
||||
# SG-005: Response to driver requests
|
||||
|
||||
Das System muss in spezifizierter Zeit auf Fahrer-Apply- und Release-Anforderungen reagieren. Abgeleitet aus HARA-Hazards H-03 und H-07.
|
||||
The system shall respond to driver apply and release requests within specified times. Derived from HARA hazards H-03 and H-07.
|
||||
|
||||
**Reaktionszeit:** Apply <= 800 ms, Release <= 1500 ms.
|
||||
**Response time:** apply <= 800 ms, release <= 1500 ms.
|
||||
|
||||
+349
-333
File diff suppressed because it is too large
Load Diff
@@ -1,18 +1,20 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Erzeugt eine HTML-Startseite (Dashboard) fuer demo-epb.
|
||||
Generate an HTML landing page (dashboard) for demo-epb.
|
||||
|
||||
Scant das Repo nach Word-Dokumenten, Reports, Code, Tests, Architektur, und
|
||||
schreibt build/index.html mit klickbaren Links.
|
||||
Scans the repo for Word documents, reports, code, tests, architecture, and
|
||||
writes build/index.html with clickable links.
|
||||
|
||||
Run nach `make test && make coverage && make docs && make test-report && python3 tools/traceability.py publish docs/traceability && python3 tools/render_plantuml.py`.
|
||||
Run after `make test && make coverage && make docs && make test-report &&
|
||||
python3 tools/traceability.py publish docs/traceability &&
|
||||
python3 tools/render_plantuml.py`.
|
||||
|
||||
Output:
|
||||
build/index.html — standalone, oeffnen mit Browser
|
||||
build/index.html — standalone, open in a browser
|
||||
|
||||
Verwendung im Release-Bundle:
|
||||
- Liegt bei demo-epb-vX.Y.Z/index.html
|
||||
- Verlinkt alle anderen Bundle-Inhalte relativ
|
||||
Use in the release bundle:
|
||||
- Lives at demo-epb-vX.Y.Z/index.html
|
||||
- Links to all other bundle contents using relative paths
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
@@ -66,20 +68,11 @@ def collect_docs(rel_dir: str, in_release: bool = False) -> list[tuple[str, str]
|
||||
if not d.exists():
|
||||
return out
|
||||
for f in sorted(d.glob("*.docx")):
|
||||
# In release bundle, paths are different; here we use relative-to-repo.
|
||||
href = os.path.relpath(f, REPO)
|
||||
# If running for in_release context, paths need adjustment, but for now
|
||||
# we always use repo-relative.
|
||||
out.append((f.stem, href))
|
||||
return out
|
||||
|
||||
|
||||
def status_for(path: Path) -> str:
|
||||
if path.exists():
|
||||
return "ok"
|
||||
return "missing"
|
||||
|
||||
|
||||
def kpi_card(label: str, value: str, sub: str = "", color: str = "#1f3864") -> str:
|
||||
return f"""
|
||||
<div class='kpi'>
|
||||
@@ -92,7 +85,7 @@ def kpi_card(label: str, value: str, sub: str = "", color: str = "#1f3864") -> s
|
||||
|
||||
def doc_section(title: str, docs: list[tuple[str, str]], description: str = "") -> str:
|
||||
if not docs:
|
||||
items = "<li class='cnt'>— keine Dokumente —</li>"
|
||||
items = "<li class='cnt'>— no documents —</li>"
|
||||
else:
|
||||
items = "\n".join(
|
||||
f'<li><a href="{html.escape(href)}">{html.escape(name)}</a></li>'
|
||||
@@ -109,7 +102,7 @@ def doc_section(title: str, docs: list[tuple[str, str]], description: str = "")
|
||||
|
||||
def report_link(name: str, href: str, exists: bool, desc: str) -> str:
|
||||
cls = "ok" if exists else "missing"
|
||||
label = name + ("" if exists else " (nicht generiert — Coverage/Build laufen lassen)")
|
||||
label = name + ("" if exists else " (not generated — run coverage/build)")
|
||||
if exists:
|
||||
return (f"<li><a href='{html.escape(href)}'>{html.escape(label)}</a> "
|
||||
f"<span class='cnt'>— {html.escape(desc)}</span></li>")
|
||||
@@ -139,9 +132,9 @@ def main() -> int:
|
||||
ncs = collect_docs("docs/non-conformities")
|
||||
misra_r = collect_docs("misra/records")
|
||||
|
||||
# Reports — Links zeigen auf BUNDLE-Pfade (relative zum index.html im Deploy).
|
||||
# Die CI-Pipeline deployt die Artefakte in genau diese Pfade,
|
||||
# darum ist deren Existenz hier irrelevant — Links werden immer emittiert.
|
||||
# Reports — links target BUNDLE paths (relative to index.html in deploy).
|
||||
# The CI pipeline copies artifacts to exactly these paths, so the links
|
||||
# always resolve in the deployed bundle.
|
||||
rep_paths = {
|
||||
"coverage": "coverage/index.html",
|
||||
"test": "reports/test-report.html",
|
||||
@@ -149,17 +142,11 @@ def main() -> int:
|
||||
"trace": "traceability/index.html",
|
||||
"cppcheck": "reports/cppcheck-report.xml",
|
||||
}
|
||||
# Existence-Check zum Anzeigen "Generated?" — gegen den CI/lokalen Build-Pfad.
|
||||
rep_cov_built = (REPO / "build" / "coverage-html" / "index.html").exists()
|
||||
rep_test_built = (REPO / "build" / "test-report.html").exists()
|
||||
rep_api_built = (REPO / "build" / "api-doc" / "html" / "index.html").exists()
|
||||
rep_trace_built = (REPO / "docs" / "traceability" / "index.html").exists()
|
||||
rep_cpp_built = (REPO / "build" / "cppcheck-report.xml").exists()
|
||||
|
||||
html_body = f"""<!doctype html>
|
||||
<html lang='de'><head>
|
||||
<html lang='en'><head>
|
||||
<meta charset='utf-8'>
|
||||
<title>demo-epb {html.escape(tag)} — Projekt-Dashboard</title>
|
||||
<title>demo-epb {html.escape(tag)} — Project Dashboard</title>
|
||||
<style>
|
||||
:root {{ color-scheme: light; }}
|
||||
body {{ font-family: -apple-system, "Segoe UI", sans-serif; margin: 0; padding: 0; color: #222; background: #f5f6f8; }}
|
||||
@@ -187,71 +174,64 @@ footer {{ text-align: center; color: #888; padding: 30px; font-size: 13px; }}
|
||||
</style></head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>demo-epb — Elektrische Parkbremse</h1>
|
||||
<div class='meta'>Version <strong>{html.escape(tag)}</strong> · Commit <code>{html.escape(sha)}</code> · Generiert {html.escape(now)}</div>
|
||||
<h1>demo-epb — Electric Parking Brake</h1>
|
||||
<div class='meta'>Version <strong>{html.escape(tag)}</strong> · Commit <code>{html.escape(sha)}</code> · Generated {html.escape(now)}</div>
|
||||
</header>
|
||||
<main>
|
||||
|
||||
<div class='banner'>
|
||||
<strong>Demo-Projekt:</strong> Vollstaendige Demo des
|
||||
<strong>Demo project:</strong> Complete demonstration of the
|
||||
<a href='https://gitea.slohmaier.com/slohmaier/dev-process'>slohmaier Dev Process</a>.
|
||||
Diese Software ist bewusst kein Produktivcode, sondern Showcase der Engineering-Methodik.
|
||||
This software is intentionally not production code; it is a showcase of the engineering method.
|
||||
</div>
|
||||
|
||||
<div class='kpis'>
|
||||
{kpi_card("Safety Goals", str(n_sg), "ASIL D/D/A/C/B", "#d62728")}
|
||||
{kpi_card("System Reqs", str(n_sys), f"in reqs/sys/")}
|
||||
{kpi_card("SW Reqs", str(n_swe), f"in reqs/swe/")}
|
||||
{kpi_card("Arch-Elemente", f"{n_sa+n_swa}", f"{n_sa} SA + {n_swa} SWA")}
|
||||
{kpi_card("Komponenten", f"{n_impl}", f"+ {n_stubs} Stubs", "#2ca02c")}
|
||||
{kpi_card("Unit-Tests", str(n_tests), "Alle gruen", "#2ca02c")}
|
||||
{kpi_card("Arch Elements", f"{n_sa+n_swa}", f"{n_sa} SA + {n_swa} SWA")}
|
||||
{kpi_card("Components", f"{n_impl}", f"+ {n_stubs} stubs", "#2ca02c")}
|
||||
{kpi_card("Unit tests", str(n_tests), "All green", "#2ca02c")}
|
||||
</div>
|
||||
|
||||
<div class='cols'>
|
||||
|
||||
<section>
|
||||
<h2>Plaene (Word)</h2>
|
||||
<ul>
|
||||
"""
|
||||
for name, href in plans:
|
||||
if not href.startswith("docs/safety") and not href.startswith("docs/manuals"):
|
||||
html_body += f" <li><a href='{html.escape(href)}'>{html.escape(name)}</a></li>\n"
|
||||
html_body += " </ul></section>\n"
|
||||
|
||||
html_body += doc_section("Funktionale Sicherheit (Word)", safety,
|
||||
"HARA, Safety Case, FMEDA, Compliance, Verification, Tool-Qualification")
|
||||
|
||||
html_body += "<div class='cols'>"
|
||||
html_body += doc_section("Plans (Word)", plans,
|
||||
"Project Manual, PID, PM Plan, QA Plan, SWE Plan, Test Plan, CM Plan, RM Plan")
|
||||
html_body += doc_section("Functional Safety (Word)", safety,
|
||||
"HARA, Safety Case, FMEDA, Compliance, Verification, Tool Qualification")
|
||||
html_body += "</div><div class='cols'>"
|
||||
|
||||
html_body += doc_section("Manuals (Word)", manuals,
|
||||
"End-User + Werkstatt-Doku")
|
||||
"End-user + workshop documentation")
|
||||
|
||||
audit_docs = reviews + ncs + misra_r
|
||||
html_body += doc_section("Audit-Artefakte (Word)", audit_docs,
|
||||
"Reviews, Non-Conformities, MISRA-Deviation-Records")
|
||||
html_body += doc_section("Audit Artifacts (Word)", audit_docs,
|
||||
"Reviews, non-conformities, MISRA deviation records")
|
||||
|
||||
html_body += "</div>"
|
||||
|
||||
# Reports — Links immer setzen, Bundle-Pfade.
|
||||
html_body += "<section><h2>Engineering-Reports (CI-generiert)</h2><ul>\n"
|
||||
html_body += report_link("Traceability-Matrix", rep_paths["trace"], True,
|
||||
"SG -> SYS -> SA, SWE -> SWA -> Code+Test, bidirektional verifiziert")
|
||||
html_body += report_link("Test-Summary", rep_paths["test"], True,
|
||||
f"{n_tests} Unit-Tests mit Anforderungs-Mapping")
|
||||
# Reports — always emit links, bundle-relative paths.
|
||||
html_body += "<section><h2>Engineering Reports (CI-generated)</h2><ul>\n"
|
||||
html_body += report_link("Traceability Matrix", rep_paths["trace"], True,
|
||||
"SG -> SYS -> SA, SWE -> SWA -> Code+Test, verified bidirectionally")
|
||||
html_body += report_link("Test Summary", rep_paths["test"], True,
|
||||
f"{n_tests} unit tests with requirement mapping")
|
||||
html_body += report_link("Coverage (gcov/lcov)", rep_paths["coverage"], True,
|
||||
"Statement + Branch Coverage, klickbar bis Zeilen-Level")
|
||||
html_body += report_link("API-Dokumentation (Doxygen)", rep_paths["api"], True,
|
||||
"Alle Header + Funktionen, mit @arch/@reqs/@asil")
|
||||
html_body += report_link("Cppcheck-Report (HTML)", "reports/cppcheck/index.html", True,
|
||||
"Statische Analyse + MISRA-Findings, klickbar pro Datei")
|
||||
html_body += report_link("Cppcheck-Report (XML, Roh)", rep_paths["cppcheck"], True,
|
||||
"Maschinen-lesbares Format fuer eigene Tools")
|
||||
"Statement + branch coverage, drill down to line level")
|
||||
html_body += report_link("API Documentation (Doxygen)", rep_paths["api"], True,
|
||||
"All headers + functions, with @arch/@reqs/@asil")
|
||||
html_body += report_link("Cppcheck Report (HTML)", "reports/cppcheck/index.html", True,
|
||||
"Static analysis + MISRA findings, clickable per file")
|
||||
html_body += report_link("Cppcheck Report (XML, raw)", rep_paths["cppcheck"], True,
|
||||
"Machine-readable format for your own tools")
|
||||
html_body += "</ul></section>"
|
||||
|
||||
# Diagrams
|
||||
diagrams = sorted((REPO / "docs" / "diagrams").glob("*.svg"))
|
||||
if diagrams:
|
||||
html_body += "<section><h2>Architektur-Diagramme (PlantUML)</h2><ul>"
|
||||
html_body += "<section><h2>Architecture Diagrams (PlantUML)</h2><ul>"
|
||||
for d in diagrams:
|
||||
href = os.path.relpath(d, REPO)
|
||||
html_body += f" <li><a href='{html.escape(href)}'>{html.escape(d.stem)}</a></li>\n"
|
||||
@@ -260,24 +240,24 @@ footer {{ text-align: center; color: #888; padding: 30px; font-size: 13px; }}
|
||||
# Source code links
|
||||
html_body += """
|
||||
<section>
|
||||
<h2>Source-Code</h2>
|
||||
<h2>Source Code</h2>
|
||||
<ul>
|
||||
<li><a href='src/safety_manager.c'>safety_manager.c</a> — Safety Manager (ASIL-D, Hill-Hold + Auto-Apply + Drive-Away)</li>
|
||||
<li><a href='src/apply_controller.c'>apply_controller.c</a> — Apply Controller (ASIL-D, State Machine)</li>
|
||||
<li><a href='src/actuator_driver.c'>actuator_driver.c</a> — Actuator Driver (ASIL-B, Overcurrent-Cutoff)</li>
|
||||
<li><a href='src/safety_manager.c'>safety_manager.c</a> — Safety Manager (ASIL-D: Hill-Hold + Auto-Apply + Drive-Away)</li>
|
||||
<li><a href='src/apply_controller.c'>apply_controller.c</a> — Apply Controller (ASIL-D, state machine)</li>
|
||||
<li><a href='src/actuator_driver.c'>actuator_driver.c</a> — Actuator Driver (ASIL-B, overcurrent cutoff)</li>
|
||||
<li><a href='src/switch_debouncer.c'>switch_debouncer.c</a> — Switch Debouncer (QM)</li>
|
||||
<li class='cnt'>Plus 6 Stub-Header in <a href='src/stubs/'>src/stubs/</a></li>
|
||||
<li class='cnt'>Plus 6 stub headers in <a href='src/stubs/'>src/stubs/</a></li>
|
||||
</ul>
|
||||
</section>
|
||||
"""
|
||||
|
||||
html_body += f"""
|
||||
<section>
|
||||
<h2>Externe Links</h2>
|
||||
<h2>External Links</h2>
|
||||
<ul>
|
||||
<li><a href='https://gitea.slohmaier.com/slohmaier/demo-epb'>Gitea-Repo</a></li>
|
||||
<li><a href='https://gitea.slohmaier.com/slohmaier/demo-epb'>Gitea repo</a></li>
|
||||
<li><a href='https://gitea.slohmaier.com/slohmaier/demo-epb/releases'>Releases</a></li>
|
||||
<li><a href='https://gitea.slohmaier.com/slohmaier/dev-process'>Methodik-Repo (dev-process)</a></li>
|
||||
<li><a href='https://gitea.slohmaier.com/slohmaier/dev-process'>Methodology repo (dev-process)</a></li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"""
|
||||
Erzeugt einen Test-Summary-Report aus dem Output unserer Unit-Tests.
|
||||
|
||||
Liest die Test-Output-Datei (build/test-output.txt) und erzeugt:
|
||||
Reads the test-output file (build/test-output.txt) and produces:
|
||||
- build/test-report.md
|
||||
- build/test-report.html
|
||||
|
||||
@@ -67,7 +67,7 @@ def main() -> int:
|
||||
output = TEST_OUTPUT.read_text()
|
||||
results = parse_output(output)
|
||||
if not results:
|
||||
print("ERROR: keine Test-Suite im Output gefunden.")
|
||||
print("ERROR: no test suite found in the output.")
|
||||
return 1
|
||||
|
||||
total = sum(r["total"] for r in results)
|
||||
@@ -77,11 +77,11 @@ def main() -> int:
|
||||
|
||||
# Markdown
|
||||
md = [f"# demo-epb — Test Summary Report\n\n",
|
||||
f"**Datum:** {now}\n\n",
|
||||
f"**Gesamt:** {total} Tests, {passed} bestanden, {failed} fehlgeschlagen\n\n",
|
||||
f"**Date:** {now}\n\n",
|
||||
f"**Total:** {total} tests, {passed} passed, {failed} failed\n\n",
|
||||
f"**Status:** {'PASS' if failed == 0 else 'FAIL'}\n\n",
|
||||
"## Pro Test-Suite\n\n",
|
||||
"| Suite | Anzahl | Bestanden | Fehlgeschlagen | Anforderungen |\n",
|
||||
"## Per Test Suite\n\n",
|
||||
"| Suite | Count | Passed | Failed | Requirements |\n",
|
||||
"|-------|--------|-----------|-----------------|---------------|\n"]
|
||||
for r in results:
|
||||
reqs = ", ".join(reqs_for(r["binary"])) or "—"
|
||||
@@ -113,12 +113,12 @@ def main() -> int:
|
||||
".pass-badge{background:#0a0}.fail-badge{background:#c00}",
|
||||
"</style></head><body>",
|
||||
"<h1>demo-epb — Test Summary Report</h1>",
|
||||
f"<p><strong>Datum:</strong> {now}</p>",
|
||||
f"<p><strong>Gesamt:</strong> {total} Tests, {passed} bestanden, {failed} fehlgeschlagen — "
|
||||
f"<p><strong>Date:</strong> {now}</p>",
|
||||
f"<p><strong>Total:</strong> {total} tests, {passed} passed, {failed} failed — "
|
||||
f"<span class='badge {badge_cls}'>{badge_txt}</span></p>",
|
||||
"<h2>Pro Test-Suite</h2>",
|
||||
"<table><tr><th>Suite</th><th>Anzahl</th><th>Bestanden</th>"
|
||||
"<th>Fehlgeschlagen</th><th>Anforderungen</th></tr>",
|
||||
"<h2>Per Test Suite</h2>",
|
||||
"<table><tr><th>Suite</th><th>Count</th><th>Passed</th>"
|
||||
"<th>Failed</th><th>Requirements</th></tr>",
|
||||
]
|
||||
for r in results:
|
||||
reqs = ", ".join(reqs_for(r["binary"])) or "—"
|
||||
|
||||
+21
-21
@@ -1,17 +1,17 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Traceability-Werkzeug fuer demo-epb.
|
||||
Traceability tool for demo-epb.
|
||||
|
||||
Liest Markdown-Items aus safety/sg, reqs/sys, reqs/swe, arch/sys, arch/swe und
|
||||
verifiziert die Traceability-Kette:
|
||||
Reads Markdown items from safety/sg, reqs/sys, reqs/swe, arch/sys, arch/swe and
|
||||
verifies the traceability chain:
|
||||
|
||||
SG <-- SYS <-- SA
|
||||
<-- SWE <-- SWA <-- Code (@arch)
|
||||
<-- Tests (@reqs)
|
||||
|
||||
Subcommands:
|
||||
check Validiert Konsistenz, exit 1 bei Fehlern
|
||||
publish DIR Schreibt HTML + JSON nach DIR/
|
||||
check Validates consistency, exits 1 on errors
|
||||
publish DIR Writes HTML + JSON to DIR/
|
||||
|
||||
Run:
|
||||
python3 tools/traceability.py check
|
||||
@@ -160,27 +160,27 @@ def check_code_test_mapping(items: dict[str, Item]) -> list[str]:
|
||||
src = REPO / src_rel
|
||||
arch_tags, _ = extract_tags(src)
|
||||
if swa_id not in arch_tags:
|
||||
errors.append(f"{src_rel}: header @arch enthaelt {swa_id} nicht "
|
||||
f"(gefunden: {arch_tags or '—'})")
|
||||
errors.append(f"{src_rel}: header @arch does not contain {swa_id} "
|
||||
f"(found: {arch_tags or '—'})")
|
||||
|
||||
# For each test, verify @reqs covers the SWE that the corresponding SWA links to
|
||||
for test_file, swa_id in IMPLEMENTED_TESTS.items():
|
||||
test_path = REPO / "tests" / "unit" / test_file
|
||||
_, reqs_in_test = extract_tags(test_path)
|
||||
if not reqs_in_test:
|
||||
errors.append(f"tests/unit/{test_file}: kein @reqs Tag im Header")
|
||||
errors.append(f"tests/unit/{test_file}: no @reqs tag in header")
|
||||
continue
|
||||
swa = items.get(swa_id)
|
||||
if swa is None:
|
||||
errors.append(f"tests/unit/{test_file}: referenziertes "
|
||||
f"{swa_id} nicht gefunden")
|
||||
errors.append(f"tests/unit/{test_file}: referenced "
|
||||
f"{swa_id} not found")
|
||||
continue
|
||||
swa_swe = set(swa.links)
|
||||
test_swe = set(reqs_in_test)
|
||||
missing = swa_swe - test_swe
|
||||
if missing:
|
||||
errors.append(f"tests/unit/{test_file}: deckt nicht alle SWE "
|
||||
f"der {swa_id} ab — fehlend: {sorted(missing)}")
|
||||
errors.append(f"tests/unit/{test_file}: does not cover all SWE of "
|
||||
f"{swa_id} — missing: {sorted(missing)}")
|
||||
|
||||
return errors
|
||||
|
||||
@@ -241,7 +241,7 @@ def cmd_check(items: dict[str, Item]) -> int:
|
||||
for e in errors:
|
||||
print(f" - {e}")
|
||||
return 1
|
||||
print("OK — Traceability vollstaendig (SG → SYS → SA, SWE → SWA → Code+Test).")
|
||||
print("OK — Traceability complete (SG → SYS → SA, SWE → SWA → Code+Test).")
|
||||
return 0
|
||||
|
||||
|
||||
@@ -314,7 +314,7 @@ def cmd_publish(items: dict[str, Item], out_dir: Path) -> int:
|
||||
".missing{color:#c00}",
|
||||
"</style></head><body>",
|
||||
"<h1>demo-epb — Traceability Matrix</h1>",
|
||||
"<p>Vollstaendige Kette: <code>SG → SYS → SA, SWE → SWA → Code (@arch) + Test (@reqs)</code></p>",
|
||||
"<p>Complete chain: <code>SG → SYS → SA, SWE → SWA → Code (@arch) + Test (@reqs)</code></p>",
|
||||
"<p>",
|
||||
]
|
||||
for p, _, label in SOURCES:
|
||||
@@ -325,9 +325,9 @@ def cmd_publish(items: dict[str, Item], out_dir: Path) -> int:
|
||||
|
||||
parts.append("<table>")
|
||||
parts.append(
|
||||
"<tr><th>Safety Goal</th><th>System-Requirement</th>"
|
||||
"<th>System-Arch</th><th>Software-Req</th>"
|
||||
"<th>Software-Arch</th><th>Code</th><th>Test</th></tr>"
|
||||
"<tr><th>Safety Goal</th><th>System Requirement</th>"
|
||||
"<th>System Arch</th><th>Software Req</th>"
|
||||
"<th>Software Arch</th><th>Code</th><th>Test</th></tr>"
|
||||
)
|
||||
|
||||
def cell_items(ids: list[str]) -> str:
|
||||
@@ -377,8 +377,8 @@ def cmd_publish(items: dict[str, Item], out_dir: Path) -> int:
|
||||
parts.append("</table>")
|
||||
|
||||
# Code/Test details
|
||||
parts.append("<h2>Code → Architektur</h2>")
|
||||
parts.append("<table><tr><th>Datei</th><th>@arch</th><th>@reqs</th></tr>")
|
||||
parts.append("<h2>Code → Architecture</h2>")
|
||||
parts.append("<table><tr><th>File</th><th>@arch</th><th>@reqs</th></tr>")
|
||||
for swa_id, src_rel in IMPLEMENTED_SWA.items():
|
||||
arch, reqs = extract_tags(REPO / src_rel)
|
||||
parts.append(
|
||||
@@ -388,8 +388,8 @@ def cmd_publish(items: dict[str, Item], out_dir: Path) -> int:
|
||||
)
|
||||
parts.append("</table>")
|
||||
|
||||
parts.append("<h2>Test → Anforderungen</h2>")
|
||||
parts.append("<table><tr><th>Test-Datei</th><th>Decklt SWA</th><th>@reqs</th></tr>")
|
||||
parts.append("<h2>Test → Requirements</h2>")
|
||||
parts.append("<table><tr><th>Test file</th><th>Covers SWA</th><th>@reqs</th></tr>")
|
||||
for test_file, swa_id in IMPLEMENTED_TESTS.items():
|
||||
_, reqs = extract_tags(REPO / "tests" / "unit" / test_file)
|
||||
parts.append(
|
||||
|
||||
Reference in New Issue
Block a user