CodeSys -- Mischung von Taster und Schalter

PoeticPixels

Level-1
Beiträge
5
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

ich tüftele an einem Problem in CodeSys und komme selbst auf keine Lösung - und hoffe, ihr könnt mir den entscheidenden Anstoss geben.

Ich nutze für mein Heimlicht eine WAGO SPS mit Tastern an DI, in der WAGO selbst dann ein FB_STROMSTOSS um die Lampen über ein DO zu steuern.

Nun möchte ich auch per HomeAssistant und Modbus auf die Lampen zugreifen. Dort allerdings nicht als "Taster" sondern als "Licht"-Entität.
Die KOnfiguration in HomeAssistant möchte ich einfach halten und dort einfach nur ein "Licht" erzeugen. Das schreibt und liest auf ein Register, zB eine Merker-Variable. Es könnte auch auf die Merker-Variable schreiben und auf das echte DO dann "verifizieren" wenn erforderlich.

Technisch funktioniert das einzeln auch alles wunderbar, wenn ich beide Welten allerdings "verheiraten" will habe ich keinen Schimmer wie ich das in Funktionsbausteine gießen soll. Ich habe schon ein paar Kombinationen durch, aber irgendwie wollte nichts so richtig gelingen.

Hat jemand von euch eine Idee?

Dank euch vielmals!

Grüße,

Sven

Beispiel der bisherigen Codierung.
1690135973143.png
 
Schau dir mal die Flanken an.
Du kannst am Oder die Eingänge als Positive (Steigende) Flanke definieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich nutze für mein Heimlicht eine WAGO SPS mit Tastern an DI, in der WAGO selbst dann ein FB_STROMSTOSS um die Lampen über ein DO zu steuern.
Taster mit StromstossRelais bzw. Simulation eines StromstossRelais ist also die eine Welt und die habe ich - glaube ich - verstanden.
Nun möchte ich auch per HomeAssistant und Modbus auf die Lampen zugreifen. Dort allerdings nicht als "Taster" sondern als "Licht"-Entität.
Die KOnfiguration in HomeAssistant möchte ich einfach halten und dort einfach nur ein "Licht" erzeugen. Das schreibt und liest auf ein Register, zB eine Merker-Variable. Es könnte auch auf die Merker-Variable schreiben und auf das echte DO dann "verifizieren" wenn erforderlich.
Diese zweite Welt der Licht-Entität habe ich möglicherweise nicht richtig verstanden. Ist das ein simpler Schalter bzw. die Simulation eines simplen Schalters?
Technisch funktioniert das einzeln auch alles wunderbar, wenn ich beide Welten allerdings "verheiraten" will habe ich keinen Schimmer wie ich das in Funktionsbausteine gießen soll. Ich habe schon ein paar Kombinationen durch, aber irgendwie wollte nichts so richtig gelingen.
Das scheint mir eher ein Problem der Logik bzw. der fehlenden Logik zu sein, als ein Fehlen der passenden FBs. Die beiden Welten (Taster einerseits und Schalter andererseits) lassen sich nicht einfach so unter einen Hut kriegen.

Anscheinend willst Du das Licht von verschiedenen Stellen aus ein- bzw. ausschalten können.

Dafür ist die Variante mit Tastern schon optimal geeignet, wenn man ein StromstossRelais verwendet.

Das geht aber auch mit Schaltern, wenn man WechselSchalter und bei mehr als zwei Schaltern noch KreuzSchalter verwendet.
Allerdings geht dann der eindeutige Zusammenhang zwischen SchalterStellung und dem Zustand 'Licht an' bzw. 'Licht aus' verloren.
In einer SPS kannst Du eine Wechsel- bzw. KreuzSchaltung von 2 Wechsel- plus n-2 KreuzSchaltern mit n-1 XOR-Verknüpfungen "simulieren".

Die Verheiratung dieser Welt mit der Welt der StromstossRelais ist nun einfach: jeden hinzugefügten"StromstossRelais"-Ausgang kannst Du mit je 1 hinzugefügten XOR zur Erweiterung der Schaltung anschliessen.

Der umgekehrte Weg der Verheiratung wäre es, die Schalter in die Welt der StromstossRelais zu integrieren, indem man von jedem Schalter aus der positiven und aus der negativen Flanke einen UmschaltImpuls bildet und diese Impulse mit den TasterImpulsen verODERt und auf das StromstossRelais gibt.
 
Hallo Zusammen,

vielen Dank schonmal für eure Antworten!
Ich versuche die "zweite Welt" nochmal etwa zu erklären.
Die Licht-Entität in HomeAssistant ist, wie du vermutet hast Heinileini, die Simulation eines Schalters. Ich möchte dort auf Taster verzichten, da ich mit diesem einfachen Schalter dann dort Szenen etc. bauen kann.
Für die SPS-Welt ist es schlussendlich einfach nur eine Boolsche Merk-Variable.

