Hallo Gemeinde, ich habe versucht einen PAP für meine Arbeit anzufertigen... ich habe im Programm lediglich 3 switch case Anweisungen, diese funktionieren wie ein Stromstoßrelais.Steigende Flanke ---> Lampe leuchtet, erneute steigende Flanke ---> Lampe leuchtet nichtmehr... Wollte hier also mal nachfragen ob ich das so darstellen kann wie auf dem Bild? LG
Wie kann Sensor 1 gleichzeitig 0 und 1 sein?
:
Bearbeitet durch User
Erhard schrieb: > Hallo Gemeinde, > > ich habe versucht einen PAP für meine Arbeit anzufertigen... ich habe im > Programm lediglich 3 switch case Anweisungen, Wo genau sollen die sein? Ich seh da keine switch-case. Die Rauten sollen wohl ein paar if symbolisieren, die, na ja, so recht und schlecht da drinn sitzen. > diese funktionieren wie > ein Stromstoßrelais.Steigende Flanke ---> Lampe leuchtet, erneute > steigende Flanke ---> Lampe leuchtet nichtmehr... Wollte hier also mal > nachfragen ob ich das so darstellen kann wie auf dem Bild? Darstellen kann man viel. Aber funktionieren wird das, was du da gemalt hast, so nicht.
:
Bearbeitet durch User
Schau dir mal dieses Diagramm an. https://www.safaribooksonline.com/library/view/javatm-how-to/9780133813036/ch05lev2sec23.html
Das ist genau der punkt an dem ich nicht mehr weiter weis... ich habe jeweils 4 cases und er soll nach dem erfüllen eines cases beim nächsten programmdurchlauf direkt in den nächsten case springen...
Das programm ist schon fertig und funktioniert auch problemlos... ich muss es also nurnoch verständlich als PAP darstellen
Karl Heinz schrieb: > Darstellen kann man viel. Aber funktionieren wird das, was du da gemalt > hast, so nicht. (Und da ignorier ich erst mal sogar das noch auf dich zukommende Problem des Tastenprellens). Vergiss man das explizite EInschalten bzw. Ausschalten. Was du willst, das ist das bei der Erkennung eines Tastendrucks die Lampe in den jeweils anderen Zustand geschaltet wird. So eine Operation nennt man 'Togglen'. Jetzt musst du nur noch rauskriegen, wie man einen Tastendruck erkennt. Du brauchst dazu für jede Taste eine Variable in der du dir den jetzigen Zustand merkst. WEnn du ein paar Millisekunden später wieder den Zustand der Taste ansiehst, dann vergleichst du mit dem gemerkten Zustand. Sind die beiden unterschiedlich (vorher war nicht gedrückt, jetzt ist gedrückt), dann hat offenbar jemand in der Zwischenzeit auf die Taste gedrückt und du machst die Aktion, die du bei der Erkennung eines Tastendrucks machen willst. Der jetzt vorliegende Tastenzustand wird dann ausserdem noch in die Variable übertragen und fungiert dann als Vergleichswert in der nächsten Runde ein paar Millisekunden später. Dann ist die Taste immer noch gedrückt, aber dein Vergleich ergibt, dass die Taste vorher gedrückt war, jetzt immer noch gedrückt ist, daher hat in der Zwischenzeit niemand die Taste gedrückt oder losgelassen -> keine Aktion erforderlich. Sprich: dein ganzer Programmansatz ist komplett falsch. PAP hin oder her.
Erhard schrieb: > Das programm ist schon fertig und funktioniert auch problemlos .. ich > muss es also nurnoch verständlich als PAP darstellen Darauf kann es eigentlich nur eine SChlussfolgerung geben: Das Programm ist nicht von dir. Denn wenn das Programm auch nur den Hauch einer Ähnlichkeit mit dem PAP hat, dann kann es nicht problemlos funktionieren. Ausser deine Definition von 'problemlos' deckt sich nicht mit meiner.
Doch dass programm ist von mir... es ist nur das erste mal dass ich einen PAP brauche...
Kann das orginalprogramm nicht abbilden, da ich momentan zuhause sitze... abe ich kann es für einen case schildern
1 | While (1) |
2 | { |
3 | Switch case (chanel) |
4 | Chanel1 |
5 | If rc2 = 1 ( |
6 | Portb rb1 = 1 |
7 | Chanel = 2 |
8 | ) |
9 | |
10 | Chanel2 |
11 | If rc2 = 0 ( |
12 | Chanel = 3 |
13 | ) |
14 | |
15 | Chanel3 |
16 | If rc2 = 1 ( |
17 | Portb rb2 = 0 |
18 | Chanel = 4 |
19 | ) |
20 | |
21 | Chanel4 |
22 | If rc2 = 0 ( |
23 | Chanel = 1 |
24 | } |
So oder so ähnlich sieht es im orginal aus ;)
:
Bearbeitet durch User
Erhard schrieb: > Kann das orginalprogramm nicht abbilden, da ich momentan zuhause > sitze... abe ich kann es für einen case schildern Ein switch-case wird aber so in einem PAP dargestellt http://www.dr-seifert-online.de/Downloads/switchcase.pdf > So oder so ähnlich sieht es im orginal aus ;) Eher 'so ähnlich'. Zum einen ähnelt das keiner mir bekannten Programmiersprache, was noch nicht viel heissen mag. Zum anderen hat das hier skizzierte eine vollkommen andere Struktur als das, was du im Eröffnungsposting gezeigt hast. Eine Struktur, deren Quintessenz du überhaupt nicht verstanden zu haben scheinst.
:
Bearbeitet durch User
Ich nehme an, der Hauptteil der europäischen IT-Technologie sowie der vorgeschaltenen Schulen, Berufsschulen, Fachhochschulen und Universitäten verdankt ihr Fortbestehen Herrn Karl Heinz B. :-)
Neuer Versuch neues Glück.... >Ein switch-case wird aber so in einem PAP dargestellt >http://www.dr-seifert-online.de/Downloads/switchcase.pdf das glaube ich hat mich auf die richtige bahn gebracht...
@Erhard: Auch wenn du es im Eingangspost nicht dargestellt hast, gehe ich davon aus, dass du in deinen rechten Verzeigungen (sensor1=0, sensor1=1) auf den Wechsel wartest. Hierfür fehlt der nein-Zweig, welcher auf den Eingang verzweigt. Ob du bei sensor 2 und 3 auch auf den Flankenwechsel von sensor1 wartest, bewzeifle ich. Dein PAP liest die Sensorwerte und verarbeitet diese direkt. Dein späterer Codeschnipsel nutzt eine Zustandsmaschine (channel). Da Du bereits ein Programm hast, kannst Du den PAP direkt dananch zeichnen. Ich würde vorab empfehlen, deinen Source um ggf. leere else-Zweige zu erweitern. Das hilft dir möglicherweise auch dabei, die nein-Zweige ordentlich einzuzeichnen.
Erhard schrieb: > Neuer Versuch neues Glück.... sieht schon besser aus. * nur müssen von den grünen Aktionskästchen dann auch noch Pfeile rausgehen die zu der Stelle führen, an der die weitere Programmbearbeitung weiter geht. Wenn du mit dem Finger ein PAP abfährst, dann darfst du dich nur an den Pfeilen lang tasten. Geht von einem Kästchen kein Pfeil zu einem anderen Kästchen, dann kannst du auch nicht mit dem Finger dort hin fahren. In deinem Fall wärst du dann mit dem Finger in den grünen Aktionskästchen gefangen und kannst nicht mehr weiter * es gibt kein Aktion 'Default'. Wirf den Kasten raus. Es ist vollkommen legal, wenn der 'falsch' Pfeil dann ganz einfach wieder zur Hauptlinie zurück führt. Pfeil ist Pfeil. Und wenn die Programmausführung (aka dein Finger) zu dieser Stelle kommt, dann fährt er einfach den Pfeil entlang. * du solltest dich mit dir selbst einigen, ob du Vergleiche auf Gleichheit mit = oder mit == schreibst. Was die DIN fordert weiss ich nicht, aber dass sie nicht beides gleichzeitig zulassen kann, dass weiss ich ganz sicher.
Karl Heinz schrieb: > * es gibt kein Aktion 'Default'. Wirf den Kasten raus. Es ist vollkommen > legal, wenn der 'falsch' Pfeil dann ganz einfach wieder zur Hauptlinie > zurück führt. Pfeil ist Pfeil. Und wenn die Programmausführung (aka dein > Finger) zu dieser Stelle kommt, dann fährt er einfach den Pfeil entlang. Wenn der Default Zweig leer ist stimme ich zu, dass das Kästchen weg kann. Ansonsten sollte es die default-Aktion beinhalten - also konkret benannt werden.
Steffen Rose schrieb: > Karl Heinz schrieb: >> * es gibt kein Aktion 'Default'. Wirf den Kasten raus. Es ist vollkommen >> legal, wenn der 'falsch' Pfeil dann ganz einfach wieder zur Hauptlinie >> zurück führt. Pfeil ist Pfeil. Und wenn die Programmausführung (aka dein >> Finger) zu dieser Stelle kommt, dann fährt er einfach den Pfeil entlang. > > Wenn der Default Zweig leer ist stimme ich zu, dass das Kästchen weg > kann. Ansonsten sollte es die default-Aktion beinhalten - also konkret > benannt werden. In seinem Fall gibt es an dieser Stelle keine Default Aktion. Die 'Variable1' kann nur Werte von 1 bis 4 annehmen. Das sind die 4 Zustände, die die Zustandsvariable benötigt um 2 Tastendrücke abzuzählen. Im Grunde genommen könnte man daher auch den Vergleich auf 4 komplett rausnehmen und die zugehörige Aktion auch in den 'falsch' Teil des Vergleichs auf 3 setzen (was im switch-case dann zum default wird)
:
Bearbeitet durch User
Karl Heinz schrieb: > In seinem Fall gibt es an dieser Stelle keine Default Aktion. Ich stimme zu. Ich bin nur immer geneigt bei Einsteigern weniger zu optimieren.
Da wird immernoch nicht klar, warum du ein Switch-Case brauchst... PseudoCode
1 | alterWert = 0; |
2 | neuerWert = Eingang; |
3 | Ausgang = 0; |
4 | |
5 | Schleife |
6 | neuerWert = Eingang; // Schalter, entprellt |
7 | |
8 | if (alterWert = 0 UND neuerWert = 1) |
9 | Ausgang = Nicht Ausgang; |
10 | ende_if |
11 | |
12 | alterWert = neuerWert; |
13 | Ende_Schleife |
Da kommt man ohne aus und ist mMn sinnvoller?
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.