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
ifiestop='0'then
4
ifisclk'eventandisclk='1'then--Clock mit 12,5MHz
5
eout1<=notiout1;
6
eout2<=notiout2;
7
eout3<=notiout3;
8
eout4<=notiout4;
9
eout5<=notspiuserout(0);
10
eout6<=notspiuserout(1);
11
eout7<=notspiuserout(2);
12
eout8<=notspiuserout(3);
13
endif;
14
endif;
15
endprocessiosteuerung;
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
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
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
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,
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
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.
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?
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.
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
ifiestop='0'then
4
ifisclk'eventandisclk='1'then--Clock mit 12,5MHz
5
elsifiestop='1'then--das ist neu
6
eout1<=notiout1;
7
eout2<=notiout2;
8
eout3<=notiout3;
9
eout4<=notiout4;
10
eout5<=notspiuserout(0);
11
eout6<=notspiuserout(1);
12
eout7<=notspiuserout(2);
13
eout8<=notspiuserout(3);
14
endif;
15
endif;
16
endprocessiosteuerung;
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
> 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.
@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
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.