Hallo miha,
ich hab mir deine Anregungen jetzt mal näher angeschaut und durch den Kopf gehen lassen. Beim Design der BLIND_... Bausteine war es Ziel, diese möglichst unabhängig voneinander zu halten, so dass der BLIND_CONTROL beispielsweise auch ganz ohne BLIND_INPUT betrieben werden kann. Das bedingt, dass BLIND_CONTROL nichts über irgendwelche inneren Zustände von BLIND_INPUT wissen kann (und auch nicht wissen sollte). Deshalb kommunizieren beide Bausteine nur über die "genormte" Schnittstelle UP / DN / PI. Dabei wird UP / DN als manueller Fahrbefehl betrachtet, den der Baustein unbedingt ausführt (klar, wenn DN aktiviert ist, soll das Rollo halt nach unten fahren, so weit es geht).
Du willst jetzt aber erreichen, dass bei einem Klick das Ganze sich so verhält, wie im Automatik-Betrieb. Der richtige Ansatz dazu ist m.E. nicht der BLIND_CONTROL(_S) -Baustein, sondern der BLIND_INPUT. Erfreulicherweise bringt dieser schon alles mit, was man dazu braucht: Wenn Du die Setup-Variablen DBL_CLK1 und DBL_CLK2 auf TRUE setzt, wird sich der Baustein (fast) genauso verhalten, wie von Dir gewünscht, nämlich im Automatik-Modus die jeweilige Endposition anfahren (oder auch jede andere Position, die Du in den Setup-Variablen DBL_POS? einstellst). Was Dir jetzt nicht gefallen wird, ist die Tatsache, dass Du diese Befehle mit einem Doppelklick ausführen musst.
Wenn Du unbedingt diese Funktion auf Einzelklick haben willst, musst Du Dir den BLIND_INPUT selber anpassen, das könnte z.B. so aussehen (Achtung, hab ich nicht getestet):
...
(* decode actions *)
IF (s1d.LONG AND s2d.LONG) OR (status = 139) THEN
status := 139;
IF NOT (s1d.LONG OR s2d.LONG) THEN status := 130; END_IF;
ELSIF s1d.tp_LONG THEN
status := 132;
ELSIF s2d.tp_LONG THEN
status := 133;
ELSIF s1d.SINGLE THEN
IF click_en THEN
(* if running then we stop otherwise start new direction *)
IF QU XOR QD THEN
status := 131;
ELSE
status := 134; ändern -> status := 137;
last := tx;
dir := NOT dir;
END_IF;
END_IF;
ELSIF s2d.SINGLE THEN
IF click_en THEN
(* if running then we stop otherwise start new direction *)
IF QU XOR QD THEN
status := 131;
ELSE
status := 135; ändern -> status := 138;
last := tx;
dir := NOT dir;
END_IF;
END_IF;
ELSIF in THEN
...
Trotzdem sehe ich auch noch Verbesserungsmöglichkeiten im BLIND_CONTROL_S: Der Baustein reagiert nämlich nicht auf "nachträgliches" Einschalten von RU oder RD und auch bei der Rückkehr vom Manual_Standby in den Automatikmodus werden aktive RU/RD nicht berücksichtig. Beides möchte ich in der nächsten Version gerne noch nachrüsten.
Ich hoffe, das hilft Dir weiter. Bei Problemen schau ich mir das Ganze gerne nochmal an.
Heinz