Forum: Compiler & IDEs "Not-Aus" per Software


von WhyNot (Gast)


Lesenswert?

Hallooo,
ich habe eine Schaltung in einem Simulationsprogramm zu entwerfen, 
nichts wildes, trotzdem gibt es ein Problem, an dem ich nicht 
vorbeikomme. Ich steuere damit eine Maschine und am Eingang eines µC 
befindet sich nun ein "Ein" und ein "Stop" Taster. Zweiterer ist mein 
Sorgenkind. Ich komme einfach nicht darauf, wie ich Softwaretechnisch 
alles lahmlege. Vorallem da das Programm sich innerhalb des Ablaufs 
immer wieder in Schleifen aufhält. Hoffentlich kann sich jemand dort 
hineindenken wäre mir wirklich eine große Hilfe. Hier der Code 
http://pastebin.com/bdQChBcV

von Falk B. (falk)


Lesenswert?

@WhyNot (Gast)

>befindet sich nun ein "Ein" und ein "Stop" Taster. Zweiterer ist mein
>Sorgenkind. Ich komme einfach nicht darauf, wie ich Softwaretechnisch
>alles lahmlege. Vorallem da das Programm sich innerhalb des Ablaufs
>immer wieder in Schleifen aufhält.

wenn du schon mit solchen einfachen Dingen Probleme hast, ist eine 
NOT-Aus in Software für dich sowieso nicht machbar. Und selbst die 
Profis müssen für sowas hart ackern, vor allem für die Zertifizierung.
Not-Aus Funktionen werden eigentlich immer in solider, einfacher, 
robuster Hardware gemacht. Das ist allgemein akzeptiert und hat sich 
bewährt.

>http://pastebin.com/bdQChBcV

Naja, dein Ansatz ist halbwegs brauchbar, aber einfacher und sinnvoller 
ist es, direkt eine statemachine zu beschreiben. Dann wirds auch mit 
der Auswertung der Eingangssignal spielend leicht.

von Sven P. (Gast)


Lesenswert?

Ich sehe Unheil..
1
if(location == "PS2")

von WhyNot (Gast)


Lesenswert?

Sven P. schrieb:
> Ich sehe Unheil..
> if(location == "PS2")

Ist nicht schick, das ist mir klar :D
Aber Ohne nähere Erläuterung ist dein Post genauso sinnlos...

von ConvertsQuestionsToAnswers (Gast)


Lesenswert?

>... in einem Simulationsprogramm ...

Zunächst mal die Frage um welches Simulationsprogramm es sich handelt. 
Vor allem in Hinblick darauf, ob das Programm eine eigene Sprache 
verwendet. Der Code sieht nämlich fast wie C aus, weicht aber z.B. in 
dem Vergleich von Strings von C ab.

Dieser Code:
1
if(location == "PS2")

ist in C nicht zulässig.

Eine Beobachtung in Bezug auf die Schleife und die Kette von Ifs:
Das ist ja schon fast eine State-Machine, aber es ergibt sich eine 
einfache Kette von Zuständen die dann einfach bei step = 4. Da sollte es 
sinnvoll weitergehen.

Den Stop-Schalter könntest Du einfach am Ende der Schleife abfragen.

von WhyNot (Gast)


Lesenswert?

Es handelt sich um das Programm Multisim. Wenn ich am Ende der If 
Abfrage ein Stop einbaue, kommt er dort erst hin, wenn er den kompletten 
Ablauf schon hitner sich hat, hier mal die Schaltung vllt wirs dadurch 
deutlicher
http://img1.bildupload.com/28b3c0ed9f726cfda9732713cedd6205.jpg

von Stefan E. (sternst)


Lesenswert?

ConvertsQuestionsToAnswers schrieb:
> Dieser Code:
>
1
if(location == "PS2")
>
> ist in C nicht zulässig.

Natürlich ist er zulässig. Er macht nur meist nicht das, was der 
Schreiber sich davon erhofft hat. In diesem Fall funktioniert es sogar 
wie erwartet, weil ja auch 'location' mit der Adresse eines 
String-Literals gefüllt wird, und der Compiler natürlich gleiche 
Literale zusammenfasst. Letzteres ist aber kein Muss, und damit ist der 
Code natürlich nichtsdestotrotz böse.

: Bearbeitet durch User
von ConvertsQuestionsToAnswers (Gast)


