Ausgänge bei Not-Aus festhalten

Gast #3699557
Lesenswert?

Hi,
ich hab da einen Knoten im Hirn und komme da gerade gedanklich nicht 
weiter.
Es geht um eine Anlagensteuerung die einen Not-Aus Kreis und einige IO 
Leitungen für die Anlagensteuerung enthält.
Die IOs kommen per SPI und 'diskret' ins CPLD (xc95288XL) rein und 
werden dann zu parallel hin aufgedröselt und hübsch gemacht.
Wenn Not-Aus nicht gedrückt ist, ist alles gut und die IOs können machen 
was sie sollen.
Wenn nun Not-Aus gedrückt wird, müssen die Ausgänge ihren jeweiligen 
Status beibehalten. Die Ausgänge irgendwohin festzulegen könnte bei der 
Anlage fatale Folgen haben.

Was ich bisher habe ist das:
1
iosteuerung : process (isclk, iestop)
2
begin    
3
if iestop = '0' then
4
if isclk'event and isclk = '1' then  --Clock mit 12,5MHz
5
eout1 <= not iout1;
6
eout2 <= not iout2;
7
eout3 <= not iout3;  
8
eout4 <= not iout4;
9
eout5 <= not spiuserout(0);
10
eout6 <= not spiuserout(1);
11
eout7 <= not spiuserout(2);
12
eout8 <= not spiuserout(3);
13
end if;
14
end if;
15
end process iosteuerung;

Bitte entschuldigt die blöde Codeformatierung, aber das Editorfenster 
mag mich gerade nicht...
Mein Gedanke war, bei gedrücktem Not-Aus die Clock zu umgehen. 
Allerdings fühle ich mich noicht so wohl damit bzw. hab gerade meine 
Idee, wie ich das formulieren kann.
Hat da Jemand eine Idee?
:-) Sarah
Gast #3699764
Lesenswert?

Hallo,

ich möchte vorweg nun noch einmal auf die Maschinenrichtlinie hinweisen:

---
Not-Aus in der „neuen“ MRL 2006/427EG - Stillsetzen im Notfall
Jede Maschine muss mit einem oder mehrere NOT-HALT-Befehlsgeräten 
ausgerüstet sein, durch die eine unmittelbar drohende oder eingetretene 
Gefahr vermieden werden kann.
[…]
Das NOT-HALT-Befehlsgerät muss
- deutlich erkennbare, gut sichtbare und schnell zugängliche Stellteile 
haben;
- die gefährlichen Vorgang möglichst schnell zum Stillstand bringen, 
ohne dass dadurch zusätzliche Risiken entstehen;
- erforderlichenfalls bestimmte Sicherungsbewegungen auslösen oder ihre 
Auslösung zulassen.
Quelle: Maschinenrichtlinie 2006/42/EG
---

Du solltest wirklich möglichst keine sicherheitsrelevanten 
Steuerungsteile als Programmlösung umsetzen, dabei kann viel zu viel 
schiefgehen und am Ende geht noch jemand hops. Klingt hart, ich weiß. 
Falls du es nicht schon hast verwende bitte ganz normale und geprüfte 
Not-Aus Geräte und setze mit ihnen die nötigen Sicherungsbewegungen um. 
Kaum jemand möchte sich, allein Rechtlich, eine Not-Aus Abwicklung über 
ein Programm ans Bein binden.
Einzig gangbare Methode: Sicherheitsgerichtete Automatisierungsgeräte 
(bei Siemens sind es zB die Gelben F-Baugruppen)

Zu deinem Problem: CPLD sagt mir zwar nicht besonders viel jedoch denke 
ich das dein Problem leicht gelöst werden kann - arbeite mit 
Prozessabbildern. So hast du definierte Zeitpunkte zum Eingreifen in 
deine Peripherie, sichere also deine EA Zustände in Variablen und lese 
diese nur zu Beginn deines Programms bzw. schreibe sie nur am Ende 
von/zur Hardware (Zyklusorientiert). So kannst du auf das Ereignis 
„Not-Aus“ mit dem Stoppen des normalen Programms reagieren. Also 
entweder das Kopieren des Ausgangsabbildes zur Peripherie stoppen oder 
den letzten Status deines Ausgangsabbildes mit einer Maske filtert 
(UND-Verknüpfen) und festlegen wie sich die Aggregate verhalten sollen 
(Mit null würde das Aggregat stoppen, mit eins würde den „letzten“ 
Zustand übernehmen).


Gruß
deathfun
#3699777
Lesenswert?

deathfun schrieb:
> Du solltest wirklich möglichst keine sicherheitsrelevanten
> Steuerungsteile als Programmlösung umsetzen, dabei kann viel zu viel
> schiefgehen und am Ende geht noch jemand hops.

Da hast du Grundsätzlich recht und ich würde das auch so unterschreiben.

Nur irgendjemand muss ja auch diese erwähnten Sicherheitsbaugruppen 
entwickeln und die haben heute ja auch Feldbusanschlüsse etc. dran. Also 
es gibt schon bedarf für programmgestützte Lösungen.
Der Aufwand ist jedoch enorm! (In den allermeisten Firmen müssten zuerst 
die ganzen Entwicklungsprozesse definiert werden, bevor sowas Chancen 
für eine Zertifierzierung hat)

Meine persönlich Meinung ist, dass es egal ist, ob ein Prozessor oder 
ein CPLD/FPGA eine Safety-relevante Funktion ausführt. Die Anforderungen 
an die Methodik sollen die gleichen sein.

