Forum: FPGA, VHDL & Co. Ausgänge bei Not-Aus festhalten


von Sarah (Gast)


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

von Bert 0. (maschinist)


Lesenswert?

Bin zwar nicht der Experte in CPLD Krams, aber ganz abstrakt kann man 
doch die Eingangsignale durch ein Latch leiten, welches in Deinem Falle 
von /NOTAUS freigegeben bzw. durch NOTAUS gesperrt wird. Dadurch bleiben 
am Ausgang des Latches die letzten IO Zustände verfügbar, solange NOTAUS 
aktiv ist.


Gruß... Maschinist

von dden (Gast)


Lesenswert?

Hallo,
beim Latch bleiben keine Zustände gespeichert.
Der asynchrone Reset den du beschrieben hast hilft nur um den Signalen 
definierte Zustände zuzuweisen.
Das einfachste und effektivste wäre wohl die Clock_Enables von deinen 
Ausgabeflipflops zu benutzen.

Mfg dden

von nicht"Gast" (Gast)


Lesenswert?

Nein, nein, nein, :)

was auch immer du schalten möchtest. Wegen der Sicherheitsmoleküle 
solltest du den Notaus hardwired machen und nicht im CPLD abfragen.

Wenn der abraucht, kannst du deinen Notaus vergessen.



Grüße,

von deathfun (Gast)


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

von Christoph Z. (christophz)


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.

von Christian R. (supachris)


Lesenswert?

Schalte doch mit dem Not-Aus das Enable vom Quarz-Oszillator am CPLD ab, 
dann bleibt er einfach stehen, da wo er gerade ist. Aber ist es nicht 
sinnvoller, wenn man die Anlage in einen definierten Zustand bringt? 
Oder greift der Not-Aus an anderer Stelle noch mal direkt auf 
irgendwelche beweglichen Anlagenteile?

von chris (Gast)


Lesenswert?

Ich Weiss zumindest bei grosseren firmen wird viel i FPGA bzw cpld 
vemacht, da dies ala ha zertifiziert wird un problemlos durchhgeht. Ich 
war auch perplex von diesser bwl Logik. Stimmen tutt es schon dass HDL 
besser un sicherer zu testen ist als zb ne556.

von Sarah (Gast)


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

von oszi40 (Gast)


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.

von Sarah (Gast)


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

von Schlumpf (Gast)


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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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... :-/

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.