Forum: Mikrocontroller und Digitale Elektronik Suche nach Sicherheitsablauf für Arduino


von Jonas A. (poh)


Lesenswert?

Hallo,
wie bereits im Titel steht suche ich eine Art, wie man den Arduino 
sicherheitstechisch abfragen kann.

Der Arduino ist in meiner Anwendung der zentrale Punkt meiner Steuerung 
und regelt alle Aus- und Eingänge. Bezüglich der Sicherheit muss ich 
aber jetzt in meiner Anwendung zum einen einen Not-Aus-Schalter 
verbauen, der Sofort die Stromversorgung für die Aktoren unterbricht.
Jetzt wollte ich fragen, wie ich dies am besten Lösen kann. Meine erste 
Überlegung war die Verwendung eines Sicherheitsmoduls wie dieses hier:
https://at.rs-online.com/web/p/sicherheitsrelais/8937745/?cm_mmc=AT-PLA-DS3A-_-google-_-CSS_AT_DE_Relais_Whoop_ME-_-(AT:Whoop!)+Sicherheitsrelais-_-8937745&matchtype=&aud-826607888547:pla-541117273877&gclid=CjwKCAjwmeiIBhA6EiwA-uaeFVParVYDAmeJwCRZfz7aS4tRLA_0jZS45uhx4iESViyMrcsU7hnyjhoCnZcQAvD_BwE&gclsrc=aw.ds
Jetzt ist meine erste Frage, ob es für diese Anwendung bessere 
alternativen gibt.

Zum anderen Suche ich aber auch einen zweiten Sicherheitsmechanismus, 
der zum einen überprüft, ob das Arduinoprogramm noch durchlaufen wird. 
Hierzu war die Idee, auf einem Ausgang immer am Ende des Programms einen 
Eingang kurz von LOW auf HIGH zu setzen und wenn dieses HIGH-Signal 
nicht in einem bestimmten Zeitbereich eingelesen wird, wird ein Fehler 
ausgegeben. Dazu wie ich das überprüfen kann, habe ich leider noch keine 
richtige Idee.

Und die dritte Sicherheitsstufe ist, die Stromversorgung des Arduinos zu 
überprüfen. Das bedeutet, wenn dieser Stromlos wird, so soll das auch 
sofort erkannt werden und der Not-Mechanismus geschalten werden. Hierzu 
suche ich aber auch noch einen Weg, das zu detektieren. Ich weiß, dass 
es USV-Module gibt, die ein Signal ausgeben, wenn die 
Spannugnsversorgung verloren gegangen ist, aber finde tu ich dazu nichts 
richtiges.


Zu ergänzen ist, dass die Sicherheit in meinem Projekt wichtig ist, da 
sonst jemand bei der Verwendung verletzt werden könnte.
Die Aktoren und Sensoren, die an den Arduino angeschlossen werden, 
werden alle auf 24V betrieben. Damit der Arduino diese einlesen kann, 
werden einfache Spannungsteiler verwendet.
Der Arduino wird von einem zusätzlichem Stromkreis mit 12V betrieben und 
es wird der Arduino Mega verwendet.

Ich hoffe, dass mir jemand bei meinem Anliegen weiterhelfen kann.
Sollte ich noch relevante Informationen vergessen haben, bitte gebt mir 
bescheid. Ich suche im ersten Schritt zunächst Möglichkeiten, wie ich 
diese Funktionen sicherheitstechnisch richtig umsetzen kann.

Vielen Dank bereits im Vorraus
MfG
Jonas

von BeBe (Gast)


Lesenswert?

Ich hoffe jetzt mal inständig, dass das nur eine Studienarbeit ist und 
nicht in die reale Welt losgelassen wird…

Das was du willst nennt sich „Funktionale Sicherheit“ und der Aufwand 
der reingesteckt wird hängt immer vom Risiko ab. Grob: „Kratzer am 
Finger“ = kleines Risiko. „Tot“ = großes Risiko.

Welchen SIL / PL willst Du erreichen? Davon hängt der Aufwand / die 
Maßnahmen ab.

Schon mal was von IEC61508 gehört?

von MaWin (Gast)


Lesenswert?

Jonas A. schrieb:
> Ich hoffe, dass mir jemand bei meinem Anliegen weiterhelfen kann.

Bisher klingt es einfach: Es reicht wohl, wenn NotAus die 24V 
abschaltet. Deine Mimik braucht wohl keine definierte Abschaltsequenz 
oder sonstige Aktion beim NotAus, einfach nur Sus, inmitten von allem. 
Dann bau da den Schalter direkt ein.

