Hallo hatte gestern auf die schnelle übersehen das bei „OnChange“ das Skript ja zwei mal aufgerufen wird ;)(beim wechsel von 0->1 und 1->0), sorry.
Deshalb wechselt der Ausgang beim loslassen des Tasters seinen Zustand wieder auf „0“.
@nancilla
Ich denke dein Skript hat den gleichen Effekt.
Hier das angepasste Skript für die Stromstossfunktion:
Theoretisch sollte es nicht, denn wenn ich keinen Denkfehler drin hatte, dann wird es wieder (gegenteilig) geschalten, wenn der Taster neu gedrückt wird…
Positive Flanke (DI wird wieder true bei Onchange).
Aber … viele Wege führen nach Rom und je weniger Code, testo besser!
Ich sollte auch mal anfangen, mich mit meinem WAGO-Zeugs zu beschäftigen… habe aber momentan zuviel anderes um die Ohren.
auch noch mal ein dankeschön. ich stand genauso vor dem problem. denke für den übergang bis der wago 750-841 und wago 750-342 miteinander funktionieren, klappt dies für mich.
…tja die Freude war nur kurz, nachdem ich die Scripte für die anderen DO erstellt hatte, geht die LED vom ersten (erst funktionierenden) nach loslassen wieder aus.
Ich verstehe jetzt nicht, warum du den alten Code wieder mit ins Script genommen und nicht das so von m-f-a übernommen hast, wie er es gepostet hat. Das verursacht ja gerade diesen Effekt über „else“, wenn Taster losgelassen, dann wieder false, wie eben auch am Ausgang.
Weil neu getriggert wird wenn die Triggervariable sich ändert… OnChange … Beim Taster loslassen eben false!
Un du gibst zweimal die Variable $wago_id vor. Wenns den gleichen Wert ergibt, machts zwar nichts, aber überflüssig.
$wago_id = GetValueInteger("Wago_ID");
if (GetValueBoolean("Wago_IX_0") == true) { //Nur abarbeiten wenn Eingang "ein"
if (GetValueBoolean("Wago_QX_0") == true) { //Wenn Ausgang bereits "ein"
MBT_WriteCoil($wago_id,0,false); //dann "ausschalten"
} else {
MBT_WriteCoil($wago_id,0,true); //ansonsten "einschalten"
}
}
?>
funktionierte so nicht. Darum dachte ich mir, da auch keine Angabe für die WagoID vorhanden war, das ich dieses Script unten anfügen muß. Das hatte es dann funktioniert.
es muss der lokalen Scriptvaraible $wago_id ein Wert zugewiesen werden.
Entweder über direkte Zuweisung des Integerwertes deiner Instanz:
$wago_id = 46639;
oder eben über eine globale IPS-Variable die den Integerwert enthält:
$wago_id = GetValueInteger("Wago_ID");
der Befehl GetValueInteger liest eine globale Variable mit dem Namen „Wago_ID“ aus und übergibt ihn an die interne Variable, das hat einfach den Vorteil das man die globale Variable einmal mit dem Wert der Instanz beschreibt und im Script dann immer diese abfragt, würde sich die Instanz mal ändern muss man nur die globale Variable anpassen und nicht in mehreren Scripten Änderungen vornehmen.