Lesenswert?

@  Stefan Ernst

>Natürlich ist er zulässig.

Oder auch nicht. Es kommt darauf an wie man "zulässig" definiert. Du 
ziehst dann ja auch in Deinem Post drei verbale Schleifen ehe Du zu dem 
Schluss kommst das er "böse" ist.

Schön, dann hast Du jetzt mal wieder den Besserwisser gespielt. Danke 
für nichts.

von WhyNot (Gast)


Lesenswert?

Okay ich bin böse, von mir aus :D
Aber eigentlich war das Problem ja ein anderes...

von ConvertQuestionsToAnswers (Gast)


Lesenswert?

>Aber eigentlich war das Problem ja ein anderes...

Ist ja auch schon beantwortet worden.

>Den Stop-Schalter könntest Du einfach am Ende der Schleife abfragen.

von Karl H. (kbuchegg)


Lesenswert?

Na ja.
Eigentlich ist die richtige Antwort:
Baue das Programm komplett um auf eine(oder mehrere) State-Maschines.

Man kann zwar in das vorhandene Programm auch sowas wie einen Notaus 
einbauen, aber dann muss man jede Schleife beackern. Der TO lernt 
gerade, dass Fehlerbehandlung und vor allen Dingen das Rückführen in 
einen gesicherten Zustand, eines der schwierigen Dinge ist, die einem im 
nachhinein ein ganzes Programmkonzept versauen können.

von WhyNot (Gast)


Lesenswert?

ConvertQuestionsToAnswers schrieb:
>>Den Stop-Schalter könntest Du einfach am Ende der Schleife abfragen.

WhyNot schrieb:
> Wenn ich am Ende der If
> Abfrage ein Stop einbaue, kommt er dort erst hin, wenn er den kompletten
> Ablauf schon hinter sich hat

Wenn ich das System jetzt auf eine State Machine umstelle, wie muss ich 
denn dann mit den Schleifen umgehen? Die Seite dazu schaue ich mir 
gerade genauer an, jedoch ändert ein switch-case doch auch nicht diese 
Tatsache. Oder stehe ich jetzt auf dem sprichwörtlichen Schlauch?

von Florian P. (db1pf)


Lesenswert?

WhyNot schrieb:
> Wenn ich das System jetzt auf eine State Machine umstelle, wie muss ich
> denn dann mit den Schleifen umgehen? Die Seite dazu schaue ich mir
> gerade genauer an, jedoch ändert ein switch-case doch auch nicht diese
> Tatsache. Oder stehe ich jetzt auf dem sprichwörtlichen Schlauch?

Warten auf einen Eingang ist ein State. Das heißt du verlässt den State 
erst, wenn der Eingang den gewünschten Wert hat.

z.B.
1
while(1)
2
{
3
  switch(state)
4
  {
5
    case STATE1:
6
      tueWas();
7
      state = STATE2;
8
      break;
9
    case STATE2:
10
      if (eingang() == 0x123)
11
      {
12
        state = STATE3;
13
      }
14
      if (notaus())
15
      {
16
        state = NOTAUS;
17
      }
18
      break;
19
    case ...
20
   }
21
}

STATE2 wird erst verlassen, wenn der Einang den Wert 0x123 hat. Oder 
eben der Notaus betätigt wird...

Grüße,
Florian

von Thomas W. (wagneth)


Angehängte Dateien:

Lesenswert?

Wichtig ist erstmal zu verstehen das es :

- feste Zustände.
- und Transitions gibt.

Befindet sich Deine FSM im Zustand NOTAUS sorgst Du dafür das Deine 
Anwendung in einen nach aussen sicheren Zustand gesetzt wird.
Z.B. Alles aus.

Um aus diesem Zustand heraus zu kommen muss etwas passieren.
Der Notaus muss entriegelt werden.

Das fragst Du im Zustand "NOTAUS" ab, darauf hin setzt man einfach den 
neuen Zustand z.B. "START" und erledigt noch seine Sachen.
z.B. löschen der NOTAUS Variable welche alle Ausgänge sperrt...


Um soetwas "transparenter" und "modularer" hinzubekommen schreibe ich 
mir immer eine art Abstraktionslayer. (hal.c im Anhang)

Über eine Handvoll funktionen bekomme ich Zugriff auf die Aussenwelt.
Diese setzen eigentlich nur An/Aus und irgendwelche Timer.