Wenn der Arduino keinen Strom mehr hat, wird er auch keinen Ausgang mehr 
einschalten können (logisch high), sorge halt nur dafür dass alle 
Ausgänge nur aktivieren wenn sie auf high schalten (oder auf low mit 
Last hin zur VCC des Arduino). Schon führt ein 
Versorgungsspannungausfall zu demselben wie NotAus. Eine Stufe mehr 
Sicherheit wurde sich durch ein Relais ergeben das die 24V nur 
einschaltet, wenn der Arduino einen Ausgang aktiviert. Und wenn dann die 
Spannungsversorgung des Arduino gar aus diesen 24V gewonnen wird, ergibt 
sich eine Selbsthaltung, nur durch einen EIN-Taster über den 
Telaiskontakten überbrückbar.

Bleibt der Impuls pro Schleifendurchlauf: das hat der Arduino eingebaut, 
den Watchdog, der schaltet ihn aus (reset) wenn er nicht reagiert. Man 
kann natürlich den Watchdog auch als MonoFlop an besagtes Relais bauen.

von Fitzebutze (Gast)


Lesenswert?

Suche mal zu den Stichworten: Monitoring/Watchdog-Relays von Pilz, 
Ziehl, Rockwell, usw.
Wenn das was industrielles werden soll: Auf einer für Safety 
zertifizierbaren Plattform neuentwickeln, wo du auch beweisen kannst, 
dass das Programm korrekt funktioniert.

von BeBe (Gast)


Lesenswert?

Zwei Anmerkungen:

>Zum anderen Suche ich aber auch einen zweiten Sicherheitsmechanismus,
der zum einen überprüft, ob das Arduinoprogramm noch durchlaufen wird.

Nennt sich oft „zeitlicher und logischer Überwachung des 
Programmablaufs“.
 (Ein reiner Watchdog erkennt ggf nicht wenn Teile des Codes 
übersprungen werden.)
Implementierung z.B. in dem an kritischen Stellen eindeutige Signaturen 
verechnet und am Ende jeder Schleife geprüft wird, ob das erwartete 
Ergebnis vorhanden ist. Und nur dann wird z.B. der interne CPU Watchdog 
zurückgesetzt, bzw. bei Fehler alle Ausgänge in den sicheren Zustand 
gesetzt.

>Und die dritte Sicherheitsstufe ist, die Stromversorgung des Arduinos zu
überprüfen. Das bedeutet, wenn dieser Stromlos wird,…

Stromlos ist normalerweise kein Problem, wenn die Logik richtig 
umgesetzt ist. Keine Spannung  Ausgang aus.
Viel kritischer ist, wenn deine Versorgung außerhalb der zulässigen 
Baustein-Spannungen liegt, z.B. bei Überspannung. Dann ist nicht 
garantiert wie das System sich verhält. Du braucht ein Konzept für alle 
möglichen Fehler.


Bevor Du dich um die Realisierung kümmerst müssen solche Punkte geklärt 
sein:

1.)  Welche Risisken sollen durch eine Sicherheitsfunktion abgesichert 
werden?
2.)  Welcher Sicherheitslevel wird dazu benötigt (SIL 1,2,3,4)
3.)  Welche zeitlichen/… Anforderungen müssen eingehalten werden (Wie 
schnell muss reagiert werden?)
4.)  Ist eine Realisierung als einkanaliges System überhaupt möglich?
(Welcher Diagnosedeckungsgrad muss erreicht werden (abhängig vom SIL))
5.)  Starte mit einer Architektur, Analysiere die möglichen Ausfälle, 
definiere Mögliche Maßnahmen, Wurde nix vergessen? Ist das Konzept 
stimmig?

Dann geht’s erst Richtung Realisierung.

Und falls das nicht klar ist: das ist nix für ein Greenhorn.
Du hast hoffentlich jemanden der klar weiss was er tut und der auch die 
Verantwortung trägt!

von BeBe (Gast)


Lesenswert?

MaWin schrieb:
> Bisher klingt es einfach: Es reicht wohl, wenn NotAus die 24V
> abschaltet.

Das sehe ich nicht so. Die Sicherheitsfunktion hat er nicht beschrieben.
Wenn ein Arduino ein Presse steuert, hilft das Relais nicht: bei Fehler 
im Arduino ist die Hand ab, bevor du den Notaus bedienen kannst.

Deshalb die Frage an den TO:

* Was ist die Sicherheitsfunktion des Systems?
* Wenn der Arduino ausfällt: was passiert im schlimmsten Fall?

von Programmierer (Gast)


Lesenswert?

Jonas A. schrieb:
> Zum anderen Suche ich aber auch einen zweiten Sicherheitsmechanismus,
> der zum einen überprüft, ob das Arduinoprogramm noch durchlaufen wird.

Was passiert, wenn das Arduino-Programm normal läuft, aber die interne 
Berechnung fehlerhafte Werte ausgibt, z.B. weil du beim Programmieren 
einen Sonderfall nicht beachtet hast?

