PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programmierung einer Logik im HS



eibandy
17.08.06, 13:29
Hallo zusammen,

ich bin seit ein paar Tagen stolzer Besitzer eines HS. Habe soweit auch die meisten Grundfuntionen im HS eingebaut. Nun möchte ich mich mal an die logik-Bstlung des HS wagen und habe einfach mal versucht vollgesdes in eine Logik zu packen.

Aufgabe:
Komfortbetrieb Abends nach Hause:
Wenn Garagentor oder Haustüre Abends (LUX gesteuert) aufgemacht wird und ein bestimmter LUX-Wert unterschritten wird, dann sollen in verschiedenen Zeitabständen ein paar Lichter angehen und zeitgesteuert wieder ausgehen.

Problem:
=> die Logik funktioniert soweit, dass die Lichter zeitgesteuert an und wieder aus gehen.
=> was nicht funktioniert, dass die Lichter trotz Abhängikeit eines Lichtwertes von 350 Lux erst angehen! :confused:

=> die Verknüpfung ob oder ob nicht Funktoin ausgeführt wird habe ich mit einem UND-Gatter realisiert, die LUX-Auswertung mit einem Vergleichsgatter (<= 350). Aber dennoch geht das Licht immer an und es interessiert nicht wie hell es ist. Was mache ich falsch? :confused:

Da ich noch ein Neuling auf dem Gebiet HS bin, würde ich mich sehr freuen, wenn Ihr mir helfen würdet. Vielen Dank für die Hilfe im Voraus.

Grüße

eibandy

Matthias Schmidt
17.08.06, 13:31
Gib mal dem UND-Eingang, an dem der Vergleicher hängt, als Initwert eine O = Null. (Eingang doppelklicken, 0 eintragen)

Michel
17.08.06, 13:31
Erste Standardantwort in diesen Fällen:

Bitte Screenshot deiner Logik posten!

Wie soll sonst jemand erkennen, wie und ob du richtig "verdrahtet" hast?

eibandy
17.08.06, 17:53
Hallo Matthias und Michel,

vielen Dank für die schnelle Reaktion.
Sorry dass ich von der Logik kein Screenshot gepostet habe. Ich habe jetzt beide Varianten, welche ich getestet habe versucht, jedesmal das selbe Probleme.
Ich habe es nur mal für das Garagentor hier eingestellt, für die Haustüre und die Nebeneingangstüre ist die Logik identisch. Geht aber auch nicht.

Grüße
eibandy :confused:

Gaston
17.08.06, 18:12
Verwende mal beim "Kleiner Gleich" baustein den Ausgang A1 nicht "(sbc)", oder Du musst beim Und-Gatter E2 auf "0" setzen (hleicher Wert wie der SBC Ausgang) ansosnsten muss man Warten bis der Vergleich einmal richtig ist bevor eine "0" gesendet werden kann.

Generell würde ich raten sbc-Ausgänge nur am "Ende" der Verarbeitung zu benützen, es sei den es geht Funktional nicht anders. (Ende bedeutet, Ausgänge die mit einer Ausgangsbox verbunden sind).

Und wenn Probleme in Logiken mit sbc auftreten, die Logik solange ohne "sbc" entwickeln bis sie funktioniert (soweit dies möglich ist).

Gruss,
Gaston

eibandy
18.08.06, 14:06
Hallo Gaston,

Danke für Deine Info.
Habe wie in geposteten Info das Teil im HS programmiert. Scheint erst mal so zu gehen. Macht zumindest bei weniger als 350Lux das Licht nicht an.

Ist die Logik so richtig???:rolleyes:

so nun hab ich noch Fragen.

1.) den Wert des UND-Gatters habe ich ja auf 0 manuell (gelb) gestellt. Wie ist denn der Unterschied zwischen dem Automatischen (grünen) Eintrag und dem Manuell gestellten?

2.) Ich würde gerne das jetzt so programmiren, dass die Lampen nur Abends und nicht Morgens angehen. Wie muss ich den das abändern? (Z.B. wegen aufschließen der Haustüre Morgens)

