Änderungen für Blind_Control_S

Begonnen von miha, 31. Dezember 2009, 17:03:22

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

miha

Hallo,

bin gerade dabei mir meinen eigenen FB mit Blind Bausteinen zu erstellen. Jetzt habe ich noch folgende Anforderung:
Es soll zum Bsp. eine Zwangslüftung nicht nur im Automatikbetrieb möglich sein, sondern auch in Hand und zwar nur bei "Single Click". Ich habe mir jetzt den Quellcode angeschaut. Blind_Control_S kennt nur Handbetrieb, kann also nicht zwischen Single Click (134,135) oder Manual (132, 133) unterscheiden. Ich müsste also Blind_Control_S mit einer Abfrage erweitern - was mir aber noch nicht klar ist an welcher Stelle ich dann den neuen Status platziere (Case Anweisung) das alles andere noch so funktioniert?
Weiterhin ist wünschenswert dass die Kalibrierung auch unterdrückt werden kann, bzw. nur durch einen ext. Eingang auslösbar ist (z.b. Taster an einem HMI Gerät um reelle Pos mit angezeigter Pos. abzugleichen).
Was auf alle Fälle Sinn macht ist die Zeit für Rollo auf und zu getrennt zu betrachten:
rmp(E := UP OR DN, TR := T_UP, TF := T_DN, TL := T_LOCKOUT, OUT := POS);
Ich habe gerade bei kalter Witterung extreme Unterschiede von bis zu 15% bei den Laufzeiten zwischen "auf" und "zu" (habe sogar vor hierfür eine "Temperaturkompensation" zu machen)   

Grüße, miha

miha

Hallo zusammen,

mir ist immer noch nicht ganz der Ablauf des Bausteins klar (Erweiterung gewünscht - bzgl. Zwangslüftung auch bei Single Click)
Warum durchläuft der Baustein bei Automatikbetrieb den Status 129 -> 127 -> 124 etc. (mit Zwangslüftung) bei Hand aber nicht ??

Grüße,
miha

hugo

kannst du mal ein projekt posten dann sehen wir es uns an

miha

Hallo Hugo,

ich nutze erst lediglich die noch originalen Bausteine der Oscat.lib "Blind_Input" mit "Blind_Control_S" die miteinander verschaltet sind.
Bei einem Single Click vom Baustein "Blind_Input" (Status 134, 135) soll der Baustein "Blind_Control_S" auch mit einer "Zwanglüftung" reagieren wenn RU oder RD=TRUE (=gewünschte Erweiterung). Um die gewünschte Änderung selbst machen zu können, ist mir der Ablauf innerhalb des Bausteins noch unklar - warum geht z.b. bei Automatik der Baustein über Status 127 -> 124 bei Hand aber nicht, obwohl beide meiner Meinung nach im Vorfeld über Status 129 kommen müssten ? 

PS: Den Baustein dahingehend zu ändern macht auf alle Fälle Sinn:
- Automatikbetrieb (Ansteuerung z.b. Zeitgesteuert) -> Rollos komplett zu mit Zwangslüftung
- Handbetrieb Single Click -> Rollos komplett zu mit Zwangslüftung
hingegen Handbetrieb (132, 133) -> gezieltes Fahren der Rollos bis zum Loslassen des Tasters

Gruß,
miha

hugo

bevor wir ewig diskutioeren bitte bitte stelle ein kleines projekt nit den beiden bausteinen ein !!!!!

- stimmt deie ausführungsreihenfolge????
- selche der diversen setup parameter für die bausteine sind bei dir auf welche werte gesetzt ?????

mutmaßungen bringen uns hier nicht weiter

miha

Hallo Hugo,

- Ausführungsreihenfolge stimmt
- habe ein Export meines Bausteins und mit einem Beschaltungsbeispiel gemacht - zur Vollständigkeit noch die von mir geänderte lib (habe zum einfacheren Testen einige Setupparameter nach außen gelegt).



[gelöscht durch Administrator]

heinzl

#6
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

miha

Hallo heinzl,

danke für die Rückinfo. Bin momentan länger unterwegs und habe leider keinen Zugriff auf den Quellcode, kann mir die Sache also erst später anschauen.
Soweit ich mich aber erinnern kann, fragt ja Blind_Control_S wie du auch schon sagst nur UP/DN/PI ab - auch für Automatikmodus. Was bringt dann die Änderung vom Status im Blind_Input? - oder sorgt dieser Status (137,138) weiter unten im Quellcode für das richtige schalten v. UP / DN (=Automatik)?
Hätte ich dann aber auch das Problem, dass dann der Automatikbetrieb nicht für die eigest. Zeit außer Kraft gesetzt wird (Bsp. ich lasse mit der Änderung wie vorgeschlagen die Rollos "manuell" ab - der Automatikbetrieb ist aber aktiv und schaltet mir kurze Zeit später durch einen Befehl die Rollos wieder hoch.)
Die Doppelklick Funktion wird bei mir auch schon verwendet, um gezielt per Hand eine Position anzufahren (Sonnenschutz oder um das erste Morgenlicht in den Raum zu lassen - ohne den Rollo kompl. zu öffnen)

Das mit den RU /RD ist mir auch schon aufgefallen - in diesem Zusammenhang noch als Anregung, dass man die Laufzeiten von Blind_Input und Blind_Control_S irgendwie koppelt. z.B. Laufzeit Blind_Input + 10% = Laufzeit Blind_Control_S (+getrennte Laufzeit für auf und ab wobei die Laufzeit für ab um einen gewissen Prozentwert niedriger leigen kann) - aber du wolltest ja die Bausteine unabhängig betrachten ;-)

Gruß,
miha

heinzl

RU und RD wirken grundsätzlich NUR im Automatikmodus, wenn die Endpositionen (0 oder 255) angefahren werden. Automatikmodus ist immer dann, wenn UP und DN beide TRUE sind. Nach einer manuellen Fahrt aber hält der BLIND_INPUT UP und DN beide auf FALSE, das ist der sog. ManualStandby-Modus. Erst nach einer Stunde (Dauer einstellbar über die Config-Variable MANUAL_TIMEOUT in BLIND_INPUT) wird wieder in den Automatik-Modus gewechselt.

Dass RU und RD nicht im manuellen Modus wirken, ist Absicht. Die Idee ist: Wenn ich mein Rollo von Hand in irgendeine bestimmte Position fahre, dann möchte ich auch, dass es ganz genau dort stehen bleibt, wo ich es hingefahren habe. Zumindest solange, bis wieder in den Automatikbetrieb gewechselt wird. Manueller Modus = Ich steuere. Automatikmodus = Die Automatik macht, was sie für richtig hält.

Du kannst auch vor Ablauf von MANUAL_TIMEOUT in den Automatikmodus zurückkehren, wenn Du beide Taster lange gedrückt hältst.

Da aber bei Dir der Doppelklick schon belegt ist, hilft die meine vorgeschlagene Änderung nicht weiter. Du kannst aber anstatt meinem Vorschlag vom letzten mal folgende Änderung probieren:

   134:   (* manualautomatic operation single click up *)
         QU := TRUE;
         QD := FALSETRUE;
         PO := POS255; AO := ANG;
         IF tx - last >= max_runtime THEN status := 131130; END_IF;

   135:   (* manualautomatic operation single click dn *)
         QU := FALSETRUE;
         QD := TRUE;
         PO := POS0; AO := ANG;
         IF tx - last >= max_runtime THEN status := 131130; END_IF;


Ich bin mir nicht ganz sicher, ob das jetzt eine Änderung speziell für Dich ist, oder ob es sinnvoll wäre, das als Standard zu übernehmen. Da gibt es sicherlich für beide Vorgehensweisen gute Argumente.

Gruß
Heinz

miha

Hallo heinzl,

habe jetzt deinen letzten Vorschlag getestet - fahre jetzt über BLIND_INPUT bei Single einfach über Automatik - allerdings belasse ich den Status, entgegen deinem Vorschlag, auf 131 da ich erst nach Ablauf der Zeit in den Auto Mode möchte (Single Klick ist für mich nach wie vor Hand Modus)

Für BLIND_CONTROL_S habe ich jetzt noch einen Änderungswunsch: Ich möchte das Referenzieren (Kalibrieren) nur über einen externen Eingang zulassen (es soll auch nicht automatisch bei Spannung/Steuerung Ein erfolgen). Ich weiss aber noch nicht an welcher Stelle ich da am besten im Quellcode eingreife - hast du hierfür eine Lösung? - Evtl. auch für das nächste Release in allgemeiner Form, dass man die Strategie fürs Kalibrieren im Baustein parametrieren kann.

Gruß,
miha 

hugo

heinzl, ich finde auch das wäre eine gute ergänzung.
ein eingang der das kalibrieren enabled / disabled

chris.moe

Hallo,

wie sieht es mit dem Kalibrieren nach einem Neustart aus, kann ich das irgendwie unterdrücken. Ich würde mir vorstellen, dass ein Kalibrieren nur ausgeführt wird nach einem Neustart + Fahrbefehl.

Szenario:
Nachts Stromausfall -> Keine Aktion (Rolladen bleibt geschlossen)
Taster wird am Morgen betätigt -> Referenzfahrt wird durchgeführt

Gibt es hier schon eine Lösung?

Gruß,
Chris