Safety Feature View

This document provides a vertical, feature-level view of the safety functionality in the BrewMaster Pro 3000. While the architecture document presents a horizontal, layer-by-layer decomposition, this view cuts through all layers to show how the safety feature is realised end-to-end — from the system-level safety requirement down to architectural components, interfaces, and verification tests.

This perspective is particularly relevant for functional safety engineers performing impact analysis: any change to a safety-related element can be traced upward to the customer need it protects, and downward to every component and test that must be reviewed.

Full Safety Chain

The following diagram shows the complete vertical traceability of the safety feature — from the system requirement through software requirements, architectural components, interfaces, and test cases.

@startuml

' Config

top to bottom direction


' Nodes definition 

interface "<size:12>Interface</size>\n**Brew Controller**\n**Safety Status**\n**Interface**\n<size:10>INTF_BREW_CTRL_STATUS</size>" as INTF_BREW_CTRL_STATUS [[../coffee-machine/architecture.html#INTF_BREW_CTRL_STATUS]] #16a085
component "<size:12>Component</size>\n**Temperature**\n**Controller**\n**Module**\n<size:10>COMP_TEMP_CTRL</size>" as COMP_TEMP_CTRL [[../coffee-machine/architecture.html#COMP_TEMP_CTRL]] #3498db
interface "<size:12>Interface</size>\n**Temperature**\n**Controller**\n**Safety Status**\n**Interface**\n<size:10>INTF_TEMP_CTRL_STATUS</size>" as INTF_TEMP_CTRL_STATUS [[../coffee-machine/architecture.html#INTF_TEMP_CTRL_STATUS]] #16a085
component "<size:12>Component</size>\n**Safety Monitor**\n**Module**\n<size:10>COMP_SAFETY_MON</size>" as COMP_SAFETY_MON [[../coffee-machine/architecture.html#COMP_SAFETY_MON]] #3498db
interface "<size:12>Interface</size>\n**Safety Command**\n**Interface**\n<size:10>INTF_SAFETY_CMD</size>" as INTF_SAFETY_CMD [[../coffee-machine/architecture.html#INTF_SAFETY_CMD]] #16a085
node "<size:12>Requirement</size>\n**Heat Water**\n<size:10>REQ_HEAT_WATER</size>" as REQ_HEAT_WATER [[../coffee-machine/requirements.html#REQ_HEAT_WATER]] #FFB300
node "<size:12>Requirement</size>\n**Safety Shutdown**\n<size:10>REQ_SAFETY_SHUTDOWN</size>" as REQ_SAFETY_SHUTDOWN [[../coffee-machine/requirements.html#REQ_SAFETY_SHUTDOWN]] #FFB300
node "<size:12>SW_Requirement</size>\n**Temperature**\n**Regulation**\n<size:10>SWREQ_TEMP_REGULATION</size>" as SWREQ_TEMP_REGULATION [[../coffee-machine/sw_requirements.html#SWREQ_TEMP_REGULATION]] #a8f578
node "<size:12>SW_Requirement</size>\n**Over-**\n**Temperature**\n**Shutdown**\n<size:10>SWREQ_OVERTEMP_SHUTDOWN</size>" as SWREQ_OVERTEMP_SHUTDOWN [[../coffee-machine/sw_requirements.html#SWREQ_OVERTEMP_SHUTDOWN]] #a8f578
node "<size:12>SW_Requirement</size>\n**Water Level**\n**Monitoring**\n<size:10>SWREQ_WATER_LEVEL</size>" as SWREQ_WATER_LEVEL [[../coffee-machine/sw_requirements.html#SWREQ_WATER_LEVEL]] #a8f578
node "<size:12>Test Case</size>\n**Test**\n**Temperature**\n**Control**\n<size:10>TEST_TEMP_CONTROL</size>" as TEST_TEMP_CONTROL [[../coffee-machine/testing.html#TEST_TEMP_CONTROL]] #A6BDD7
node "<size:12>Test Case</size>\n**Test Safety**\n**Shutdown**\n<size:10>TEST_SAFETY_SHUTDOWN</size>" as TEST_SAFETY_SHUTDOWN [[../coffee-machine/testing.html#TEST_SAFETY_SHUTDOWN]] #A6BDD7

' Connection definition 

COMP_TEMP_CTRL --> SWREQ_TEMP_REGULATION: implements\n
COMP_TEMP_CTRL -[dashed]-( INTF_SAFETY_CMD: uses\n
INTF_TEMP_CTRL_STATUS -[bold]- COMP_TEMP_CTRL: provided by\n
COMP_SAFETY_MON --> SWREQ_OVERTEMP_SHUTDOWN: implements\n
COMP_SAFETY_MON --> SWREQ_WATER_LEVEL: implements\n
COMP_SAFETY_MON -[dashed]-( INTF_BREW_CTRL_STATUS: uses\n
COMP_SAFETY_MON -[dashed]-( INTF_TEMP_CTRL_STATUS: uses\n
INTF_SAFETY_CMD -[bold]- COMP_SAFETY_MON: provided by\n
SWREQ_TEMP_REGULATION --> REQ_HEAT_WATER: specifies\n
SWREQ_OVERTEMP_SHUTDOWN --> REQ_HEAT_WATER: specifies\n
SWREQ_OVERTEMP_SHUTDOWN --> REQ_SAFETY_SHUTDOWN: specifies\n
SWREQ_WATER_LEVEL --> REQ_SAFETY_SHUTDOWN: specifies\n
TEST_TEMP_CONTROL --> SWREQ_TEMP_REGULATION: specs\n
TEST_SAFETY_SHUTDOWN --> SWREQ_OVERTEMP_SHUTDOWN: specs\n
TEST_SAFETY_SHUTDOWN --> SWREQ_WATER_LEVEL: specs\n

@enduml

System-Level Safety Requirement

The safety feature originates from a single system-level requirement that mandates automatic shutdown under hazardous conditions:

Safety System Requirements

ID

Title

Status

Tags

REQ_HEAT_WATER

Heat Water

open

heating; safety

REQ_SAFETY_SHUTDOWN

Safety Shutdown

open

safety; critical

Software Safety Requirements

The system-level safety requirement is decomposed into two independent software requirements — one addressing thermal hazards and one addressing dry-run prevention:

Safety SW Requirements

ID

Title

Status

Traces to System Req

SWREQ_OVERTEMP_SHUTDOWN

Over-Temperature Shutdown

open

REQ_HEAT_WATER; REQ_SAFETY_SHUTDOWN

SWREQ_TEMP_REGULATION

Temperature Regulation

open

REQ_HEAT_WATER

SWREQ_WATER_LEVEL

Water Level Monitoring

open

REQ_SAFETY_SHUTDOWN

The following diagram shows how these software requirements refine the system requirement:

@startuml

' Config

top to bottom direction


' Nodes definition 

node "<size:12>Requirement</size>\n**Heat Water**\n<size:10>REQ_HEAT_WATER</size>" as REQ_HEAT_WATER [[../coffee-machine/requirements.html#REQ_HEAT_WATER]] #FFB300
node "<size:12>Requirement</size>\n**Safety Shutdown**\n<size:10>REQ_SAFETY_SHUTDOWN</size>" as REQ_SAFETY_SHUTDOWN [[../coffee-machine/requirements.html#REQ_SAFETY_SHUTDOWN]] #FFB300
node "<size:12>SW_Requirement</size>\n**Temperature**\n**Regulation**\n<size:10>SWREQ_TEMP_REGULATION</size>" as SWREQ_TEMP_REGULATION [[../coffee-machine/sw_requirements.html#SWREQ_TEMP_REGULATION]] #a8f578
node "<size:12>SW_Requirement</size>\n**Over-**\n**Temperature**\n**Shutdown**\n<size:10>SWREQ_OVERTEMP_SHUTDOWN</size>" as SWREQ_OVERTEMP_SHUTDOWN [[../coffee-machine/sw_requirements.html#SWREQ_OVERTEMP_SHUTDOWN]] #a8f578
node "<size:12>SW_Requirement</size>\n**Water Level**\n**Monitoring**\n<size:10>SWREQ_WATER_LEVEL</size>" as SWREQ_WATER_LEVEL [[../coffee-machine/sw_requirements.html#SWREQ_WATER_LEVEL]] #a8f578

' Connection definition 

SWREQ_TEMP_REGULATION --> REQ_HEAT_WATER: specifies\n
SWREQ_OVERTEMP_SHUTDOWN --> REQ_HEAT_WATER: specifies\n
SWREQ_OVERTEMP_SHUTDOWN --> REQ_SAFETY_SHUTDOWN: specifies\n
SWREQ_WATER_LEVEL --> REQ_SAFETY_SHUTDOWN: specifies\n

@enduml

Safety Architecture

The software requirements are implemented by the Safety Monitor Module, which resides in its own dedicated Safety Layer — isolated from application and control logic. The Safety Monitor observes all other subsystems through status interfaces and can override them via the Safety Command Interface.

@startuml

' Config

top to bottom direction


' Nodes definition 

interface "<size:12>Interface</size>\n**Brew Controller**\n**Safety Status**\n**Interface**\n<size:10>INTF_BREW_CTRL_STATUS</size>" as INTF_BREW_CTRL_STATUS [[../coffee-machine/architecture.html#INTF_BREW_CTRL_STATUS]] #16a085
component "<size:12>Component</size>\n**Temperature**\n**Controller**\n**Module**\n<size:10>COMP_TEMP_CTRL</size>" as COMP_TEMP_CTRL [[../coffee-machine/architecture.html#COMP_TEMP_CTRL]] #3498db
interface "<size:12>Interface</size>\n**Temperature**\n**Controller**\n**Safety Status**\n**Interface**\n<size:10>INTF_TEMP_CTRL_STATUS</size>" as INTF_TEMP_CTRL_STATUS [[../coffee-machine/architecture.html#INTF_TEMP_CTRL_STATUS]] #16a085
package "<size:12>Architectural Layer</size>\n**Safety Layer**\n<size:10>LAYER_SAFETY</size>" as LAYER_SAFETY [[../coffee-machine/architecture.html#LAYER_SAFETY]] #8e44ad{
'child needs:
component "<size:12>Component</size>\n**Safety Monitor**\n**Module**\n<size:10>COMP_SAFETY_MON</size>" as COMP_SAFETY_MON [[../coffee-machine/architecture.html#COMP_SAFETY_MON]] #3498db
interface "<size:12>Interface</size>\n**Safety Command**\n**Interface**\n<size:10>INTF_SAFETY_CMD</size>" as INTF_SAFETY_CMD [[../coffee-machine/architecture.html#INTF_SAFETY_CMD]] #16a085
}
interface "<size:12>Interface</size>\n**Sensor Data**\n**Interface**\n<size:10>INTF_SENSOR_DATA</size>" as INTF_SENSOR_DATA [[../coffee-machine/architecture.html#INTF_SENSOR_DATA]] #16a085
node "<size:12>SW_Requirement</size>\n**Temperature**\n**Regulation**\n<size:10>SWREQ_TEMP_REGULATION</size>" as SWREQ_TEMP_REGULATION [[../coffee-machine/sw_requirements.html#SWREQ_TEMP_REGULATION]] #a8f578
node "<size:12>SW_Requirement</size>\n**Over-**\n**Temperature**\n**Shutdown**\n<size:10>SWREQ_OVERTEMP_SHUTDOWN</size>" as SWREQ_OVERTEMP_SHUTDOWN [[../coffee-machine/sw_requirements.html#SWREQ_OVERTEMP_SHUTDOWN]] #a8f578
node "<size:12>SW_Requirement</size>\n**Water Level**\n**Monitoring**\n<size:10>SWREQ_WATER_LEVEL</size>" as SWREQ_WATER_LEVEL [[../coffee-machine/sw_requirements.html#SWREQ_WATER_LEVEL]] #a8f578

' Connection definition 

COMP_TEMP_CTRL --> SWREQ_TEMP_REGULATION: implements\n
COMP_TEMP_CTRL -[dashed]-( INTF_SAFETY_CMD: uses\n
COMP_TEMP_CTRL -[dashed]-( INTF_SENSOR_DATA: uses\n
INTF_TEMP_CTRL_STATUS -[bold]- COMP_TEMP_CTRL: provided by\n
COMP_SAFETY_MON --> SWREQ_OVERTEMP_SHUTDOWN: implements\n
COMP_SAFETY_MON --> SWREQ_WATER_LEVEL: implements\n
COMP_SAFETY_MON -[dashed]-( INTF_BREW_CTRL_STATUS: uses\n
COMP_SAFETY_MON -[dashed]-( INTF_SENSOR_DATA: uses\n
COMP_SAFETY_MON -[dashed]-( INTF_TEMP_CTRL_STATUS: uses\n
INTF_SAFETY_CMD -[bold]- COMP_SAFETY_MON: provided by\n

@enduml

The table below summarises the safety-relevant architectural elements and their roles:

Safety Architecture Elements

ID

Title

Type

Status

COMP_SAFETY_MON

Safety Monitor Module

Component

open

COMP_TEMP_CTRL

Temperature Controller Module

Component

open

INTF_BREW_CTRL_STATUS

Brew Controller Safety Status Interface

Interface

open

INTF_SAFETY_CMD

Safety Command Interface

Interface

open

INTF_TEMP_CTRL_STATUS

Temperature Controller Safety Status Interface

Interface

open

Safety Verification

The following test cases verify the safety requirements. Each test is linked back to the software requirements it covers:

Safety Test Cases

ID

Title

Status

Verifies

TEST_SAFETY_SHUTDOWN

Test Safety Shutdown

open

SWREQ_OVERTEMP_SHUTDOWN; SWREQ_WATER_LEVEL

TEST_TEMP_CONTROL

Test Temperature Control

open

SWREQ_TEMP_REGULATION

Safety Shutdown Sequence

The following sequence diagram shows the runtime behaviour when the Safety Monitor detects an over-temperature condition. It issues an EMERGENCY_STOP command on INTF_SAFETY_CMD to all controlled subsystems. All modules must respond within 100 ms.

@startuml

' Nodes definition 

participant "ADC Driver" as COMP_ADC_DRV
participant "Safety Monitor Module" as COMP_SAFETY_MON
participant "Temperature Controller Module" as COMP_TEMP_CTRL
participant "Brew Controller Module" as COMP_BREW_CTRL

' Connection definition 

COMP_ADC_DRV -> COMP_SAFETY_MON: temp=102°C (INTF_SENSOR_DATA — over-temp)
COMP_SAFETY_MON -> COMP_TEMP_CTRL: EMERGENCY_STOP → Temp Controller
COMP_TEMP_CTRL -> COMP_SAFETY_MON: fault_flags=OVERTEMP (INTF_TEMP_CTRL_STATUS)
COMP_SAFETY_MON -> COMP_BREW_CTRL: EMERGENCY_STOP → Brew Controller
COMP_BREW_CTRL -> COMP_SAFETY_MON: fault_flags=ABORT (INTF_BREW_CTRL_STATUS)
COMP_SAFETY_MON -> COMP_UI_MODULE: fault_event(OVERTEMP)

@enduml

Safety Shutdown Sequence

Complete Safety Traceability

The diagram below shows the full vertical chain from system requirement through to test verification, demonstrating complete bidirectional traceability of the safety feature:

@startuml

' Config

top to bottom direction


' Nodes definition 

component "<size:12>Component</size>\n**Temperature**\n**Controller**\n**Module**\n<size:10>COMP_TEMP_CTRL</size>" as COMP_TEMP_CTRL [[../coffee-machine/architecture.html#COMP_TEMP_CTRL]] #3498db
component "<size:12>Component</size>\n**Safety Monitor**\n**Module**\n<size:10>COMP_SAFETY_MON</size>" as COMP_SAFETY_MON [[../coffee-machine/architecture.html#COMP_SAFETY_MON]] #3498db
interface "<size:12>Interface</size>\n**Safety Command**\n**Interface**\n<size:10>INTF_SAFETY_CMD</size>" as INTF_SAFETY_CMD [[../coffee-machine/architecture.html#INTF_SAFETY_CMD]] #16a085
node "<size:12>Requirement</size>\n**Heat Water**\n<size:10>REQ_HEAT_WATER</size>" as REQ_HEAT_WATER [[../coffee-machine/requirements.html#REQ_HEAT_WATER]] #FFB300
node "<size:12>Requirement</size>\n**Safety Shutdown**\n<size:10>REQ_SAFETY_SHUTDOWN</size>" as REQ_SAFETY_SHUTDOWN [[../coffee-machine/requirements.html#REQ_SAFETY_SHUTDOWN]] #FFB300
node "<size:12>SW_Requirement</size>\n**Temperature**\n**Regulation**\n<size:10>SWREQ_TEMP_REGULATION</size>" as SWREQ_TEMP_REGULATION [[../coffee-machine/sw_requirements.html#SWREQ_TEMP_REGULATION]] #a8f578
node "<size:12>SW_Requirement</size>\n**Over-**\n**Temperature**\n**Shutdown**\n<size:10>SWREQ_OVERTEMP_SHUTDOWN</size>" as SWREQ_OVERTEMP_SHUTDOWN [[../coffee-machine/sw_requirements.html#SWREQ_OVERTEMP_SHUTDOWN]] #a8f578
node "<size:12>SW_Requirement</size>\n**Water Level**\n**Monitoring**\n<size:10>SWREQ_WATER_LEVEL</size>" as SWREQ_WATER_LEVEL [[../coffee-machine/sw_requirements.html#SWREQ_WATER_LEVEL]] #a8f578
node "<size:12>Test Case</size>\n**Test**\n**Temperature**\n**Control**\n<size:10>TEST_TEMP_CONTROL</size>" as TEST_TEMP_CONTROL [[../coffee-machine/testing.html#TEST_TEMP_CONTROL]] #A6BDD7
node "<size:12>Test Case</size>\n**Test Safety**\n**Shutdown**\n<size:10>TEST_SAFETY_SHUTDOWN</size>" as TEST_SAFETY_SHUTDOWN [[../coffee-machine/testing.html#TEST_SAFETY_SHUTDOWN]] #A6BDD7

' Connection definition 

COMP_TEMP_CTRL --> SWREQ_TEMP_REGULATION: implements\n
COMP_TEMP_CTRL -[dashed]-( INTF_SAFETY_CMD: uses\n
COMP_SAFETY_MON --> SWREQ_OVERTEMP_SHUTDOWN: implements\n
COMP_SAFETY_MON --> SWREQ_WATER_LEVEL: implements\n
INTF_SAFETY_CMD -[bold]- COMP_SAFETY_MON: provided by\n
SWREQ_TEMP_REGULATION --> REQ_HEAT_WATER: specifies\n
SWREQ_OVERTEMP_SHUTDOWN --> REQ_HEAT_WATER: specifies\n
SWREQ_OVERTEMP_SHUTDOWN --> REQ_SAFETY_SHUTDOWN: specifies\n
SWREQ_WATER_LEVEL --> REQ_SAFETY_SHUTDOWN: specifies\n
TEST_TEMP_CONTROL --> SWREQ_TEMP_REGULATION: specs\n
TEST_SAFETY_SHUTDOWN --> SWREQ_OVERTEMP_SHUTDOWN: specs\n
TEST_SAFETY_SHUTDOWN --> SWREQ_WATER_LEVEL: specs\n

@enduml

Coverage Summary

../_images/need_pie_d3ee4.svg