Die Ansteuerung der PINs passiert nur noch im Timer Interrupt.

Dort würde ich auch den Freigabe setzen.
(hal.c : value.MotorEn)

Interessant ist der Standby in meinem "Menü".
Man kommt von fast überall in den Suspend und wieder zurück in den alten 
Status.

Auch laufen dort zwei FSM nebeneinander.

Mal gucken wie es die alten Hasen zerreissen :)


PS: http://www.youtube.com/watch?v=Bk4sUiuWdQ8

: Bearbeitet durch User
von ich, nicht du (Gast)


Lesenswert?

wer zum henker baut einen NOT-aus in software?

das ding heißt NOT-aus weil man damit im zustand der höchsten NOT das 
system ausschalten kann.

nehmen wir einmal an dein system würde sich aufhängen oder in eine 
endlosschleife laufen....
dann wird das NOT-aus regulär nicht mehr ausgeführt. (toller 
not(=nicht)-aus schalter)

man kann das natürlich mit einem interrupt lösen aber dann hat man aber:
1. das problem, dass es eine zeitliche verzögerung gibt (sprung in die 
interrupt routine)
2. das ein teil des codes die ausführung des interrupts unterbinden kann 
(man kann interrupts nämlich auch ausschalten)
und zu guter letzt muss man sicherstellen dass der NOT-aus interrupt 
nicht durch andere interrupts unterbrochen wird (auch ne nette 
angelegenheit wenn man den NOT-aus zwar ausführen will aber die 
ausführung ins unendliche verschoben wird)

die einzige wirklich sichere lösung wäre:

- beim starten des systems das gesamte system in einen sicheren zustand 
zu versetzen und
- einen harten NOT-aus zu bauen der z.b. die stromzufuhr unterbricht

wird der NOT-aus dann zurückgesetzt und das system startet wieder wird 
das system wie oben angegeben in einen sicheren zustand versetzt und 
fertig.

von apr (Gast)


Lesenswert?

ich, nicht du schrieb:
> die einzige wirklich sichere lösung wäre:
> ...
> - einen harten NOT-aus zu bauen der z.b. die stromzufuhr unterbricht

Aus ist halt nicht immer - wenn nicht sogar selten - ein sicherer 
Zustand.

von ich, nicht du (Gast)


Lesenswert?

apr schrieb:
>
> Aus ist halt nicht immer - wenn nicht sogar selten - ein sicherer
> Zustand.

höchstens wenn das system nicht ausreichend sicher erstellt wurde.
aber ich lasse mich gerne von einem guten beispiel überzeugen.

von Thomas W. (wagneth)


Lesenswert?

Bei irgendwas mit Aufheizen dürfte "aus" recht sicher sein.

Eine Presse die mir die Hand fest hält dürfte diese gerne wieder 
loslassen.


Dürfte Fallspezifisch sein, oder ?

von Amateur (Gast)


Lesenswert?

Für Dich persönlich gilt: Du kannst auch mit einem eckigen Ding Fußball 
spielen, kein Mensch kann Dir das verbieten.
Vor der Tür gelten ganz bestimmte Annahmen. Mit Deinem Fußball kannst Du 
Dich bestenfalls blamieren, wenn es aber um, von den Meisten 
akzeptierte, Definitionen geht, sollte man sich auch daran halten, oder 
in Deinem Falle sich erkundigen, was Sache ist.

Not-Aus ist aber ein ganz genau definierter Zustand. Dieser Zustand 
ändert sich, je nach tatsächlicher Gegebenheit. Häufig: Motor aus, aber 
Licht an.
Ich habe oft mit pneumatischen Systemen gearbeitet. Da heißt es alle 
Luft (Energie) muss weg - sollte man meinen. Wir hatten aber oft einen 
Zylinder, für den das nicht galt. Der bekam definiert eine ganz 
besonders abgestimmte Menge Luft.
Soviel zum Thema der Definition von Not-Aus.

Wenn ich mal unterstelle, dass es keine fehlerfreie Software gibt, so 
stellt sich automatisch die Frage: Was nützt eine Taste, die niemand 
beachtet (in diesem Falle abfragt).
Falls - was natürlich nie vorkommt - das Programm gerade einen Ausflug 
ins Nirwana macht – oder in einer Schleife mit sehr hoher Priorität 
festhängt ;-)

von ich, nicht du (Gast)


Lesenswert?

Thomas W. schrieb:
>
> Eine Presse die mir die Hand fest hält dürfte diese gerne wieder
> loslassen.

sicher, deshalb betätig man den NOT-aus schalter, die presse wird 
angehalten und dann kann man sich gedanken darüber machen wie man die 
hand da wieder raus bekommt. z.b. durch neustart der presse und das 
anfahren der sicherheitsposition (presse geöffnet)

Amateur schrieb:
> [...] Häufig: Motor aus, aber Licht an.

ja, NOT-aus für licht hab ich auch noch nie gesehen.
NOT-aus muss ja nicht den strom im gebäude kappen. die einzelne maschine 
(motor, presse, was auch immer...) reicht ja schon aus.

> Ich habe oft mit pneumatischen Systemen gearbeitet. Da heißt es alle
> Luft (Energie) muss weg - sollte man meinen. Wir hatten aber oft einen
> Zylinder, für den das nicht galt. Der bekam definiert eine ganz
> besonders abgestimmte Menge Luft.
> Soviel zum Thema der Definition von Not-Aus.

genau, diese menge wäre dann durch ein bestimmtes ventil zu 
halten/zuzuführen, welches nur im angesteuerten zustand (strom an) 
mehr/weniger druck zulassen würde.

von Amateur (Gast)


Lesenswert?

@ich, nicht du

Licht + Not-Aus
Bei unseren Maschinen waren viele Installationen über der Arbeitsplatte. 
Aus diesem Grunde war eine starke Beleuchtung "in" den Maschinen 
vonnöten. Die normale Hallenbeleuchtung reichte hierfür nicht aus. Wäre 
dies nicht der Fall, müsste zu jeder Wartung Beleuchtung mitgebracht 
werden- und zwar viel.
Die Bediener haben sich aber über dieses grelle, für die normale 
Bedienung oft ungünstige, Licht beschwert, war auch im Normalbetrieb 
Verschwendung.

Sonderbehandlung
In vielen Maschinen befand sich ein vertikaler Druckzylinder, an dessen 
Unterseite eine schwere und heiße (>300°) Platte war.
Normalerweise nimmt man im Not-Aus-Fall die Energie weg, was in diesem 
Falle zur Folge hätte, das der Zylinder, in der letzten Stellung 
blockiert bzw. sich ganz langsam absenkt.
Dieses Verhalten wiederum hätte zur Folge, dass die darunterliegende 
Installation durch übermäßige Hitze und zu lang andauernden Druck 
(Gewicht der Platte) zerstört worden wäre. Arbeiten währen in diesem 
Bereich auch nicht möglich gewesen.
Aus diesem Grund wurde, während überall die Luft abgeschaltet wurde, 
diesem Zylinder genau definiert Luft zugeführt.
Die Folge war, dass im Not-Aus-Fall der Zylinder in seiner letzten 
Stellung stoppte und von da aus ganz langsam noch oben Fuhr und dort 
verblieb.
Natürlich wurden alle, die mit den Maschinen zu tun hatten über dieses 
Verhalten informiert.

von ich, nicht du (Gast)


Lesenswert?

also wenn in einem notfall (z.b. kompletter stromausfall) ein system 
nicht selbstständig in einen sicheren zustand übergeht (was bei der 
maschine von dir ja nicht der fall wäre) dann würde ich den designer 
dieser maschine feuern.

von Amateur (Gast)


Lesenswert?

@ich, nicht du

Zwei offene Probleme gibt es in Deiner etwas simplifizierten Weltsicht.

1. Welches ist der sichere Zustand?

2. Wie kann man ohne Energie etwas beeinflussen?

In dem oben angeführten Beispiel wird der Zylinder beim Stromausfall 
nach oben gefahren. Dies unterstellt natürlich, dass noch Druckluft 
vorhanden ist.
Darüber hinaus sind die Maschinen, im Normalbetrieb, vollständig mit 
einem Gitter umschlossen, welches beim Öffnen den Not-Aus-Fall einleitet 
– muss so sein - DAU.

Vielleicht könnte aber das Verbot von Druckluft etwas bewirken. Strom 
ist auch nicht ganz ohne und hydraulische Systeme hat der Teufel 
erdacht.

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.