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
@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.
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...
>... 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.
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
>> 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.
@ 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.
>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.
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.
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?
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
caseSTATE1:
6
tueWas();
7
state=STATE2;
8
break;
9
caseSTATE2:
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
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
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.
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.
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.
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 ?
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 ;-)
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.
@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.
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.
@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.