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
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
@ 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.
Okay ich bin böse, von mir aus :D Aber eigentlich war das Problem ja ein anderes...
>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 | 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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.