Die Realität ist etwas anders, die Normen und die Zertifizierungsstellen 
sehen die CPLD/FPGAs als Hardware an, entsprechend lassen sie sich 
einfacher Zertifizieren als Firmware für einen Mikrocontroller.
Gast #3699802
Lesenswert?

Moin,
der Not-Aus Kreis in der Anlage ist schon dicht, bei Betätigung werden 
die Gefahrenquellen über ein Not-Aus Relais abgeschaltet.
Das einzige, was mir noch zu tun bleibt, ist eben daß die Ausgänge in 
dem Fall gehalten werden.
Die Clock vom CPLD (könnte auch ein FPGA sein)abzuschalten ist fatal, 
daß muß weiterlaufen.
Unsere Anlage fällt eigentlich nicht unter die Maschinenrichtlinie, aber 
wir betrachten die so, als ob. Es ist ein Beschriftungsgerät was die 
Kunden selber in ihre Anlagen integrieren.
Wenn ich über die Antwort von "DDEN" nachdenke, käme dann sowas bei 
raus?
1
iosteuerung : process (isclk, iestop)
2
begin    
3
if iestop = '0' then
4
if isclk'event and isclk = '1' then  --Clock mit 12,5MHz
5
elsif iestop = '1' then     --das ist neu
6
eout1 <= not iout1;
7
eout2 <= not iout2;
8
eout3 <= not iout3;  
9
eout4 <= not iout4;
10
eout5 <= not spiuserout(0);
11
eout6 <= not spiuserout(1);
12
eout7 <= not spiuserout(2);
13
eout8 <= not spiuserout(3);
14
end if;
15
end if;
16
end process iosteuerung;

Oder liege ich da total falsch?
Ich hab gerade nochmal mit meinem Normenspezi gesprochen, wenn Not-Aus 
gedrückt ist, müssen die Ausgänge in ihrem momentanen Zustand gehalten 
werden. Das Not-Aus Event wird ja über einige Relaiskontakte der 
übergeordneten Steuerung mitgeteilt und der Integrator muß sich dann 
darum kümmern, daß sich z.B. ein Druckluftzylinder nicht mehr bewegt.
:-) Sarah
:-) Sarah
Gast #3699805
Lesenswert?

> ala ha zertifiziert wird un problemlos durchhgeht

Es gibt kleine Unterschiede zwischen Softeismaschine und Atomkraftwerk. 
Da die TS Sarah keine konkreten Hinweise gab, wird sie auch kaum eine 
konkrete Antwort bekommen. Denkbar wäre jedoch, daß ein µC schneller 
seine Zustände sichern kann als der "rote Knopf" bis zum Ende 
durchgedrückt wurde.
Gast #3699814
Lesenswert?

@oszi40, ich weiß schon ziemlich genau was ich da mache. Es ist ja nicht 
so, daß ich da was ins blaue hinein entwickle.
Worum es mir bei meiner Frage geht, wie ich mein Problem in VHDl löse, 
also diesen Punkt formuliere.
Wenn Du dazu eine konkrete Idee hast, würde ich sie gerne wissen.
Die Thematik mit den Normen, Richtlinien etc. ist bereits intern geklärt 
und in trockenen Tüchern.
:-) Sarah
Gast #3699876
Lesenswert?

Sarah schrieb:
> ich weiß schon ziemlich genau was ich da mache.

Na ja, wenn du aber schreibst, dass es "fatale Folgen" haben kann, wenn 
die Ausgänge ihren Zustand nicht beibehalten, und du diese 
offensichtlich sehr wichtige Funktion in ein CPLD packst und darauf 
vertraust, dass das CPLD immer genau das macht, was du denkst, dann wird 
die Frage schon erlaubt sein, ob du dir wirklich sicher bist, mit dem, 
was du da vor hast.

Und ganz offensichtlich bist du auch in Sachen VHDL nicht gerade sehr 
erfahren, denn sonst würdest du hier in dem Forum nicht um Unterstützung 
bei so einem, sorry, Trivialproblem bitten.

Kurz zusammengefasst:
Wenn bei Versagen des CPLDs eine Gefahr für Menschen oder Umwelt 
ausgeht, dann bedarf es weiterer Maßnahmen, um das korrekte Verhalten im 
NOT-AUS-Fall sicherzustellen.
Wenn beim Versagen des CPLD die Anlage verreckt und ggf ein großer 
Sachschaden entsteht, dann könnt ihr selber entscheiden, ob es euch 
günstiger kommt, im Schadensfall den Kunden zu entschädigen oder eben 
das Risiko durch erhöhten Entwicklungsaufwand zu reduzieren.

Und um deine eigentliche Frage zu beantworten:
Sowas macht man ganz einfach über ein Enable.
Moderator (Firma: Titel) Persönliche Seite #3699924
Lesenswert?

Sarah schrieb:
> Wenn ich über die Antwort von "DDEN" nachdenke, käme dann sowas bei
> raus?
Nein, einen Clcok-Enable beschreibt man so:
1
iosteuerung : process (isclk)
2
  begin    
3
    if isclk'event and isclk = '1' then  --Clock mit 12,5MHz
4
      if iestop = '0' then
5
        eout1 <= not iout1;
6
        ...
7
        eout8 <= not spiuserout(3);
8
      end if;
9
    end if;
10
end process iosteuerung;
Allerdings sollte man hier den iestop evtl. noch einsynchronisieren. 
Wobei vermutlich die ganzen anderen EAs auch nicht synchron sind... :-/

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren