BLIND_INPUT True immer auf den Ausgängen

Begonnen von NightWatcher, 13. Februar 2014, 09:31:08

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

NightWatcher

Servus,

ich bin noch recht neu in dem Thema oscat und SPS.

Gerade bin ich dabei, mir meine Anforderungen zusammenzupro äh "klicken" ;-)

Jetzt habe ich meine ersten Taster und Jalousie zusammengestellt und frage mich, wieso der BLIND_INPUT immer ein True auf die Ausgänge gibt. Und zwar durchgängig. Anbei mal meine verschaltung inkl. der Zustände vom Baustein.

[gelöscht durch Administrator]

mattsches

Hallo NightWatcher,

wenn QU und QD beide TRUE sind, ist der Automatikbetrieb aktiv. Nachgeschaltete Bausteine (in Deinem Fall BLIND_NIGHT) können dann Position und Lamellenwinkel nach ihren jeweiligen Regeln über PO und AO steuern. Wird einer der beiden Eingänge S1 oder S2 am BLIND_INPUT TRUE, geht der Baustein in Handbetrieb, und die Jalousie wird manuell gefahren. Nach der Zeit MANUAL_TIMEOUT wechselt der Baustein dann wieder in den Automatikbetrieb.

Schau mal in die Doku der Building Library, in Kap. 7 steht das ganz gut beschrieben.

Grüße,
mattsches

NightWatcher

Das Kapitel habe ich bereits schon 10x gelesen. Leider ist es für einen Neuling nicht so ganz klar. Wieso müssen die QU und QD auf True stehen? Damit nachfolgende Module wissen, dass die Jalousie im Automatikbetrieb ist?

PO ist doch nur ein Status oder hat der Ausgang eine steuernde Funktion?

mattsches

Ja, genau:

ZitatWerden beide Eingänge UP und DN auf TRUE gesetzt so schalten die betrefenden Module auf Automatik Modus und werten die Eingänge PI und AI (Position- und Winkel- Eingang für die Jalousie aus.

PO ist kein reiner Statusausgang, sondern der Positions-Sollwert eines Bausteins.

Beispiel: Bei mir sind die Bausteine in folgender Reihenfolge aufgebaut:

BLIND_INPUT - BLIND_SHADE - BLIND_NIGHT - BLIND_SECURITY - BLIND_CONTROL

Von hinten nach vorne:


  • BLIND_CONTROL macht die tatsächliche Ansteuerung der beiden Digitalausgänge bzw. des Jalousienmotors. Ist nur einer der beiden Eingang UP/DN = TRUE, fährt er die Jalousie in die angegebene Richtung. Sind beide TRUE, steuert er die Ausgänge so an, dass die durch PI definierte Position und der durch AI definierte Lamellenwinkel erreicht wird. Damit das funktioniert, müssen die beiden Zeiten T_UD und T_ANGLE richtig eingestellt sein.
  • BLIND_SECURITY fährt die Jalousie in meinem Fall herauf, wenn die Wetterstation zu viel Wind meldet (indem QU=TRUE und QD=FALSE gesetzt wird). Das macht er immer, unabhängig davon, ob Hand- oder Automatikbetrieb aktiv ist. Ist ja eine Notfunktion.
  • BLIND_NIGHT fährt die Jalousie abends herunter, sofern sie sich im Automatikbetrieb befindet. UP/DN werden nach QU/QD kopiert (in diesem Fall beide TRUE), AI und PI werden ignoriert, stattdessen wird PO=0 und AO=0 geschrieben. Wenn gerade keine Nacht ist, kopiert der Baustein AI/PI nach AO/PO, ist also wirkungslos.(
  • BLIND_SHADE fährt - wenn der Automatikmodus aktiv ist - die Jalousie bei SUN=TRUE und ENABLE=TRUE herunter und führt den Lamellenwinkel nach. Auf AO und PO werden dann errechnete Werte geschrieben, AI und PI werden wieder ignoriert. Scheint keine Sonne, werden AI/PI nach AO/PO kopiert.
  • Nun zu BLIND_INPUT: Im Automatikbetrieb werden wie schon beschrieben QU und QD gleichzeitig auf TRUE gesetzt, um den nachfolgenden Bausteinen eben diesen Automatikbetrieb mitzuteilen. Denn nur in diesem Fall wird z. B. ein BLIND_NIGHT überhaupt aktiv. Im Handbetrieb ist nur einer der beiden Ausgänge aktiv, und auch nur so lange, wie die Jalousie von Hand gefahren werden soll. Die nachfolgenden Bausteine reichen die beiden Signale dann einfach durch, bis sie am BLIND_CONTROL ankommen und der den Motor entspreched ansteuert.

Durch die Reihenfolge der Bausteine ergibt sich, wer letztendlich das Sagen hat. Wenn BLIND_SHADE zwar meint, die Jalousie müsse geschlossen sein, weil es Nacht ist, kann trotzdem noch BLIND_SECURITY dafür sorgen, dass sie oben bleibt (weil z. B. der Wind zu stark ist). Denn jeder Baustein leitet entweder die Eingänge einfach weiter an die jeweiligen Ausgänge, wenn er funktionslos ist. Oder er schreibt andere Werte auf die Ausgänge, wenn er es "für richtig hält". Damit ist klar, dass der letzte in der Kette am meisten "zu sagen" hat. Quasi wie bei stiller Post.

Obacht, die Zahlenwerte an PI und AI sind größenlos und auf 0..255 normiert. Ich fand das nicht so verständlich und habe mir die Bausteine so umprogrammiert, dass ich mit Winkelangaben und 0..100 % für die Positon arbeiten kann. Siehe hier: http://www.oscat.de/community/index.php/topic,2143.0.html

Zweites Obacht: Wenn Du möchtest, dass die Jalousie morgens automatisch wieder hochfährt, muss Du an BLIND_NIGHT E_DAY=TRUE setzen (soweit einleuchtend), zusätzlich am BLIND_INPUT jedoch noch MASTER_MODE auf TRUE nehmen.

Hilft Dir das ein bisschen?

mattsches

Zur Verdeutlichung hier noch ein Screenshot, wie das bei mir gerade ausschaut.

QU/QD vom BLIND_INPUT sind TRUE, Automatikbetrieb ist also aktiv. BLIND_INPUT gibt außerdem PO=100 und AO=90 aus. Obacht, wie erwähnt, ich habe die Bausteine angepasst. Bei den Standardbausteinen würde hier jeweils 255 stehen (für ganz geöffnet).

Die Jalousie ist aber geschlossen. Warum? Schauen wir mal weiter.

BLIND_SHADE leitet PI und AI einfach an PO und AO durch. Wenn es nach ihm geht, wäre die Jalousie also auch geöffnet. Logisch, es scheint ja keine Sonne (davon mal abgesehen, dass es sich hier eh um ein Nordfenster handelt).

Wenn Du nun BLIND_NIGHT anschaust, siehst Du PO=0 und AO=18. Denke Dir statt der 18 bitte einfach 0, auch das ist eine Folge meiner Änderungen (meine Jalousien schließen nicht weiter als 18°). QU und QD sind weiterhin beide TRUE. Also überfährt der BLIND_NIGHT hier die anderen Bausteine und fordet ein Schließen der Jalousie an. Prima, es ist ja auch Abend/Nacht.

BLIND_SECURITY stellt gerade keinen besonders starken Wind fest und hat damit keinen Anlass, die an PI und AI anstehenden Werte zu korrigieren. Er kopiert sie daher einfach auf PO und AO.

BLIND_CONTROL bemerkt nun schlussendlich den Automatikbetrieb, weiß also, dass er die Ausgänge MU und MD (an denen der Jalousienmotor hängt) so ansteuern soll, dass die an AI und PI anstehenden Werte erreicht werden. Er hat also die Jalousie herunter gefahren und danach die Ausgänge abgeschaltet.

Ergebnis: Es schaut uns keiner ins Bad.   :)

[gelöscht durch Administrator]

NightWatcher

#5
Ganz schön strange. Da blick ich noch nicht durch  :-\

Was mir nun nach 2 Tagen testen auch aufgefallen ist: Die Rollos fahren passend zum Sonnenuntergang herunter, aber nicht morgens hoch. Kann man anhand meines Screens oben sagen, wieso das so ist?

Bei mir handelt es sich nur um Rollos.

EDIT: Gerade gesehen, dass du ja bereits versuchtest, meine Frage zu beantworten:
ZitatZweites Obacht: Wenn Du möchtest, dass die Jalousie morgens automatisch wieder hochfährt, muss Du an BLIND_NIGHT E_DAY=TRUE setzen (soweit einleuchtend), zusätzlich am BLIND_INPUT jedoch noch MASTER_MODE auf TRUE nehmen.
E_DAY ist bereits true. Scheint ein Default Wert zu sein.
MASTER_MODE ist false. = Laut Doku heisst es, dass bei true die Position nicht weitergegeben wird. Aber das kann er doch ruhig? Dann weiss BLIND_NIGHT doch, in welcher Position sich der Rolladen befindet.

mattsches

#6
Genau dieses Weitergeben von Position und Winkel bei MASTER_MODE = FALSE (Standardeinstellung) führt dazu, dass die Rollos morgens nicht hochfahren.

Was passiert also?

BLIND_INPUT gibt bei MASTER_MODE = FALSE die Eingänge POS/ANG an PO/AO weiter. Also die aktuelle Position des Rollos, vorausgesetzt, Du hast die Eingänge wie empfohlen auf die entsprechenden Ausgänge von BLIND_CONTROL verschaltet. Wenn nun also BLIND_NIGHT das Rollo schließt (mittels PO=0), wird POS=0, das Rollo ist ja nun heruntergefahren. BLIND_INPUT reicht diesen Wert an PO durch.

Morgens schaltet sich BLIND_NIGHT nun einfach ab und macht sich "transparent". Folge: Er reicht PI/AI an PO/AO durch. Welcher Wert steht nun am Eingang PI an? Richtig, 0. Eben das, was BLIND_INPUT immer noch ausgibt.

Schaltet man nun MASTER_MODE auf TRUE, dann entfällt diese Weitergabe von POS/ANG an PO/AO beim BLIND_INPUT. PO bleibt dort also z. B. auf 255 stehen, auch wenn die tatsächliche Position des Rollos wegen BLIND_NIGHT 0 ist. Schaltet sich nun BLIND_NIGHT morgens ab, steht an dessen Eingang PI 255 an. Er reicht das weiter, und BLIND_CONTROL fährt das Rollo herauf.

Probier's einfach mal aus.

Kleiner Nachtrag: BLIND_NIGHT will überhaupt nicht wissen, wie die aktuelle Position des Rollos ist. Keiner der "mittleren" Bausteine muss das. Alles, was sie tun, ist die Positions- und Winkelsollwerte PO/AO entsprechend ihren internen Algorithmen zu beschreiben. Dass das Rollo dann tatsächlich auf diese Position fährt, dafür ist BLIND_CONTROL verantwortlich.

NightWatcher

#7
Du solltest die Doku schreiben :-D solche Beispiele Fehler für absolute Anfänger, wie mich. Ich ging immer von aus, die QU und QD schalten die Rollos.

Leider gingen nur heute morgen die Rollos wieder nicht hoch. An PO lag an beiden Modulen trotz MASTER_MODE = true, 0 an.
EDIT: Glaube hier lag der Fehler darin, weil ich die Fenster gestern manuell per Force runter gefahren habe. Daher lagen am BLINT_INPUT PO logischerweise noch 0 an. Den wert hat er sich bei der Tagschaltung dann natürlich einfach geholt. Nur was passiert denn heute Abend? Rollos fahren runter. POS von BLIND_CONTROL_S meldet an POS von BLIND_INPUT den Positionswert. Der landet doch auch wieder direkt am PO?!

Übrigens, woran kann das liegen, dass wenn ich die wago nach dem überspielen neu starte, die Rollos immer hoch fahren? Ist PO am BLIND_INPUT immer per default 255?

mattsches

Mit Deinem Edit liegst Du genau richtig. Wirst Du zwischeneitlich vermutlich auch gemerkt haben. Ein Handeingriff führt zu entsprechendem PO am BLIND_INPUT, morgens schaltet sich der BLIND_NIGHT einfach passiv. Man muss das Rollo von Hand hochfahren. Ab dem nächsten Abend sollte es dann funktionieren, wenn man nach dem automatischen Schließen nicht mehr von Hand eingreift.

ZitatNur was passiert denn heute Abend? Rollos fahren runter. POS von BLIND_CONTROL_S meldet an POS von BLIND_INPUT den Positionswert. Der landet doch auch wieder direkt am PO?!

Das passiert eben nur bei MASTER_MODE = FALSE. Bei TRUE leitet der BLIND_INPUT die aktuelle Position von BLIND_CONTROL eben nicht weiter an sein PO. Dort bleibt immer die letzte manuell angefahrene Position stehen.

ZitatÜbrigens, woran kann das liegen, dass wenn ich die wago nach dem überspielen neu starte, die Rollos immer hoch fahren? Ist PO am BLIND_INPUT immer per default 255?

Jau, genau das sind die Default-Werte. Kannst Du einfach im Bibliotheksverwalter nachschauen. Links oben die oscat_building anwählen, dann links darunter in der Kategorie Jalousie den BLIND_INPUT. Rechts siehst Du dann die Deklarationen:

VAR_OUTPUT
QU : BOOL := TRUE;
QD : BOOL := TRUE;
STATUS : BYTE;
PO : BYTE := 255;
AO : BYTE := 255;
D1, D2 : BOOL;
END_VAR


Also: Nach dem Einschalten ist der Automatikmodus aktiv und Sollwert=Rollo geöffnet. Also fährt er hoch. BLIND_NIGHT müsste eigentlich für ein Schließen sorgen. Er ist aber darauf angewiesen, dass die Sonnenuntergangszeit schon berechnet wurde. Das passiert mit CALENDAR_CALC aber nur einmal am Tag.

Du könntest den BLIND_INPUT ändern und die VAR_OUTPUT in VAR_OUTPUT RETAIN PERSISTENT ändern. Dann sollten die Werte auch bei einem Neustart erhalten bleiben. Ich sage sollte, denn ich nutze keine Wago und weiß nicht mit völliger Sicherheit, ob der Hersteller die Funktion so unterstützt. Bei Beckhoff braucht es dafür ein paar Klimmzüge.

NightWatcher

Cool Danke für dein erneutes Feedback :-)

Ja mittlerweile laufen die Rollläden so wie gewünscht. Den Handbetrieb muss ich noch Testen. Aufgrund von Renovierungsmaßnahmen hat die Wand noch keine Steckdosen, Taster usw...