Und ja, genau ein Logik-Problem ist das ganze, das ich einfach bisher nicht gebacken bekomme :D

Mit Flanken (R_TRIG) habe ich auch schon experimentiert. Das Problem ist, dass ich ja quasi wenn der Taster schaltet auch die Merkvariable entsprechend setzen muss und umgekehrt - und da bin ich dann irgendwann in der Logik an einen Punkt gekommen wo es nicht mehr funktioniert hat. Siehe auch deine Ausführung zu "Zusammenhang Licht/Schalter". Entweder hat der Taster nicht mehr geschaltet oder die Merkvariable war falsch gesetzt.

Hinweis: Wir können davon ausgehen, dass ein Setzen der Variable durch die SPS "sofort" in HomeAssistant ankommt. Die liest er zwar nur alle x Sekunden aus, mit der Verzögerung könnte ich für meine Anwendungsfälle aber leben.

Als Ergänzung: Das Beispiel oben ist eher schlecht -- simpel sieht das so aus:
1690141417160.png

Vielen Dank!

Grüße,

Sven
 

Anhänge

  • 1690141402638.png
    1690141402638.png
    14,1 KB · Aufrufe: 5
Zuletzt bearbeitet:
Das Problem ist, dass ich ja quasi wenn der Taster schaltet auch die Merkvariable entsprechend setzen muss und umgekehrt - und da bin ich dann irgendwann in der Logik an einen Punkt gekommen wo es nicht mehr funktioniert hat.
Auf welcher Ebene führst du denn die eigentliche Aktion aus ?
Wenn die SPS diese Ebene ist dann müßtest du bei dem "Schalter" nicht den Zustand auswerten sondern den Zustandswechsel - das heißt : hat er jetzt einen anderen Zustand als bis jetzt. In dem Fall lößt du einen Impuls aus für dein "Stromstoss-Relais".

Wie du allerdings mit einem Schalter Lichtszenen generieren willst ist mit nicht klar ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Keine Ahnung, wie der WAGO-Baustein für das Stromstossrelais funktioniert.

Ich würde mir einen eigenen Stromstossbaustein entsprechend der Siemens-FAQ erstellen (das funktioniert vermutlich bei Wago genauso).
Dabei den dortigen #Ausgang als INOUT des FBs festlegen.

Dann kannst Du die Eingänge analog zum jetzigen Baustein belegen und die Licht-Entität auf den mit einem Merker beschalteten InOut.
Den Zustand des Merkers gibst Du dann an Deinen Ausgang weiter.


Eventuell geht das auch schon mit dem WAGO-Baustein, wenn "xActor" auch ein InOut ist, sprich, der Baustein ein manuelles Ändern des Ausgangs außerhalb des FBs mitbekommt.
 
Hallo Zusammen,

@LarryLaffer: Die eigentliche Aktion soll in der SPS passieren. Nach "Aussen" funktioniert die Merker-Variable wie zB eine Zigbee-Lampe - also nur "an-aus". Damit könnte ich dann in HomeAssistant (nicht in der SPS!) Szenen bauen -- eine Zigbee-Lampe an, ALexa spielt Kuschelmusik und die Wago schalte die Zimmerbeleuchtung ab :)

@hucki: Wenn ich den Siemens-Baustein richtig verstehe ist der FB_Stromstoss denn die CodeSys-Bibliothek bietet genau das gleiche :)

Das eigentliche Schalten des Lichts ist auch kein Problem, das geht ja einfach über die Flanken:
1690147894810.png
Dabei wäre im Bild "Taster_EG..." der Hardware-Input (DI), und WAGO_LICHT_EG... die Merkervariable, die ich von aussen ansteuere.
Aber dann die Verknüpfung und das "mitbekommen" für die Merkervariable wenn ich über den Taster schalte -- das bekomme ich nicht hin.


Also konkret folgendes Szenario:
Ich setze extern per Modbus WAGO_LICHT_EG.. auf True, damit steigt die Flanke und das Licht geht an.
Dann drücke ich den Taster - das Licht geht aus.
Aber die Merkervariable ist immer noch True - und damit für mein externes System das Licht immer noch an :)

Oder umgekehrt - ich drücke nur den Taster und schalte das Licht ein, wie bekommt meine Merkervariable das mit?

Grüße,

Sven
 
.... und manchmal scheint es einfach zu helfen wenn man über sein Problem redet und es niederschreibt.

Ich habe jetzt noch meine Merkervariable einfach hinten an den fb_stromstoss gehangen -- und bisher scheint es funktioniert zu haben:

1690148474931.png

Soweit ich mich mitten in der Nacht das durchzutesten getraut habe scheint es zu funktionieren - und dann vielleicht auch ganz einfach zu sein :)

