Safety-Critical Code nach IEC 61508 auf PIC-Basis

Safety-Critical Code nach IEC 61508 auf PIC-Basis ist für viele Unternehmen ein zentraler Schritt, wenn aus einer „normalen“ Embedded-Anwendung ein sicherheitsrelevantes System wird. Sobald Menschen, Umwelt oder teure Anlagen bei Fehlfunktionen gefährdet sind, reichen klassische „Best Practices“ nicht mehr aus. Die IEC 61508 fordert einen nachvollziehbaren Sicherheitslebenszyklus, eine systematische Risikobetrachtung, definierte Sicherheitsintegritätslevel (SIL) und vor allem: nachweisbare Maßnahmen gegen zufällige Hardwarefehler und systematische Softwarefehler. In der Praxis bedeutet das, dass Sie nicht nur „funktionierenden“ Code schreiben, sondern Code, dessen Entstehung, Verifikation und Verhalten im Fehlerfall überprüfbar und dokumentiert ist. PIC-Mikrocontroller (PIC16/18, PIC24/dsPIC, PIC32) werden dabei häufig eingesetzt, weil sie in der Industrie etabliert sind, lange verfügbar bleiben und eine klare Toolchain (z. B. MPLAB X, XC-Compiler) bieten. Der Kern der Aufgabe bleibt jedoch unabhängig vom Controller: Sie müssen Safety-Critical Code so entwickeln, dass er zu Ihrem SIL-Ziel passt, Sicherheitsanforderungen testbar macht, Diagnose- und Fehlerreaktionen sauber implementiert und die Tool- und Prozesskette auditfähig ist. Dieser Leitfaden zeigt Schritt für Schritt, wie Sie IEC-61508-konform auf PIC-Basis vorgehen, welche typischen Stolperfallen auftreten und wie Sie ein pragmatisches, aber belastbares Sicherheitskonzept in Code und Architektur übersetzen.

IEC 61508 im Überblick: Was die Norm von Embedded-Entwicklung unterscheidet

Die IEC 61508 ist eine Grundnorm für funktionale Sicherheit elektrischer/elektronischer/programmierbarer elektronischer Systeme (E/E/PE). Sie beschreibt einen Sicherheitslebenszyklus von der Risikoanalyse bis zur Außerbetriebnahme und fordert, dass technische Maßnahmen und Prozesse zur Fehlervermeidung und Fehlerbeherrschung nachweisbar umgesetzt werden. Zentral sind dabei zwei Fehlerkategorien:

  • Zufällige Hardwarefehler: z. B. Alterung, Fertigungsstreuung, elektromagnetische Einflüsse, Bitflips
  • Systematische Fehler: z. B. Spezifikationsfehler, Designfehler, Implementierungsfehler, Tool-Fehler

Für Safety-Critical Code ist vor allem der Umgang mit systematischen Fehlern entscheidend: Requirements müssen eindeutig sein, Änderungen kontrolliert, Tests geplant, Reviews dokumentiert und Freigaben nachvollziehbar. Eine hilfreiche öffentliche Einstiegsquelle ist die Übersicht zur funktionalen Sicherheit auf IEC 61508 (Überblick und Begrifflichkeiten). Für die konkrete Umsetzung in Ihrem Projekt sollten Sie selbstverständlich mit der offiziellen Normfassung arbeiten.

SIL verstehen: Von der Risikoanalyse zur Zielvorgabe für Software und Hardware

Die IEC 61508 verknüpft Risiken mit Sicherheitsfunktionen. Aus der Risikoanalyse und dem Sicherheitskonzept entsteht eine Zielvorgabe, typischerweise in Form eines SIL (Safety Integrity Level). SIL beeinflusst, wie streng Anforderungen an Entwicklungsprozesse, Verifikation, Diagnoseabdeckung und Architektur sind. In der Praxis wird für jede Sicherheitsfunktion festgelegt:

  • Sicherheitsziel: Was muss verhindert oder sicher erkannt werden?
  • Sicherer Zustand: Was passiert, wenn etwas schiefläuft?
  • Reaktionszeit: Wie schnell muss das System reagieren?
  • Diagnosekonzept: Welche Fehler müssen erkannt werden, welche dürfen latenter bleiben?

