NEWS
[Problem] S7-Adapter: "Prellen" bei Netzwerkeingängen
-
Hallo zusammen,
ich habe seit einiger Zeit ein sehr seltsames Verhalten. Ich kann leider nicht genau sagen, welche Änderung oder welches Ereignis zu diesem Verhalten geführt hat.
Die Netzwerkeingänge sind im Logo-Programm mit dem Eingang einer Funktion "Stromstoss-Relais" verbunden. Dieses steuert dann einen (Hardware-)Relais-Ausgang an. Die Netzwerkeingänge und die Ausgänge logge ich via SQL in iobroker.
Die Netzwerkeingänge meiner Logos scheinen sich selbstständig zu machen. Zum Einen scheinen die Netzwerkeingängen irgendwie zu "Prellen".
Setzte ich testweise einen der Netzwerkeingänge unter "Objekte" in iobroker und sehe mir das log an, so sehe ich folgendes:
false true s7.2 2019-01-02 11:55:14.506 false true s7.2 2019-01-02 11:55:12.563 false false admin.0 2019-01-02 11:55:10.000 true true s7.2 2019-01-02 11:55:08.118 true true s7.2 2019-01-02 11:55:06.546 false true s7.2 2019-01-02 11:55:04.440 true false admin.0 2019-01-02 11:55:03.614 ````Ich setzte also den Netzwerkeingang und es kommt mehrfach scheinbar eine Rückmeldung der Logo (s7.2). Der Andere Fall ist noch viel schlimmer. Hier scheinen sich Netzwerkeingäng völlig selbstständig zu machen:
false true s7.2 2019-01-01 22:36:03.468
true true s7.2 2019-01-01 22:35:46.401
false true s7.2 2019-01-01 22:35:45.397
true true s7.2 2019-01-01 22:35:29.331
false true s7.2 2019-01-01 22:35:28.326
true true s7.2 2019-01-01 22:35:27.324
false true s7.2 2019-01-01 22:35:26.317Hat jemand eine Idee was zu dieser "Verselbstständigung" führen könnte?
-
Moin,
leider hast Du nicht geschrieben, wie Du vorgehst. "Ich" kommuniziere mit der Logo wie folgt:
Hat die Logo als Eingang einen Taster oder anderen kurzen Impuls, wird dieser mit einer Ausschaltverzögerung auf einen NQ weitergegeben. Die Ausschaltverzögerung, damit wegen dem Pollen nix verloren geht.
Im ioBroker frage ich diese Eingänge ab und reagiere nur auf die steigende Flanke
on({id: "s7.0.DBs.DB1.ML", change:'any'}, function (dp) { if(dp.state.val===1 || dp.state.val===true){ log("Mitte Links"); if(getState("LICHT.0.Fernsehlicht").val===true){ setState("LICHT.0.Fernsehlicht",false); }else{ setState("LICHT.0.Fernsehlicht",true); } } });
Wichtig ist, dass Du Dir durch setzen eines Datenpunktes keine Endlosschleife einfängst, indem "irgendwo" auf eine Änderung des Datenpunktes getriggert wird.
-
Moin,
leider hast Du nicht geschrieben, wie Du vorgehst. "Ich" kommuniziere mit der Logo wie folgt:
Hat die Logo als Eingang einen Taster oder anderen kurzen Impuls, wird dieser mit einer Ausschaltverzögerung auf einen NQ weitergegeben. Die Ausschaltverzögerung, damit wegen dem Pollen nix verloren geht.
Im ioBroker frage ich diese Eingänge ab und reagiere nur auf die steigende Flanke
on({id: "s7.0.DBs.DB1.ML", change:'any'}, function (dp) { if(dp.state.val===1 || dp.state.val===true){ log("Mitte Links"); if(getState("LICHT.0.Fernsehlicht").val===true){ setState("LICHT.0.Fernsehlicht",false); }else{ setState("LICHT.0.Fernsehlicht",true); } } });
Wichtig ist, dass Du Dir durch setzen eines Datenpunktes keine Endlosschleife einfängst, indem "irgendwo" auf eine Änderung des Datenpunktes getriggert wird. `
Danke für deine Antwort!
Grundsätzlich nutze in die Logo für die "wichtigen" Funktion (Licht an/aus usw) unabhängig von iobroker.
D.h. relativ simples Logo-Programm: Eingang (z.B. Taster) => ODER-Funktion => Stromstoßrelais-Funktion => Ausgang (z.B. Leuchte)
An die ODER-Funktion hängen nun eben auch Netwerkeingänge welche wieder ein DAtenpunkt in iobroker sind. Diese nutze ich z.B. um in einer VIS auf dem Smartphone das Licht an und aus zu schalten.
Hintergund: Sollte iobroker ausfallen, kann ich das Licht immer noch über den Taster an der Wand ein- und ausschalten.
Die Netzwereingänge und Ausgänge logge ich mir in iobroker via SQL-Adapter.
Das mit der Schleife könnte tatsächlich ein Problem sein. Ich frage z.B. nachts ab, ob die Bachlaufpumpe noch läuft (Ausgang Logo == true). FAlls, steuere ich den dazugehörigen Netzwerkeingang und damit die Stromstoßrelais-Funktion kurz an => damit Ausgang wieder auf 0 gesetzt wird.
Meldet mir iobroker diesen Datenpunkt (= Ausgang Logo) fälschlicherweise also true, für das Skript versuchen den Ausgang auf false zu setzen. Da er aber in der Logo bereits auf false ist, wird er true usw. usw….
Aber das kann ja nicht die Ursache für Prellen der Netzwerkeingänge sein. Die Netzwerkeingänge werden von der Logo nur gelesen und nicht geschrieben.
-
Lauscht evtl. ein andere Skript?
Stromstoßrelais steuere ich in der Logo nicht per Impuls an, sondern nutze die SET und RESET mit je einem Netzwerkeingang gezielt an.
on({id:"LICHT.0.Wohnzimmer" , change:'any'}, function (dp) { if(dp.state.val===1 || dp.state.val===true){ setState("s7.0.DBs.DB1.T1", true); }else{ setState("s7.0.DBs.DB1.T0", true); } }); on({id: "s7.0.DBs.DB1.T1", ack:true}, function() { setState("s7.0.DBs.DB1.T1", false); }); on({id: "s7.0.DBs.DB1.T0", ack:true}, function() { setState("s7.0.DBs.DB1.T0", false); });
Die Rückmeldung(Ist-Zustand) kommt dann auf einem weiteren Datenpunkt zurück.
NI10 ist der Zentralaus.
-
Die Rückmeldung(Ist-Zustand) kommt dann auf einem weiteren Datenpunkt zurück.
NI10 ist der Zentralaus. `
Warum holst du dir den Zustand nicht direkt vom Ausgang, d.h. als Datenpunkt in iobroker?
-
Moin,
läuft so eins a. Das mit den direkten Adressen hatte ich mir durchgelesen und mich dann für diesen Weg entschieden. Ist halt ein NQx pro Ausgang mehr.