Dank euch vielmals -- und falls jemand ein Problem in der Logik sieht, dann immer gerne her damit :)

Grüße,

Sven
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich den Siemens-Baustein richtig verstehe ist der FB_Stromstoss denn die CodeSys-Bibliothek bietet genau das gleiche


Anhang anzeigen 70321
Wenn der Wago-Baustein genau das gleiche bietet, solltest Du einfach am xAktor (das muss ein InOut sein und im FB auch gelesen werden) erst den Merker für die Licht-Entität des HomeAssistant verschalten können und dann erst auf den Ausgang Deiner Lampe zu gehen.

Der FB muss halt mitbekommen, wenn Du über den HomeAssistant den Ausgang manuell änderst.
Ist der xAktor nur ein Ausgang (zustand wird intern gespeichert) funktioniert das nicht.
Eventuell kannst Du dann aber mit dem HomeAssistant auf diese interne Speicher-Variable des FBs bzw. der Instanz zugreifen?
 
Ich habe jetzt noch meine Merkervariable einfach hinten an den fb_stromstoss gehangen -- und bisher scheint es funktioniert zu haben:
Wenn der Wago-Baustein genau das gleiche bietet, solltest Du einfach am xAktor (das muss ein InOut sein und im FB auch gelesen werden) erst den Merker für die Licht-Entität des HomeAssistant verschalten können und dann erst auf den Ausgang Deiner Lampe zu gehen.
Dann scheint ja genau das der Fall zu sein.
Freut mich für Dich.
:D
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe jetzt noch meine Merkervariable einfach hinten an den fb_stromstoss gehangen -- und bisher scheint es funktioniert zu haben:

Anhang anzeigen 70322
Wozu die Rückkopplung über die MerkerVariable 'WAGO_Licht_EG_Esszimmer_Ring' ?
Deine vorherige Lösung ...
... war doch schon okay!

Habe im Prinzip dasgleiche auf "LOGO!-inesisch" gemacht für je drei Taster und drei Schalter pro Leuchte:

TasterVsSchalter.jpg

Die ImpulsBildungen durch die interessierenden Flanken und das StromstossRelais habe ich allerdings "zu Fuss" programmiert.
Die LOGO!-Merker müsste man sinngemäss durch statische Variablen ersetzen.
Das hier gebastelte StromstossRelais funktioniert nur dann verlässlich, wenn die UmschaltImpulse genau 1 Zklus lang anstehen - nur deshalb bilde ich auch bei den Taster-Signalen 1-Zyklus-lange Impulse.
 
@Heinileini
Die Rückkopplung ist notwendig damit Homeassistent den Zustand mit bekommt und nachführt.
Solche Probleme hast du bei nahezu jeder Homeautomation-Software
 
Die Rückkopplung ist notwendig damit Homeassistent den Zustand mit bekommt und nachführt.
Solche Probleme hast du bei nahezu jeder Homeautomation-Software
Das heisst also, ...
- der Homeassistent meldet der SPS über diese "Leitung" seinen Zustand und
- die SPS meldet dem Homeassistenten über dieselbe Leitung ihren Zustand.
Jetzt habe ich verstanden, wo der Knoten in der Logik herkommt. ;)

Mit "Rückkopplung" hatte ich aber die vom Ausgang der SPS-Logik auf ihren eigenen Eingang gemeint.
Dass diese nicht zu ungewollten Wirkungen führen soll, finde ich jedoch erstaunlich.
Wenn die SPS ein Umschalten anfordert und ausführt und das Umschalten sogleich die nächste Umschaltung anfordert und ausführt, so haben wir doch im EndEffekt eine doppelte Negation ... also letztlich eine Änderung des Zustandes und die sofortige Rückkehr zum vorherigen Zustand ...
Schlimmer noch: jede Änderung des Zustandes dürfte die nächste Änderung veranlassen und die Schaltung schwingt munter vor sich hin.
Das kann eigentlich nur funktionieren, wenn das StromstossRelais Impulse verkraften kann, die länger als 1 Zyklus anstehen UND der zweite Impuls - der, der durch die Rückkopplung ausgelöst wird - bereits dann kommt, während der erste Impuls noch ansteht, so dass er nicht als eigenständiger Impuls wahrgenommen wird?!
Wie ich doch solche Schaltungen liebe, in denen man die fehlende Logik - z.B. einwandfreies HandShake - durch Ausklügeln des Timings ersetzen muss. ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Heinileini
Du darfst Homeassistent und Co. nicht mit einer SPS vergleichen.
Die Systeme arbeiten ereignisgesteuert und haben keinen Zyklus.
Die Rückführung brauchst du nur damit der interne Zustand der Entität passt.
 
Zurück
Oben