Jonas A. schrieb:
> Zu ergänzen ist, dass die Sicherheit in meinem Projekt wichtig ist, da
> sonst jemand bei der Verwendung verletzt werden könnte.

Funktionale Sicherheit ist ein weites Feld. Die Entwicklung und 
Zertifizierung sicherer Elektronik und Software ist sehr aufwendig und 
teuer. Wenn jemand anders verletzt wird, und herauskommt dass deine 
Arduino-Steuerung schuld ist, wird es sehr unangenehm für dich. 
Überhaupt einen Arduino für so etwas zu verwenden würde niemals 
zertifiziert werden. Da hilft es auch nicht, ein Sicherheits-Relais dran 
zu tackern.

Vielleicht wäre eine Safety SPS hier doch der einfachere Weg das System 
zu sichern. Es gibt viele Dienstleister die dir so etwas programmieren.

von BeBe (Gast)


Lesenswert?

Programmierer schrieb:
> Überhaupt einen Arduino für so etwas zu verwenden würde niemals
> zertifiziert werden.

Ich würde behaupten, dass so etwas theoretisch sogar machbar wäre, aber 
nur mit vieeeeeeel Aufwand und vieeeeel Ahnung. Und vor allem nur mit 
Hardware Eigendesign. Ich kenne kein Arduino Board, das ausreichend 
Onboard Diagnose hat.

Von Softwareanforderungen ganz zu schweigen...

Wäre interessant ob es um ein Produkt geht, dass tatsächlich eine 
Baumusterprüfung o.ä. benötigt, oder ob da ein Hersteller mal schnell 
was per Eigenerklärung auf den Markt werfen will.

Baumuster wäre witzig: würde gerne beim Meeting mit der zertifizierenden 
Stelle dabei sein.

von MaWin (Gast)


Lesenswert?

BeBe schrieb:
> Das sehe ich nicht so.

Es gibt Blinde, die sehen halt nix.
z.B. wie der Satz weiter geht den sie 'vergessen' haben zu zitieren.
Da schlug vermutlich die Blindheit zu.

von Peter D. (peda)


Lesenswert?

Sicherheit ist nichts, was man so eben mal dranbasteln kann.

Es fängt mit der Programmgestaltung an. Das Programm muß modular 
aufgebaut sein und jedes Modul muß für sich vollständig testbar sein.
Einen Spaghetticode, wo alles undurchdringlich mit allem verwoben ist 
und niemand mehr durchsieht, kann auch das beste Sicherheitsrelais der 
Welt nicht mehr retten. Ob dieses sehr teure Relais für 
Arduino-Programme Sinn macht, da habe ich so meine Zweifel.

Ich lasse oft neben der Steuertask eine Prüftask parallel laufen. Die 
prüft nur auf alle möglichen Fehlerbedingungen und zwingt bei Bedarf die 
Steuertask in Notaus. Z.B. kann sie Versorgungsspannungen und Ströme 
prüfen, ob sie im erlaubten Bereich sind und auch den Stackverbrauch. Im 
EEPROM wird dann ein Record abgelegt, welcher Fehler den Notaus bewirkt 
hat.
Daneben sind auch logische Prüfungen notwendig, z.B. dürfen 2 
Endlagenschalter nie gleichzeitig aktiv sein. Alle Signale von außen 
können falsch sein.

Sicherer Code darf keine Codedopplungen enthalten. Werden ähnliche 
Codesequenzen an mehreren Stellen benötigt, macht man daraus eine 
Unterfunktion, die man nur mehrfach aufruft. Damit vermeidet man bei 
Änderungen am Code, daß Stellen vergessen werden.

von Jonas A. (poh)


Lesenswert?

Vielen Dank zunächst mal für die vielen und raschen Rückmeldungen.

Durch eure Anmerkungen habe ich gesehen, dass es sich hierbei um ein 
größeres Thema als erwartet handelt und ich mich darin noch viel 
einlesen muss.

Ich werde die Tipps und Anregungen auf jeden Fall berücksichtigen und 
mich damit auseinandersetzen.
Sollte ich danach noch immer Fragen haben, werde ich mich hier melden, 
da ich gesehen habe, dass es sich um eine sehr engagierte Community 
handelt.

Danke

von BeBe (Gast)


Lesenswert?

MaWin schrieb:
> BeBe schrieb:
>> Das sehe ich nicht so.
> Es gibt Blinde, die sehen halt nix.

Hi MaWin, dann erleuchte mich. Was habe ich übersehen?

von Zugvogel (Gast)


Lesenswert?

Jonas A. schrieb:
> der Sofort die Stromversorgung für die Aktoren unterbricht

Das kann bei einem Hubmagneten fatale Folgen haben!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.