Aktionen in FBs auslösen

twincatter

Level-2
Beiträge
139
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Gemeinde,

in der Regel werden (soviel ich weiß) Aktionen über eine Flankenauswertung gestartet (Trigger).
Wenn eine fallende bzw. steigende Flanke eines boolschen Variablenwerts auftritt wird eine Aktion ausgelöst.

Angenommen ich habe 10 Aktionen in meinem FB (z.B. ExecuteHoming, ExecuteMovePTP...) dann benötige ich auch 10 boolsche Eingangsvariablen. Nach deren Flankenauswahl wird dann innerhalb des FBs die entsprechende Aktion aufgerufen.

Es ist außerdem immer so, dass nur eine einzige Aktion zu einem Zeitpunkt ausgeführt wird.

Soweit so gut.

Alternativ wäre es einfacher eine einzige Integervariable zu verwenden und über deren Wert innerhalb des FBs die entsprechende Funktion aufzurufen (z.B. Wert = 3 dann Aktion 3 ausführen). Damit es eleganter ist könnte auch mit Enums gearbeitet werden. Nach durchlaufen des FBs müsste die Variable natürlich auf 0 gesetzt werden. So kann bei <> 0 detektiert werden, dass sich der Eingangszustand geändert hat.

Vorteil:
nur ein Eingang für alle Aktionen und keine Trigger notwendig.

Nachteil:
hier die Frage an Euch, welche Nachteile gibt es, warum wird es in den mir bekannten Beispielen nicht gemacht. :confused:

Danke, Michael
 
Hi,

wie Aktionen verwendet werden ist Sache des Programmierers.
Du kannst Aktionen z.b. auch immer Aufrufen. Aktionen (Methoden) kapseln ja einfach nur Code.
Um auf dein Beispiel zurückzukommen.
Schöner ist es auf jeden Fall mit Enums statt einzelner Bool Variablen.
Die Bausteine wie z.b. Homing usw. sollten aber immer aufgerufen werden damit du die "Done" Flags usw. richtig bekommst.

Gruss
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Gemeinde,

in der Regel werden (soviel ich weiß) Aktionen über eine Flankenauswertung gestartet (Trigger).
Wenn eine fallende bzw. steigende Flanke eines boolschen Variablenwerts auftritt wird eine Aktion ausgelöst.

Angenommen ich habe 10 Aktionen in meinem FB (z.B. ExecuteHoming, ExecuteMovePTP...) dann benötige ich auch 10 boolsche Eingangsvariablen. Nach deren Flankenauswahl wird dann innerhalb des FBs die entsprechende Aktion aufgerufen.

Es ist außerdem immer so, dass nur eine einzige Aktion zu einem Zeitpunkt ausgeführt wird.

Soweit so gut.

Alternativ wäre es einfacher eine einzige Integervariable zu verwenden und über deren Wert innerhalb des FBs die entsprechende Funktion aufzurufen (z.B. Wert = 3 dann Aktion 3 ausführen). Damit es eleganter ist könnte auch mit Enums gearbeitet werden. Nach durchlaufen des FBs müsste die Variable natürlich auf 0 gesetzt werden. So kann bei <> 0 detektiert werden, dass sich der Eingangszustand geändert hat.

Vorteil:
nur ein Eingang für alle Aktionen und keine Trigger notwendig.

Nachteil:
hier die Frage an Euch, welche Nachteile gibt es, warum wird es in den mir bekannten Beispielen nicht gemacht. :confused:

Danke, Michael

Hallo Michael,
wie kommst du darauf das Aktionen nur aufgerufen werden, wenn eine boolesche Eingangsvariable eine positive Flanke bekommt. Ich habe soetwas noch nicht gesehen. (Das heißt natürlich nicht, dass diese Vorgehensweise im Einzelfall nicht auch gut sein kann.) In den meisten Programmen die ich kenne, werden Aktionen direkt im Rumpf aufgerufen, in ein paar wenigen in einer State-Maschine, die in etwas so funktioniert, wie du es mit deiner Integervariable vorschlägst.
Auch würde ich sagen das es beim Programmierern solche Regeln wie du sie beschreibst eigentlich nicht gibt. Es gibt kein RICHTIG oder FALSCH. Sondern eher eine bessere oder schlechtere Lösung. Wenn deine Lösung für einen speziellen Anwendungsfall besser passt als die andere, dann ist die Lösung zu nehmen.
Gruß
wonderfulworld
 
Zurück
Oben