Matthias Schmidt
18.08.06, 14:26
Fragen.

1.) den Wert des UND-Gatters habe ich ja auf 0 manuell (gelb) gestellt. Wie ist denn der Unterschied zwischen dem Automatischen (grünen) Eintrag und dem Manuell gestellten?



Grün heißt: Initwert standardmäßig, gelb zeigt an, dass der Initwert manuell verstellt wurde.

Die Ursache für dein problem liegt darin, dass der EIB und auch der HS demnach EREIGNISGESTEUERT funktioniert.

Dein UND wird beim HS-Start mit den Initwerten vorbelegt. Und die sind beide 1. Das ist in der Regel gut so, man kann nämlich an einem 4fach-UND nur drei Eingänge belegen und der 4. spielt dann keine Rolle, da immer 1.

das Problem sind die Vergleicher oder auch der Schwellwert. Die werden nämlich beim HS-.Start NICHT berechnet, sondern erst, wenn die Bedingung eintrifft. Bis dahin tut sich am Eingang des UND nichts, der Initwert bleibt gültig.

Dann (ab da) stimmt auch dein UND-Eingang, aber eben nach einem Neustart nicht. Deswegen setzt man in dem Fall den UND-Eingang initmäßig auf Null, um ungewolltes Schalten zu verhindern.

Verstanden?

eibandy
18.08.06, 16:07
Hallo Matthias,

vielen Dank für Deine Antwort.

O.K. das habe ich verstanden.
Somit schaltet sich nach abänderung jetzt mein Licht bei Neustart des HS nicht mehr ein. Funktiontiert! Danke! :)

Ist die so von mir programmierte Logik o.k. oder programmiert man die von mir geforderte Funktion anderst als EIB-Spezialist?

Sollte die Logik so o.k. sein, dann ist doch der nächste Schritt dieser, dass man gewisse Eventualitäten noch abdeckt. Somit auch jene, dass wenn über Nacht die Haustüre geschlossen ist und am Morgen aufgeschlossen wird, nicht Morgens die Logik anspricht.
Wie wird denn die Abfrage ob Tag/Nacht oder Morgens/Abends realisiert?

Viele Grüße
eibandy

Matthias Schmidt
18.08.06, 16:17
Ist ok so. Tag/Nacht-Umschaltung z.B. mit einber nachgeschalteten Sperre.

eibandy
18.08.06, 16:37
Hallo Matthias,

Das würde bedeuten, dass zwischen dem Ausgang des UND-Gatters und der Ausgangsbox die Sperre (ID 10205) eingebaut werde muss oder. Aber wie bekomme ich mit ob es nun Tag oder Nacht ist. und die muss ich die Eingänge der Sperre belegen. der Ausgang der Sperre geht wohl auf die Ausgangsbox. Habe mal eine weitere Variante4 angehängt, würde das dem so entsprechen wie Du es meinst? Nur wo bekomme die Info für den EingangE1 her? Oder ist das Falsch bw. denke ich falsch?

Noch eine kleine Frage am Rande. (hoffe dass ich nicht nerve, bin aber leider noch etwas neu auf dem Gebiet, aber jeder fängt ja mal klein an. Sorry!)
Ich habe ja derzeit zwei Eingangsboxen. macht das Sinn oder nimmt man nur ein und legt ein weiters Kommunikationsobjekt darunter an? Was ist denn der Unterschied bei einer oder zwei Eingangsboxen?

Grüße

eibandy

Gaston
18.08.06, 17:02
das Problem sind die Vergleicher oder auch der Schwellwert. Die werden nämlich beim HS-.Start NICHT berechnet, sondern erst, wenn die Bedingung eintrifft. Bis dahin tut sich am Eingang des UND nichts, der Initwert bleibt gültig.

Dann (ab da) stimmt auch dein UND-Eingang, aber eben nach einem Neustart nicht. Deswegen setzt man in dem Fall den UND-Eingang initmäßig auf Null, um ungewolltes Schalten zu verhindern.

Verstanden?

