- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 24

Thema: Methoden zum Erkennen einer Fehlerbedingung in Microcontroller-Systemen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803

    Methoden zum Erkennen einer Fehlerbedingung in Microcontroller-Systemen

    Hi Spezialisten,

    beim Bau von autonomen Robotern gibt es ab und zu das Problem, dass in einem Programm eine Fehlerbdingung auftritt. Das sollte es natürlich bei guter Programmierung nicht geben, aber auch Hardware-Probleme oder Ereignisse von außen könnten ein Programm z.B. zum "Absturz" bringen.

    Ich habe derzeit ein Doppel-Prozessor-System, das via I2C verbunden ist. Das System soll wechselseitig feststellen, ob auf der jeweils anderen Seite alles ok ist und ob das Programm dort läuft.
    Das habe ich schon umgesetzt durch einen "Heartbeat"-Prozeß, der Alarm gibt, wenn ein "Herzschlag" der anderen Seite nicht mehr bemerkt wird. Das setzt aber z.B. zumindest eine funktionierende I2C-Verbindung voraus, was auch gestört sein könnte.

    Wenn z.B. ein Mars-Rover auf dem Mars herumfährt, muss er ja auch merken, wenn sich z.B. ein internes Teilsystem "aufhängt" und muss dann sicher stellen, dass z.B. die Kommunikation mit der Basisstation auf der Erde noch klappt oder Solarzellen zum Licht gedreht werden. Dann müßte er auch versuchen, das 1. System probeweise wieder "hochzufahren", um zu merken, ob es noch funktioniert.

    Fragen über Fragen:
    Was sind Methoden und Konzepte für so ein Sicherheitskonzept?
    Braucht man immer dafür mind. ein ZWEITES Controller System oder gibt es auch eine Sicherheitsmethode für ein EINZELNES Controllersystem, damit es sich selbst überwacht?
    Wie würdet ihr sowas programmieren?
    Hat jemand das schon einmal gemacht?
    Gruß
    Dirk

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    66
    Beiträge
    2.435
    Hallo Dirk,

    Das einfachste ist ein Watchdog. Hat heute fast jeder µC mit drauf.

    Bei der einfachsten Variante darf der Timer einfach nie ablaufen, andernfalls wird ein Hardware-Reset ausgelöst.

    Nun kann aber das Programm so durchdrehen, dass es nur noch dauernd den Watchdog zurücksetzt
    Für diesen Fall gibt es eine verbesserte Variante, bei welcher das zurücksetzen innerhalb eines bestimmten Zeitfensters erfolgen muss.
    Wird zu früh oder zu spät zurückgesetzt gibt es einen Reset.

    Ein Problem ist natürlich der Aufwand und die Komplexität der ganzen Überwachung. Wird das System zu kompliziert, führt alleine dieses schon zu vermehrten Ausfällen.

    Bei kritischen Systemen (z.B. Flugzeug) baut man alles 3-fach auf, hier liegt das Optimum.
    Bei 3 System geht man dann davon aus, dass die Mehrheit recht hat. Auch die Aktoren sind 3-fach vorhanden, wobei jeder Aktor die nötigen Kräfte alleine aufbringen kann. Im Fehlerfall arbeiten dann zwei Aktoren gegeneinander und kompensieren sich Kräftemässig, der Dritte hat dann die eigentliche Arbeit!
    Bei der Zivilluftfahrt hat man dann auch noch an mögliche Systematische Fehler gedacht. Jeder der 3 Rechner benutzt eine andere CPU-Architektur eines anderen Herstellers. Zudem wird alles von 3 unabhängigen Teams entwickelt, auch die Software. Damit versucht man zu verhindern, dass Architektur- oder Herstellungsfehler, auch der CPU, nicht auf allen 3 Systemen gleichzeitig auftreten können. z.B. hatte der 80386 anfänglich mehrere, temperaturabhängige Rechenfehler im 32-Bit Teil.

    Das Spaceshuttle hatte 3 identische Rechner und einen Backuprechner zur Überwachung. die ersten 1 oder 2 Starts wurden verhindert, weil die Rechner nicht ganz synchron liefen und deshalb dauernd eine fehlerhafte Datenverarbeitung gemeldet wurde.

    Die Leitstelle der BVB (Basler Verkehrs Betriebe) bestand in den 70er Jahren aus zwei PDP11. Einer kleineren, welche normalerweise die Arbeit machte und einer grösseren, welche die erste überwachte und im Fehlerfall die Arbeit der ersten übernahm.

    Beim Mars-Rover wird natürlich Verschiedenes verwendet.
    Wichtige Systeme sind, wenn möglich, mehrfach vorhanden, Ist auch eine Gewichts und Kostenfrage, weshalb man auch nicht alle Experimente doppelt mitnehmen kann.
    Im Fehlerfall stoppt das Teil erst mal und fährt unwichtiges runter.
    Das wichtigste ist dann die Funkverbindung, wenn die unterbrochen ist, werden erst mal die Antennen in die Grundposition gefahren und ausgerichtet.
    Dann kann das Teil eine Menge an internen Spannungen, Strömen, Temperaturen, Positionen usw. messen und zwecks Analyse Richtung Erde funken.
    Auch hat man verschieden Versorgungsspannungs-Busse und die Geräte können da unterschiedlich um- und abgekoppelt werden.
    Festverdrahtet ist dann noch ein Monitorprogramm um das ganze Teil notfalls wieder hoch zu bekommen.
    Für den Mars-Rover gab es übrigens zwei unterschiedliche Programme. Eines für den ganzen Flugbetrieb und eines für die Mission. Dasjenige für die Mission war irgendwo versteckt und komprimiert abgelegt. Nach der Landung wurde dann das Flugprogramm gelöscht und durch das eigentliche Missionsprogramm ersetzt.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  3. #3
    Erfahrener Benutzer Roboter-Spezialist Avatar von erik_wolfram
    Registriert seit
    02.12.2009
    Ort
    Berlin
    Beiträge
    406
    Leider kenne ich mich auf dem Gebiet nicht so gut wie mein Vorredner (Vorschreiber) aus.
    Aber: solange ein Mensch im Spiel ist können immer Fehler passieren - spätestens durch die Komplexität des Programms und der fehlenden Übersicht/Verständnis!
    Ein Fehler, der mir nicht nur einmal unter gekommen ist:

    Ein Buffer (Array) wird permanent mit Werten gefüllt. Durch falsche Berechnungen, Abweichungen etc. wird dieser über den reservierten Bereich beschrieben.
    Wenn nach dem reservierten Bereich wichtige Variablen stehen die dann einfach überschrieben/gelöscht werden, kann es unter Umständen zu den kuriosesten Fehler kommen die man sich vorstellen kann...
    Ein Watchdog wird in dieser Hinsicht seine Grenzen haben - vielleicht ist es in diesem Fall sogar notwendig nicht mehrere Systeme parallel zu fahren, sondern abweichende, oder kontrollierende Systeme aufzusetzen.
    Wenn 3 identische Systeme parallel laufen ist immernoch nicht garantiert, dass sie nicht alle drei den gleichen Fehler verursachen können... (der damit nicht erkannt wird)

    Apropos: ein schönes Beispiel für Menschliches Versagen - In den USA gab es mal ein Gerät names Therac 25 welches die Strahlendosis für die Bestrahlung von Menschen berechnen sollte - mindestens 3 Patienten starben durch einen Fehler im Programm (vom Mensch verursacht)...


    Jetzt fällt mir doch noch so ein Unwort dazu ein: FMEA - Fehler Möglichkeiten Einfluss Analyse. Ein "Brainstorming" zur Betrachtung möglicher eintretender Fehler und dem Vorbeugen dieser.
    Meine Projekte auf Youtube

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    Ansätze gibt es da ja einige, je nach Anforderung.
    Bei Aktiv-Passiv Clustern, wird ein Heartbeat überwacht und wenn der Node mit dem Lead nicht mehr den Anforderungen genügt, bekommt die Software einen Reset verpasst, und ein anderer Node übernimmt den Lead.
    Bei Aktiv-Aktiv Clustern kann entweder Synchon gearbeitet werden und die mehrheitlich identischen Ergebnisse entscheiden darüber welches Ergebniss als Fehlerhaft angesehen wird (Luftfahrt). oder es wird Lastverteilend je Node eine andere Aufgabe duchgeführt und pro Node laufen Watchdogs und Selbsttestroutinen.

    Bei Raumfahrttauglichen Systemen, wird es noch mal ungleich schwieriger.
    Da steht ja nur eine begrenzte Teileauswahl zur Verfügung.
    Da fängt man schon an beim Schaltungsdesign Fehler zu vermeiden.
    Elkos fallen flach, da im Vakuum das Elektrolyt per Dampfexplosion den Elko zerstören würde.
    Alle Bautele werden auf Strahlungsfestigkeit ausgewählt (Abschirmung, Sruckturgröße und Werkstofftechnologie https://de.wikipedia.org/wiki/Silicon-on-Sapphire )
    Und die Bauteile müssen in einem erweiterten Temperaturspektrum funktionsfähig sein (oft -55°C bis +150°C)
    Es gibt sowohl von der NASA als auch von der ESA PDF Dokumente für freigegebene Bauteile.

    Bei Speichern werden selbstkorrektur Möglichkeiten vorgesehen.
    Auf Byte Ebene Paritätsbits, Dann ECC Hash für 2 Bit Fehler, Memory RAID (5) für größere Blöcke und doppelte Ausführung, (mirroring) um defekte Bits ersetzen zu können.
    Als Backup System kommen auch teilweise diskret aufgebaute Command Sequenzer zum Einsatz, die festverdrahtete Programme abspulen.

    Die NASA hat mit HAL/S dann noch eine eigene echtzeitfähige Programmiersprache.
    http://www.brouhaha.com/~eric/nasa/h...g_in_hal-s.pdf

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.688
    .. Die NASA hat mit HAL/S dann noch eine eigene echtzeitfähige Programmiersprache ..
    HAL ? ? Gibts da ne Verbindung zum HAL auf der Discovery One (Kubrik bzw. Arthur C. Clarke) ? Hmmm, muss ich mal googeln.

    Total OT: Seh' grad dass dies hier nicht mein 2001tes Posting, aber das siebentausendste ist. Oh Himmel wieviel Mist da dabei ist :-/
    Da fällt mir zu HAL und IBM ein, dass man von letzteren auch nicht mehr viel hört.
    Geändert von oberallgeier (14.03.2016 um 10:14 Uhr) Grund: Tippfehler"mit<=>mir"
    Ciao sagt der JoeamBerg

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    Laut meiner Info nicht.

    2001 - HAL9000 => IBM

    I-1 = H
    B-1 = A
    M-1 = L

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    06.08.2008
    Ort
    Graz
    Beiträge
    521
    Zitat Zitat von erik_wolfram Beitrag anzeigen
    Ein Buffer (Array) wird permanent mit Werten gefüllt. Durch falsche Berechnungen, Abweichungen etc. wird dieser über den reservierten Bereich beschrieben.
    Wenn nach dem reservierten Bereich wichtige Variablen stehen die dann einfach überschrieben/gelöscht werden, kann es unter Umständen zu den kuriosesten Fehler kommen die man sich vorstellen kann...
    Ein Watchdog wird in dieser Hinsicht seine Grenzen haben - vielleicht ist es in diesem Fall sogar notwendig nicht mehrere Systeme parallel zu fahren, sondern abweichende, oder kontrollierende Systeme aufzusetzen.
    Wenn 3 identische Systeme parallel laufen ist immernoch nicht garantiert, dass sie nicht alle drei den gleichen Fehler verursachen können... (der damit nicht erkannt wird)
    Das mit dem Array Überlauf und dadurch nicht mehr funktionierendem Watchdog kann ich bestätigen...

    Man nimmt auch nicht 3 identische Systeme, zumindest eines davon muss auf einer anderen Hardware und Software Umgebung laufen, idealerweise von einem komplett anderem Team entwickelt.
    Space Shuttle hatte 5x identische Hardware + 4x identische Software, aber auf einem eine andere Software die übernehmen sollte wenn die anderen 4 ausfallen.
    alles über meinen Rasenmäherroboter (wer Tippfehler findet darf sie gedanklich ausbessern, nur für besonders kreative Fehler behalte ich mir ein Copyright vor.)

  8. #8
    HaWe
    Gast
    und für Datentransmission hat sich auf µCs das Bitbusprotokoll bewährt. Es ist - einfach ausgedrückt - ein Teil des TCP/IP-Protokolls und schützt v.a. auch davor, dass Daten schneller gesendet werden als die vorherigen bislang verarbeitet werden konnten. Damit wird quasi verhindert, dass die Datenleitungen verstopfen. Denn was will man bei allen Plausibilitätschecks und Checksums und Heartbeats mit den Daten anfangen, wenn die verbindung steht, aber die Daten, die man gerade beim Empfänger verarbeitet, bereits eine halbe Stunde alt sind

    Es wird erfolgleich von leJOS/JAVA auf dem Lego NXT für Bluetooth und RS485 eingesetzt (ob ebenfalls auf dem EV3, weiß ich nicht, da habe ich es nicht mehr verwendet).

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    Zitat Zitat von Dirk Beitrag anzeigen
    Was sind Methoden und Konzepte für so ein Sicherheitskonzept?
    Bei modernen Controllern sind einige Sicherheitsfunktionen schon Build in.
    Man muß sie nur einschalten/sinnvoll konfigurieren/nutzen.
    Brown Out detection, damit bei Unterspannung keine falschen Ergebnisse oder Schaltzustände entstehen wird ein Reset ausgeführt.
    Watchdog, damit bei Endlosschleifen/hängern ein Reset ausgeführt wird.
    ECC memory, damit man erkennen kann das die Speicherzelle die man grade liest fehlerhafte Daten enthällt.

    Will man mehr, muß man schon beim Hardare Design der Cotrollerkarte anfangen.
    Man kann bestimmte Reaktionen in Hardware diskret implementieren und das Ergebniss als Digitalsignal auf einen Interrupteingang legen.
    Damit kann das Programm im Interruptfall in eine ISR gezwungen werden, die prüft ob die internen Zustände zum externen Signal passend sind oder nicht.

    Memory RAID geht halt nicht mit dem internen Speicher von µCs. Da muß man dann also ein Modell suchen, bei dem man vollständig auf externen Speicher wechseln kann.
    Und diesen muß man dann mit allen Funktionen bauen. (addressierung, refresh, RAID Logik, etc.)

    Zitat Zitat von Dirk Beitrag anzeigen
    Braucht man immer dafür mind. ein ZWEITES Controller System oder gibt es auch eine Sicherheitsmethode für ein EINZELNES Controllersystem, damit es sich selbst überwacht?
    Nicht zwingend.
    Interne Softwarelösungen gehen aber immer auf die Systemperformance.
    Ein zweites oder drittes externes System kann parallel zum ersten arbeiten und so die Systemzykluszeit kurz halten.

    Zitat Zitat von Dirk Beitrag anzeigen
    Wie würdet ihr sowas programmieren?
    Gar nicht.
    Da holt man eine zweiter Person, damit man den Denkfehler den man beim ersten System eingebaut hat und der später mal den Fehler verursachen wird, nicht auch in das Sicherheitssystem einbaut.
    solche Sicherheitssysteme werden gerne von getrennten Teams entweickelt, die auch nicht direkt miteinander komunizieren, damit sie sich nicht gegenseitig beeinflussen können.

  10. #10
    HaWe
    Gast
    ja, die Fragen, die sich stellen, sind doch:
    1) ist es nur eine Spielerei oder ein kommerzielles Produkt (Ausschluss-Kriterium!)?
    2) können unabhängig davon beim Betrieb Menschen oder andere Lebewesen gefährdet oder geschädigt werden?
    (direkt oder indirekt, z.B. auch im Straßenverkehr, auf öffentlichen Wegen und Plätzen)
    3) können erhebliche Schäden an fremden Gegenständen auftreten (Betrieb in und außer Haus)?
    4) besteht ggf generell eine Gefährdungshaftung, sodass eine Haftpflichtversicherung abgeschlossen werden muss?

    wenn 1-4 ausgechlossen werden können, dann würde ich so vorgehen wie du (und mache es auch bereits so):
    a) Multitasking-Betriebssystem, pre-emptiv (!!), mit hochrangigem Emergency-Stop-Task (bei mir: Raspberry Pi mit hochrangigem pthread-Task)
    b) bei Fernsteuerung Heartbeat und für jede einzelne Fernsteuer-Message Checksum + acknowledge
    c) bei Verbindungsproblemen sofortiger Notstopp
    d) bei Kommunikationsproblemen nach 2 sek. Notstopp (hängt ntl. vom genauen Einsatzgebiet ab)
    e) bei Battery-Low sofortiger Notstopp
    f) bei Emergency-Button-Press sofortiger Notstopp
    g) bei Anstoßen mit > 2G (hängt auch vom genauen Einsatzgebiet ab) in 3 Dimensionen (Accelerometer): sofortiger Notstopp
    h) ein 2. Pi oder Arduino, der nur die internen Notstoppbedingungen parallel per Endlos-Loop überwacht sowie als Zusatzinput auch Heartbeat und Kommunikationsfehler übermittelt bekommt und dann direkt die Haupt-Spannungsversorgung z.B. mit 3 sek. delay per Relais kappt (Zeit hängt auch wieder vom genauen Einsatzgebiet ab).

    Das aber auch nur, wenn selbst im schlimmsten Fall keine Gefährdung Dritter möglich ist, also nur im eigenen Haus oder eigenem, abgegrenztem, nicht öffentlich zugänglichem Grundstück (ich denke da an meinen Rasenmäher-Robot, den ich z.B. niemals beim Nachbarn einsetzen würde).

    Ansonsten Finger weg von solchen Projekten.

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Sensor oder Schalter zum erkennen einer PokerKarte
    Von Andreas1984 im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 1
    Letzter Beitrag: 25.12.2013, 02:17
  2. Microcontroller in Verbindung mit einer Funkstrecke
    Von Markus_05 im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 5
    Letzter Beitrag: 16.10.2012, 01:09
  3. Beenden einer ISR erkennen
    Von hacker im Forum C - Programmierung (GCC u.a.)
    Antworten: 12
    Letzter Beitrag: 12.08.2009, 18:34
  4. Wie Abzweigung einer Linie erkennen?
    Von p_mork im Forum Software, Algorithmen und KI
    Antworten: 2
    Letzter Beitrag: 16.08.2007, 11:39
  5. Aufbau von CNC Systemen für Roboter
    Von mostrich im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 7
    Letzter Beitrag: 20.08.2006, 18:33

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen