Hallo,
ich habe die BLIND Bausteine in meinem Gebäude zum Testen übernommen.
Dabei ist mir eine kleine Unstimmigkeit in BLIND_CONTROL aufgefallen.
Folgende Punkte:
1.Position vor Regelung abfragen:
Die Position wir nach der Regelung abgefragt daher hat man immer einen SPS Zyklus Versatz, was in meinem Beispiel 5/256 des verfahr weg ausmacht.
Bei entsprechend langer Zykluszeit wird das immer mehr.
(bei einer Zykluszeit von max 23ms und eine T_ANGLE von 1200ms ergibt sich 1200/256 = 4,7 ms Pro Pos Verstellung das heist 23/4,7=5 sens = 5)
Lösung:
Position Berechnung von BLIND_ACTUATOR in einer Aktion dadurch ist es einfach möglich vor der Regelung die Position schon mal zu berechnen
2.Tolerranz für Position ANG
Unter (* regulate angle *)
Wird delta := 0 gesetzt wo bei der Rollo aber 5/256pro Zyklus (in meinem Fall) verfährt, folge die Position wird überfahren
Lösung:
In den beiden ElSIF von (* regulate angle *)
delta := sense/2;
Die geänderten Bausteine kann ich zum testen euch zukommen lassen.
Hier noch mal der geänderte Code:
(* Check Position*)
act.aPosition();
IF UP AND DN THEN
(* automatic modus detected *)
(* first find correct position *)
IF BYTE_TO_INT(act.pos) < BYTE_TO_INT(pi) - delta THEN
act.UP := TRUE;
act.DN := FALSE;
delta := 0;
STATUS := 121;
ELSIF BYTE_TO_INT(act.pos) > BYTE_TO_INT(pi) + delta THEN
act.UP := FALSE;
act.DN := TRUE;
delta := 0;
STATUS := 122;
(* regulate angle *)
ELSIF BYTE_TO_INT(act.ang) < BYTE_TO_INT(ai) - delta AND T_angle > T#100ms THEN
act.UP := TRUE;
act.DN := FALSE;
delta := sens/2;
STATUS := 123;
ELSIF BYTE_TO_INT(act.ang) > BYTE_TO_INT(ai) + delta AND T_angle > T#100ms THEN
act.UP := FALSE;
act.DN := TRUE;
delta := sens/2;
STATUS := 124;
Gruß Andreas