Hmm, ich glaub da muss ich Widersprechen :D . Das Problem war, wie schon gesagt, der sbc. Der verwendete Vergleicher, Baustein ID 9023 wird bei Init ausgeführt und ein Wert auf Ausgang 1 geschrieben. Der SBC Ausgang wird beim Starten jedoch nicht gesetzt. Dies ist ein Bug da es gegen das Prinzip des "Versprechen halten" der Informatik spricht.

Diese Prinzip besagt dass die Dokumenation einer Funktion (hier ein Baustein) alles halten muss was sie verspricht (sprich dokumentiert), und nichts versprechen soll was sie nicht hälte oder später vieleicht einmal nicht halten kann.

Das gleiche Prinzip bedeutet implizit dass der Benuter der Funktion nicht mehr informationen als die Dokumentation haben muss um die Fuinktion richtig einzusetzen.
Im Fall hier wird weder SBC eingehalten noch kann man ohne insight in die Quellen des Moduls verstehen warum es so ist.

Gruss,
Gaston

Matthias Schmidt
18.08.06, 17:31
Ich bin sicher, dass das sbc nicht das Problem ist. :D

dacom hat da auch vor einiger Zeit was geschrieben. Der verhleicher sendet eben nicht bei Init.

Matthias Schmidt
18.08.06, 17:58
Das war hier:

http://www.eib-userclub.de/forum/showthread.php?threadid=1644&highlight=schwellwert

Gaston
18.08.06, 17:58
Ich bin sicher, dass das sbc nicht das Problem ist. :D

dacom hat da auch vor einiger Zeit was geschrieben. Der verhleicher sendet eben nicht bei Init.

Der Vergleicher sendet bei Init nicht auf dem SBC.

Hier ist die Logik auf logik.dat:

### BS : Vergleicher (<=) = 9023
5001|9023|2|4|0|0|1 <----- Initflag ist auf 1
5002|9023|1|0
5002|9023|2|0
5004|9023|1|0|1|1
5004|9023|2|0|1|1
5004|9023|3|0|1|2
5004|9023|4|0|1|2
5012|9023|0|""|"round(EN[1]*1000000) <= round(EN[2]*1000000)"|""|1|0|0|2 <--- "Normaler" Ausgang wird auch bei Init gestzt
5012|9023|0|"(EI==0)"|"round(EN[1]*1000000) <= round(EN[2]*1000000)"|""|3|0|0|4 <--- SBC wird bei Init nicht gesetzt

eibandy
18.08.06, 19:07
Hallo Matthias, Hallo Gaston,

ich hoffe Ihr habt keinen Stress miteinander wegen meiner Kleinigkeit?! Ich wollte einfach nur ein kleine Logik zusammen bauen und dabie etwas Unterstützung von Euch.

Ist es denn Möglich, dass ich von Euch noch zu meinen Fragen ein paar Antworten bekomme ?

Wäre echt super von Euch, Danke.


Grüße
eibandy:o

blue
18.08.06, 19:28
Hallo Matthias,

Das würde bedeuten, dass zwischen dem Ausgang des UND-Gatters und der Ausgangsbox die Sperre (ID 10205) eingebaut werde muss oder. Aber wie bekomme ich mit ob es nun Tag oder Nacht ist. und die muss ich die Eingänge der Sperre belegen. der Ausgang der Sperre geht wohl auf die Ausgangsbox. Habe mal eine weitere Variante4 angehängt, würde das dem so entsprechen wie Du es meinst? Nur wo bekomme die Info für den EingangE1 her? Oder ist das Falsch bw. denke ich falsch?

Noch eine kleine Frage am Rande. (hoffe dass ich nicht nerve, bin aber leider noch etwas neu auf dem Gebiet, aber jeder fängt ja mal klein an. Sorry!)
Ich habe ja derzeit zwei Eingangsboxen. macht das Sinn oder nimmt man nur ein und legt ein weiters Kommunikationsobjekt darunter an? Was ist denn der Unterschied bei einer oder zwei Eingangsboxen?

Grüße

eibandy

hallo andy,

an eingang e1 kannst du z.b. eine zeitschaltuhr hängen. diese könntest du aber auch direkt an
ein 4 er und klemmen.

zu 2.) du kannst an eine eingangs oder ausgangsbox beliebig viele iko, bzw. befehle hängen. bei einer so kleinen logik, geht die übersichtlichkeit ja nicht verloren. bei grösseren geschichten trenne ich das manchmal schon auf.

gruss

günther

eibandy
20.08.06, 09:54
Guten Morgen blue,

vielen Dank für Deine Info.

Macht es denn Sinn eine Zeitschlatuhr dafür im HS zu programmieren und die dann auf den E1 der Sperre zu händen?
Warum sollte ich den ein 4er UND nehmen wenn der 4. Eingang eh immer auf 1 ist? Hat das Vorteile und wenn ja welche?

Grüße
eibandy

blue
20.08.06, 10:09
Guten Morgen blue,

vielen Dank für Deine Info.

Macht es denn Sinn eine Zeitschlatuhr dafür im HS zu programmieren und die dann auf den E1 der Sperre zu händen?
Warum sollte ich den ein 4er UND nehmen wenn der 4. Eingang eh immer auf 1 ist? Hat das Vorteile und wenn ja welche?

Grüße
eibandy

hallo andy,

wenn ich dich richtig verstanden habe, willst du, dass nur abends das licht angeht. mit der za könntest du deshalb diese zeit eingrenzen.

eine andere möglichkeit wäre noch, dass du schwellwerte verwendest. das licht soll nur angehen, wenn der schwellwert von oben nach unten durchlaufen wird, was nur abends der fall ist. morgens läuft er dann von unten nach oben und setzt eine 0

ohne dass ich mich jetzt genau mit deinem problem beschäftig habe, würde mit dieser lösung auch die sperre wegfallen.

ich würde es an deiner stelle aber erstmal mit der uhr machen. ändern kannst du das später immer noch, wenn du dich tiefer eingearbeitet hast. schwellwerte sind nämlich nicht ganz ohne.;-)

zur frage mit dem 4er und.es würde dann so aussehen.

e1 = garagentor
e2 = lux
e3 = zeitschaltuhr
e4 = 1

-----

du hast die aussage von...ich glaub matthias wars,
falsch verstanden. ausgang 4 bleibt nicht immer auf eins. auf eins bleibt er nur dann, wenn nichts dranhängt und du nicht händisch was anderes reinschreibst.

gruss

günther

eibandy
20.08.06, 10:45
Hi Günther,

ups, das ging aber fix mit der Antwort.

OK, ich habe wahrscheinlich das falsch verstanden mit dem 4er UND.

OK, nun zu meinem Probleme/Thema.
Also eigentlich wollte ich nur, dass Abends die Logik zum Tragen kommt. Ist das unüblich oder sollte ich es so lassen, dass die Logik zu derzeit am Tag zieht?
Das mit der Sperre und der Zeitschltuhr währe derzeit wohl der schnellste und einfachste Weg.
Aber wenn Du schon mal das Thema mit Schwellwerte einbringst. Wie funktioniert denn das und wie muss ich denn das verstehen?
Kannst Du mir das kurz erklären bzw. dann an Hand meiner Logik mal sagen, was ich wie und wo eintragen muss. Das wäre echt toll, da ich das Thema Schwellwert bestimmt analog zu anderen Themen auch brauchen kann oder?

Grüße und schon mal Danke. (Ich hoffe ich verlange nicht zu viel von Dir)


PS: Ach noch etwas. moment funktioneirt das ja gut beim Aufschließen z.B. Haustüre. Da läuft dann auch die am Ausgang geschlaltete Szene ab. Nur das Problem ist jetzt noch, dass gestern auch noch bei erreichen des LUX-Wertes und nicht aufschließen der Haustüre auch die Szene anfängt. Also wie wenn ich nach Hause komme und die Haustüre aufschließen würde. Da ist wohl noch ein Fehler drin oder? ich habe mal meine derzeitgen 3 logiken angehängt. kannst Du mal drüber schauen?.


Grüße
eibandy

blue
20.08.06, 11:01
Hi Günther,

ups, das ging aber fix mit der Antwort.

OK, ich habe wahrscheinlich das falsch verstanden mit dem 4er UND.

OK, nun zu meinem Probleme/Thema.
Also eigentlich wollte ich nur, dass Abends die Logik zum Tragen kommt. Ist das unüblich oder sollte ich es so lassen, dass die Logik zu derzeit am Tag zieht?
Das mit der Sperre und der Zeitschltuhr währe derzeit wohl der schnellste und einfachste Weg.
Aber wenn Du schon mal das Thema mit Schwellwerte einbringst. Wie funktioniert denn das und wie muss ich denn das verstehen?
Kannst Du mir das kurz erklären bzw. dann an Hand meiner Logik mal sagen, was ich wie und wo eintragen muss. Das wäre echt toll, da ich das Thema Schwellwert bestimmt analog zu anderen Themen auch brauchen kann oder?

Grüße und schon mal Danke. (Ich hoffe ich verlange nicht zu viel von Dir)


Grüße
eibandy

hallo,

die logik zieht ja nicht am tag, wenn du die uhr dazwischen hast.

kurz wie es geht: du legst ein interens iko 1 bit an.
dieses verknüpft zu dann mit der sperre oder dem 4er und.

schalten tust du dann dieses interene iko mit der za. fertig.

zum schwellwert oder bereichsprüfer. leg dir mal einen an, dann rechte maustaste und hilfe zum baustein. da ist eigentlich alles beschrieben. im grunde ist es nicht viel anders, als die grösser oder die kleiner bausteine.


nur kannst du eben noch sagen, dass er z.b. in einem bestimmten bereich nichts machen soll, bzw
in diesem bereich was machen soll, oder wenn dieser bereich unter oder überschritten was machen soll. bausteine ohne ende also, mit welchen man solche dinge auch noch lösen kann.

gruss und fröhliches basteln.;-)

günther

eibandy
20.08.06, 11:26
Hi,

Alos ich habe jetzt mal einen Bereichsprüfer (kleiner-gleich) anstatt dem kleiner Vergleicher eingebaut. Scheint laut Hilfe ganz einfach zu sein. Die unter Grenze habe ich auf 0 und die obere auf 350 gelegt. Schauen wir mal, was passiert.

Ach, falls Du es noch nicht gesehen hast ich habe noch ein kleines weiters Problem eingefügt.



PS: Ach noch etwas. moment funktioneirt das ja gut beim Aufschließen z.B. Haustüre. Da läuft dann auch die am Ausgang geschlaltete Szene ab. Nur das Problem ist jetzt noch, dass gestern auch noch bei erreichen des LUX-Wertes und nicht aufschließen der Haustüre auch die Szene anfängt. Also wie wenn ich nach Hause komme und die Haustüre aufschließen würde. Da ist wohl noch ein Fehler drin oder? ich habe mal meine derzeitgen 3 logiken angehängt. kannst Du mal drüber schauen?.