Oft werden im Kontext der Norm Größen wie PFDavg (Probability of Failure on Demand) oder PFH (Probability of dangerous Failure per Hour) verwendet. Für Software bedeutet das nicht, dass Sie „Fehlerraten von Code“ exakt messen können, sondern dass Software so entwickelt wird, dass systematische Fehler mit geeigneten Methoden minimiert werden und dass die Systemarchitektur Hardwarediagnosen und sichere Reaktionen ermöglicht.

Warum PIC in Safety-Projekten: Stärken und Grenzen realistisch einordnen

PIC-Controller sind in vielen Branchen verbreitet, von einfacher Steuerungslogik bis zu anspruchsvolleren Anwendungen mit dsPIC oder PIC32. Typische Gründe für den Einsatz in sicherheitsrelevanten Projekten sind:

  • Langzeitverfügbarkeit und stabile Produktfamilien
  • Toolchain-Konsistenz (MPLAB X, XC-Compiler, Debugger/Programmer)
  • Breite Peripherie und robuste Varianten für Industrieumgebungen
  • Dokumentation und Herstellerunterstützung, inkl. Safety- und Reliability-Unterlagen je nach Produktlinie

Grenzen ergeben sich vor allem durch fehlende Safety-Hardwarefunktionen bei manchen Basistypen oder durch eingeschränkte Diagnosemöglichkeiten. Entscheidend ist: IEC 61508 fordert keine „magische“ Safety-CPU, sondern eine nachweisbare Gesamtlösung. Das kann auch auf PIC-Basis gelingen, wenn Sie Architektur, Diagnosen und Prozesse passend auslegen. Als Startpunkt für Herstellerinformationen kann die Microchip-Website dienen; suchen Sie dort gezielt nach Safety Manuals, FMEDA-Informationen oder Functional-Safety-Programmen für Ihre konkrete Produktfamilie.

Sicherheitslebenszyklus in der Praxis: Von Anforderungen bis zur Freigabe

Safety-Critical Code entsteht nicht „nebenbei“. Ein schlanker, aber auditfähiger Ablauf umfasst typischerweise:

  • Safety Plan: Rollen, Verantwortlichkeiten, Artefakte, Review- und Teststrategie
  • Safety Requirements: funktional und nichtfunktional, inkl. Timing und Diagnoseanforderungen
  • Software-Architektur: Partitionierung, Zustandsmodell, Fehlerpfade
  • Implementierung: Coding-Standard, statische Analyse, definierte Compiler-Optionen
  • Verifikation: Reviews, Unit-Tests, Integrationstests, Systemtests, Traceability
  • Konfigurations- und Änderungsmanagement: Versionierung, Baselines, Freigabeprozesse

Für deutsche Unternehmen ist es häufig sinnvoll, zusätzlich nationale Leitlinien und Sicherheitskontexte zu berücksichtigen. Das BSI bietet beispielsweise umfangreiche Informationen zu IT- und Systemsicherheit, die als Ergänzung zur funktionalen Sicherheit bei vernetzten Produkten hilfreich sein können.

Software-Architektur für funktionale Sicherheit: Trennen, überwachen, sicher ausfallen

Eine robuste Architektur reduziert systematische Fehler und erleichtert Nachweise. Typische Prinzipien für Safety-Critical Code auf PIC-Basis sind:

  • Zustandsautomat statt „Spaghetti-Loop“: definierte Zustände, definierte Übergänge, klare Fehlzustände
  • Trennung von Safety und Non-Safety: z. B. Diagnose/Überwachung getrennt von Komfortfunktionen
  • Defensive Programmierung: Parameterprüfungen, Plausibilitätschecks, Timeouts
  • Fail-Safe-Auslegung: Sicherheitsfunktion führt bei Fehlern in einen definierten sicheren Zustand
  • Determinismus: keine unkontrollierten dynamischen Speicheroperationen, kontrollierte Interrupt-Latenzen

Auf kleineren PICs empfiehlt es sich oft, eine „Safety Shell“ als eigenständige Komponente zu definieren: Sie überwacht zyklisch Systemgesundheit (Clock, RAM, Flash-CRC, Stack-Grenzen), prüft sicherheitskritische Eingänge und steuert die Fehlerreaktion. Nicht-sicherheitskritische Applikationslogik bekommt nur kontrollierte Schnittstellen.

Diagnosemechanismen auf PIC: Selbsttests, Plausibilisierung und Überwachung

IEC 61508 erwartet, dass gefährliche Fehler mit geeigneter Wahrscheinlichkeit erkannt oder beherrscht werden. In PIC-Systemen spielen deshalb Diagnosen eine große Rolle. Häufige Bausteine sind:

  • Power-on Self-Test (POST): RAM-Test, CPU-Registertest, Flash-CRC
  • Periodische Selbsttests: zyklische Speicherprüfungen, Task- oder Loop-Monitoring
  • Watchdog-Konzept: unabhängiger Watchdog, mit plausibler Trigger-Logik (nicht blind im Timer-Interrupt)
  • Clock-Monitoring: Erkennen von Taktfehlern, Failover auf internen Oszillator falls verfügbar
  • Brown-out/Reset-Strategie: Spannungsüberwachung, definierte Startsequenz, sichere Ausgangszustände
  • I/O-Plausibilisierung: Bereichsprüfungen, Redundanz (z. B. zwei Sensoren), „Stuck-at“-Erkennung

Ein wichtiges Prinzip ist, Diagnosen nicht nur zu implementieren, sondern sie auch testbar zu machen: Jede Diagnose braucht definierte Testfälle, erwartete Ergebnisse und eine dokumentierte Reaktion. Für die Watchdog-Strategie ist es beispielsweise sinnvoll, die Trigger-Freigabe an einen „Health Counter“ zu koppeln, der nur steigt, wenn alle relevanten Checks bestanden wurden.

Berechnungen und Kennzahlen: PFDavg/PFH sauber interpretieren

Auch wenn viele Teams den Fokus auf Software legen, verlangt IEC 61508 eine systemische Betrachtung. Häufig begegnen Ihnen vereinfachte Darstellungen, etwa eine Abschätzung von PFDavg bei Proof-Test-Intervallen. Eine stark vereinfachte Näherung (zur Orientierung, nicht als Ersatz für Ihre Sicherheitsrechnung) lautet:

PFDavg λT 2

Dabei ist λ eine (gefährliche) Ausfallrate und T das Proof-Test-Intervall. In realen Projekten kommen Diagnoseabdeckung, Architektur (z. B. 1oo2), Common-Cause-Faktoren und viele weitere Parameter hinzu. Für Software ist entscheidend: Sie liefern die Diagnosen und Reaktionsmechanismen, die in die Systemrechnung eingehen, und Sie müssen nachweisen, dass sie im Feld zuverlässig wirken.

Coding-Standards und Toolchain: Compiler, Optionen und Nachweisführung

Safety-Critical Code steht und fällt mit Disziplin. Legen Sie früh verbindliche Regeln fest, die zu PIC und Ihrer Toolchain passen. Praktisch bewährt sind:

  • Fest definierter Coding-Standard: z. B. MISRA-C-orientiert, mit projektbezogenen Abweichungen und Begründungen
  • Compiler-Optionen als Baseline: Optimierungsstufe, Warnungen, Spracheinstellungen, Linker-Skripte fixiert
  • Statische Analyse: Warnungen als Fehler, Regeln gegen undefiniertes Verhalten
  • Verbot riskanter Sprachfeatures: unkontrollierte Pointer-Arithmetik, nichtinitialisierte Variablen, rekursive Funktionen
  • Deterministische Speicherstrategie: keine dynamische Allokation im sicherheitskritischen Pfad

