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
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.
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...
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.
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.
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. :-)
@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)
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.