Wo liegt denn da das Problem, denn das nervt echt, wenn einfach das Licht an geht:(

Grüße
einandy

colt
20.08.06, 12:28
Hallo eibandy,

generell teste ich meine Logik immer mit extra dafür angelegten iKOs. Das spart massig Zeit. Bei Deiner jetzigen Aufgabenstellung musst Du immer warten, bis die Uhr geschaltet hat und es dunkel genug ist. Die Fehlersuche kann sich so über mehrere Tag hin ziehen :rolleyes:
An Deiner Stelle würde ich mir eine Werteingebe für die Hellingkeit und den Zustand der Uhr in die Visu legen(toggle). Als zweites würde ich den Zustand der Ausgangsbox ebenfalls in der Visu anzeigen lassen(bei Logiken, die nur mit dem Zusatnd eins arbeiten ggf. iKO hochzählen).
Auf diese Weise kannst du die "Sonne" innerhalb von minuten mehrfach auf-/untergehen lassen und siehst direkt was passiert. Wenn dann die Logik so arbeitet, wie du es dir vorgestellt hast, tauscht du einefacch die Test-iKOs durch die realen KOs aus.

blue
20.08.06, 12:39
hallo,

das liegt daran, dass dein lux eingang getriggert wird und die eingangstür noch auf 1 steht.

mögliche lösungen wäre z.b. über eine sequenz
die eingangstür auf null setzen, oder noch einen
zusätzlichen eingang auf dein UND, falls du eine
bewegungserkennung "im haus" hast, oder über
diese die eingangstür auf null stellen. oder auf
der visu einen schalter anlegen, oder, oder, oder.

um das genau zu durchdenken was am besten ist, bräuchte man mehr infos was du alles hast und was du genau machen möchtest.

gruss

günther

ps: was christian eben geschrieben hat, ist eine sehr gute sache. zu meiner anfangszeit habe ich das auch so gemacht und habe die fehler damit recht schnell gefunden.

eibandy
22.08.06, 20:43
Hi Colt , hi blue,

sorry, dass ich erst jetzt mich melde, aber ich hatte viel um die Ohren. :o

So, ich wollte Euch erst mal Danken für die Antworten und habe wie in den geposteten Bilder die Logik identisch für Gargentor, Haustüre und Nebeneinganstüre aufgebaut.
Fuktioniert soweit auch ! (Ich habe es mit Bereichsprüfer versucht, ich hoffe das ist richtig so?!)

Das einzige Problem das jetzt noch besteht ist, dass wenn der LUX-Wert 350 oder weniger erreicht, dann lauft die Sequenz, welche in der Ausgangsbox hinterlegt ist ab. Und zwar nur diese Sequenz. Ist doch seltsam. Die Haustüre wird nicht aufgeschlossen und die Läuft einfach ab. Warum läuft nur die ab und nicht die anderen Sequenzen (andere Lampen ein/aus), die Logik ist doch identisch? Und warum läuft die über haupt ab, das sollte eigentlich nicht sein??? :confused:

Muss ich da noch in der Logik etwas einbauen bzw. Werte ändern (z.B. beim UND-Gatter E1=0 setzten). Ich verstehe es einfach nicht. Oder ich denke falsch.

Vielen Dank für Eure Hilfe. (hoff ich doch). Grüße
Andy

blue
22.08.06, 22:30
Hi Colt , hi blue,



Das einzige Problem das jetzt noch besteht ist, dass wenn der LUX-Wert 350 oder weniger erreicht, dann lauft die Sequenz, welche in der Ausgangsbox hinterlegt ist ab. Und zwar nur diese Sequenz. Ist doch seltsam. Die Haustüre wird nicht aufgeschlossen und die Läuft einfach ab. Warum läuft nur die ab und nicht die anderen Sequenzen (andere Lampen ein/aus), die Logik ist doch identisch? Und warum läuft die über haupt ab, das sollte eigentlich nicht sein??? :confused:



tut mir leid, so richtig verstehe ich deine frage nicht, bzw. mir ist nicht klar was da geht oder
nicht geht und von welchen sequenzen du sprichst.

ist es so, dass garage und nebentür richtig gehen
und nur die haustüre nicht richtig läuft?

gruss

günther

colt
22.08.06, 22:34
Deine Aufgabe war:

Aufgabe:
Komfortbetrieb Abends nach Hause:
Wenn Garagentor oder Haustüre Abends (LUX gesteuert) aufgemacht wird und ein bestimmter LUX-Wert unterschritten wird, dann sollen in verschiedenen Zeitabständen ein paar Lichter angehen und zeitgesteuert wieder ausgehen.

Also anderes ausgedrückt: Wenn Nacht UND die Tür wird geöffnet, soll geschaltet werden, richtig?
Wenn das immer noch die Aufgabenstellung ist, probier mal den Anhang .

aber......wie schon oben geschrieben: Lege dir zum Testen immer eine Werteingabe in der Visu an, dann kannst du den Lux-Wert immer wieder unter 350 fallen lassen und so prüfen ob dein Problem reproduzierbar ist. Dies gilt auch für zukünftige Logiken. So lernst du die Bausteine und deren Verhalten schneller kennen.