Wichtig ist nicht nur, Regeln zu definieren, sondern deren Einhaltung nachzuweisen. Dazu gehören Review-Protokolle, Analyse-Reports, reproduzierbare Builds und eine klare Konfiguration der Entwicklungsumgebung. Für die Tool-Qualifizierung (z. B. Compiler, Generatoren) verlangt die Norm je nach Einsatz und SIL eine Begründung, warum Tool-Fehler hinreichend ausgeschlossen oder erkannt werden. In vielen Teams wird hier eine pragmatische Kombination aus Prozesskontrollen (z. B. unabhängige Reviews) und technischen Kontrollen (z. B. Tests auf Zielhardware) genutzt.

Interrupts, Timing und Nebenläufigkeit: Häufige Fehlerquellen in Safety-Critical Code

Auf PIC-Systemen sind Interrupts und Timing oft zentral: Sensorabtastung, Motorregelung, Kommunikation. Genau hier entstehen aber auch systematische Fehler, die schwer zu testen sind. Typische Regeln für sichere Nebenläufigkeit:

  • Interrupt-Handler kurz halten: nur erfassen, quittieren, in sichere Puffer schreiben; Logik in den Main-Context
  • Atomare Zugriffe: geteilte Daten schützen (kritische Abschnitte, Volatile korrekt, ggf. Double-Buffer)
  • Worst-Case-Auslegung: maximale Interrupt-Latenz und Laufzeiten berücksichtigen
  • Timeouts überall: Kommunikation, Sensorvalidierung, Zustandsübergänge
  • „No hidden loops“: keine unkontrollierten Warteschleifen in sicherheitsrelevanten Pfaden

Ein bewährter Ansatz ist ein strikt getakteter Hauptzyklus (z. B. 1 ms/10 ms/100 ms), in dem Safety-Checks priorisiert laufen und jede Funktion ein Zeitbudget hat. Bei Überschreitung wird ein definierter Fehlerzustand ausgelöst.

Traceability: Von der Sicherheitsanforderung bis zum Testfall

Ein wesentlicher Prüfpunkt bei IEC 61508 ist die Nachvollziehbarkeit. Jede Sicherheitsanforderung sollte mit Designentscheidungen, Codebausteinen und Tests verknüpft sein. In der Praxis bedeutet das:

  • Requirement-ID pro Safety Requirement
  • Design-Referenz (Architektur, Schnittstellen, Zustandsmodell)
  • Implementierungsreferenz (Module, Funktionen, Commit/Version)
  • Testreferenz (Unit-, Integrations-, Systemtest; erwartetes Ergebnis)

Je sauberer diese Kette ist, desto leichter wird die Bewertung durch interne Safety-Verantwortliche oder externe Prüfer. Das gilt besonders dann, wenn sich Anforderungen ändern: Traceability zeigt sofort, welche Tests und Module betroffen sind.

Teststrategie auf PIC: Von Unit-Tests bis HIL – realistisch und auditfähig

Safety-Critical Code verlangt eine abgestufte Teststrategie. Auf PIC-Basis ist eine Mischung aus Host- und Target-Tests häufig sinnvoll:

  • Unit-Tests (Host): Logikfunktionen, Rechenkerne, Zustandsautomaten – schnell, automatisierbar
  • Unit-Tests (Target): Timing-nahe Funktionen, Registerzugriffe, ISR-Verhalten
  • Integrationstests: Zusammenspiel von Peripherie, Treibern, Diagnosen
  • Systemtests: Sicherheitsfunktionen unter realistischen Fehlerbildern (z. B. Sensorabbruch, Kommunikationsfehler)
  • Fehlerinjektion: gezieltes Auslösen von Faults (Spannungsabfall, Clock-Fehler, Memory-Checks)

In vielen Projekten ist Hardware-in-the-Loop (HIL) der Schlüssel, um reproduzierbar Fehlerbilder zu testen. Wichtig ist, dass Tests nicht nur „bestehen“, sondern dass die Abdeckung und die Begründung für nicht testbare Teile dokumentiert sind (z. B. sehr hardwareabhängige Faults).

