NEWS
Simulation, Istwert zu Sollwert laufen lassen
-
JS ist nicht so meine Welt, obwohl das sogar meine Namensinitialien sind...
Ich möchte für eine Simulation von Rolladen in vis eine Simu machen die zwei DP enthält, Soll und Istwert. Wenn Soll geändert wird, dann soll der Istwert dahin laufen.
Ich ersten Schuß hat das Script den JavaScript Adapter lahmgelegt, wohl durch viele neu angelegte Timer? Was ist falsch, oder geht das generell viel einfacher?on({id:'0_userdata.0.example_state.testRolladen1Soll'/*testRolladen1 Soll*/, change:"any"}, function(data){ var intervall_id = setInterval(function(){ var ist = getState('0_userdata.0.example_state.testRolladen1'/*testRolladen1 Ist*/).val; if (Math.abs(data.state.val - ist) < 1) { clearInterval(intervall_id); return; } var diff = data.state.val > ist ? 1 : -1; setState('0_userdata.0.example_state.testRolladen1'/*testRolladen1 Ist*/, ist + diff, true); //console.log("Ist: " + ist); }, 100); })
edit:
- Version gelöscht, so funktioniert es, kann aber vielleicht noch verschönert werden?
-
var intervall_id = null; on({id:'0_userdata.0.example_state.testRolladen1Soll'/*testRolladen1 Soll*/, change:"any"}, function(data){ if (intervall_id) clearInterval(intervall_id); intervall_id = setInterval(function(){ var ist = getState('0_userdata.0.example_state.testRolladen1'/*testRolladen1 Ist*/).val; if (Math.abs(data.state.val - ist) < 1) { clearInterval(intervall_id); ist = data.state.val; } else ist += data.state.val > ist ? 1 : -1; setState('0_userdata.0.example_state.testRolladen1'/*testRolladen1 Ist*/, ist, true); //console.log("Ist: " + ist); }, 100); })
Der erste clearInterval() ist ein muß, sonst hast du, wenn du beim Laufen des Skripts die Richtung wechsels, 2 Interval laufen, die gegeneinander arbeiten. Den Rest kann man muß man aber nicht.
-
@ticaki Danke, funktioniert noch besser.