Schleife oder nicht ?

Binatone

Level-1
Beiträge
39
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Tach Freunde :)

Ich muss mehrere (12) komplett identische aber jeweils recht umfangreiche Funktionen programmieren und später auch evtl. öfters mal abändern.

Kann man eine Schleifenvariable nehmen (X 1..12) und die entsprechenden Werte in Arrays "Wert[1..12]" auslesen/bearbeiten/setzen ?
(*x ist eine globale Variable*)

START TASK
...
x:=x+1;
if (x>12) then
x:=1;
End_if;
Abarbeitung();

...
END TASK



Oder ist diese Strategie eher negativ weil eine Aktion immer erst beim Erreichen der passenden Schleife ausgeführt wird.

Es geht 12 mal um Tastenabfrage (Klick.. Doppelklick..dreifach klick.. langer Klick mit jeweils anderen Funktionen dahinter) und eine gleichzeitige Betätigung der Taster ist eher ausgeschlossen, und wenn doch wäre es nicht wirklich wichtig.

Besten Dank
 
Zuletzt bearbeitet:
Tach Freund,

..Kann man eine Schleifenvariable nehmen (X 1..12) und die entsprechenden Werte in Arrays "Wert[1..12]" auslesen/bearbeiten/setzen ?..
Prinzipiell kann man das. Da du u.a. einen Doppelklick von einem Einfachklick unterscheiden willst, wäre eine zyklische Abarbeitung aller Tasten gescheiter. Daher würde ich zu einer FOR-Schleife tendieren. Oder du schreibst einen FB (für nur eine Taste) und rufst ihn zwölf mal auf.

Oder: Eventuell könnte man auch "x" durch die jeweilige Taste setzen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Kommt auf die Task-Zykluszeit an. Wenn ein Tastendruck kürzer als 12 Zyklen sein kann, wirst Du nicht jeden Klick erwischen. Wenn es die Rechenleistung zulässt, würde ich auch lieber alle Taster zyklisch bearbeiten.
Falls nicht, wäre noch Folgendes denkbar:
Solange kein Taster betätigt ist, in jedem Zyklus alle Taster abfragen, und bei einer L-H-Flanke in den folgenden Zyklen nur noch diesen Taster bearbeiten, bis er wieder losgelassen wurde und die max. Zeit bis zu seinem nächsten Klick abgelaufen ist.
 
Kommt auf die Task-Zykluszeit an. Wenn ein Tastendruck kürzer als 12 Zyklen sein kann, wirst Du nicht jeden Klick erwischen. Wenn es die Rechenleistung zulässt, würde ich auch lieber alle Taster zyklisch bearbeiten.
Falls nicht, wäre noch Folgendes denkbar:
Solange kein Taster betätigt ist, in jedem Zyklus alle Taster abfragen, und bei einer L-H-Flanke in den folgenden Zyklen nur noch diesen Taster bearbeiten, bis er wieder losgelassen wurde und die max. Zeit bis zu seinem nächsten Klick abgelaufen ist.

eine FOR...Schleife wir komplett in einem Zyklus abgearbeitet...

also wenn Du deinen Code in einen FB packst und die instanzen als ein Array deklarierst hast du kein problem...
Wenn du aus der Instanz direkt auf EA´s zugreigen willst kannst du diese im FP z.B. als:

Eingang at %IX* : bool;

deklarieren und dann außerhalb (var_config) zuweisen.


(* Deklaration *)

TuWas : Array[1..12] of Mein_FB;
Idx : int;


(* Programm *)

FOR Idx := 1 TO 12 DO
TuWas[Idx]();
END_FOR

Oder mal hier lesen


Gruß Bernd
 
BerndAllgäu schrieb:
eine FOR...Schleife wir komplett in einem Zyklus abgearbeitet...
Richtig. Aber Binatone hat in seinem Code ja keine FOR-Schleife, sondern einen Indexzähler, der in jedem Zyklus hochgezählt wird. Dann wird pro Zyklus nur einer der Taster bearbeitet, und jeder Taster-Signalzustand muss für min. 12 Zyklen anliegen, um sicher erkannt zu werden.
 
Zurück
Oben