Dokumentation und Audit-Readiness: Was Prüfer typischerweise sehen wollen

Ohne saubere Artefakte wird selbst guter Code schwer vermittelbar. Typische Dokumente und Nachweise im IEC-61508-Kontext sind:

  • Safety Plan und Rollenmodell
  • Hazard/Risk Analysis und Safety Requirements Specification
  • Software-Architektur inkl. Schnittstellen und Zustandsmodell
  • Verifikations- und Testplan inkl. Testreports
  • Konfigurationsmanagement (Baselines, Freigaben, Änderungsprotokolle)
  • Toolchain-Begründung (inkl. Maßnahmen gegen Tool-Fehler)

Wenn Sie mit externen Stellen zusammenarbeiten, etwa für Bewertung oder Zertifizierungsbegleitung, kann es hilfreich sein, sich früh mit typischen Erwartungen vertraut zu machen. Als allgemeiner Orientierungspunkt dienen Informationen von Prüf- und Zertifizierungsorganisationen wie TÜV (je nach Gesellschaft und Angebot), auch wenn die konkrete Bewertung immer projektspezifisch erfolgt.

Pragmatische Umsetzung: Ein robustes Safety-Pattern für PIC-Projekte

Als wiederverwendbares Grundmuster für Safety-Critical Code auf PIC-Basis hat sich eine klar strukturierte „Safety-Schicht“ bewährt. Sie können sie unabhängig von der Applikation konzipieren und anschließend projektspezifisch konfigurieren:

  • Startphase: sichere I/O-Defaults, POST (RAM/Flash/Clock), initiale Sensor-Plausibilisierung
  • Laufphase: zyklische Checks (CRC, Alive-Counter, Timing), Watchdog-Freigabe nur bei „gesundem“ Zustand
  • Fehlerphase: definierter Safe State (Ausgänge in sicher), Logging, optional kontrollierter Reset
  • Servicephase: streng authentifiziert, begrenzte Funktionen, klare Trennung vom Normalbetrieb

Dieses Pattern hilft, Komplexität zu beherrschen und Nachweise zu erleichtern: Safety-Funktionen sind gebündelt, überprüfbar und weniger von Feature-Entscheidungen der Applikation abhängig.

IoT-PCB-Design, Mikrocontroller-Programmierung & Firmware-Entwicklung

PCB Design • Arduino • Embedded Systems • Firmware

Ich biete professionelle Entwicklung von IoT-Hardware, einschließlich PCB-Design, Arduino- und Mikrocontroller-Programmierung sowie Firmware-Entwicklung. Die Lösungen werden zuverlässig, effizient und anwendungsorientiert umgesetzt – von der Konzeptphase bis zum funktionsfähigen Prototyp.

Diese Dienstleistung richtet sich an Unternehmen, Start-ups, Entwickler und Produktteams, die maßgeschneiderte Embedded- und IoT-Lösungen benötigen. Finden Sie mich auf Fiverr.

Leistungsumfang:

  • IoT-PCB-Design & Schaltplanerstellung

  • Leiterplattenlayout (mehrlagig, produktionstauglich)

  • Arduino- & Mikrocontroller-Programmierung (z. B. ESP32, STM32, ATmega)

  • Firmware-Entwicklung für Embedded Systems

  • Sensor- & Aktor-Integration

  • Kommunikation: Wi-Fi, Bluetooth, MQTT, I²C, SPI, UART

  • Optimierung für Leistung, Stabilität & Energieeffizienz

Lieferumfang:

  • Schaltpläne & PCB-Layouts

  • Gerber- & Produktionsdaten

  • Quellcode & Firmware

  • Dokumentation & Support zur Integration

Arbeitsweise:Strukturiert • Zuverlässig • Hardware-nah • Produktorientiert

CTA:
Planen Sie ein IoT- oder Embedded-System-Projekt?
Kontaktieren Sie mich gerne für eine technische Abstimmung oder ein unverbindliches Angebot. Finden Sie mich auf Fiverr.

 

Related Articles