Hilfe! Anfänger sucht "Hallo Welt" für Wago

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:

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Wago_IO.ips.php
Trigger  : OnChange "Wago_IX_0"
Interval : 
*/

$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"

}
}

?>

Bei OnChange muss wieder die Variable des Eingangs eingetragen werden, hier „Wago_IX_0“.

Mehrere Ausgänge in einem Skript geht sicher auch mit entsprechenden Hilfsvariablen aber da können vielleicht die PHP-Profis was dazu sagen.

Ich würde ohnehin die Grundfunktionen in der Wago selbst programmieren und IPS nur darüber setzen, dann funktioniert das ganze auch ohne PC.

mfg
Martin

Hallo,
wieder einmal ein großes Danke an alle.

@m-f-a, es funktioniert super.

Nun, wenn es dann einen eigenen Wago-Bereich geben sollte, werde ich eine kleine Doku für Wago-Einsteiger als kleines Dankeschön erstellen.

PS: Das war bestimmt nicht die letzte Frage!

Gruß Mario

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.

Hallo nancilla,

und demnaechst wirste auch noch von mir belegt :slight_smile:

Gruss Torro

@Torro
Lass mich raten… IPS-Together steht vor der Tür und du hast einiges versprochen;) Wird schon!

hi,

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.

mfg,
basti

…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.

Hi,
also der Code von m-f-a

$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.

Gibts denn bei dir überhaupt die Variable „WAGO_ID“ und steht dort „46639“ drin? m-f-a hat das als Platzhalter eingesetzt, das ist dir schon klar?

Es steht ja auch im Ausgabefeld „Unable to locate IPSVariable: WAGO_ID…“

Nimm mal die Zeilen 13 bis 20 raus.

Ach:eek:, wie blöd von mir! Das habe ich nicht gesehen.
Danke für den Hinweis. wenn ich nach Hause komme werde ich es gleich ändern!

Gruß

Danke, jetzt geht es!:slight_smile:

Nur für mich zum Verständnis,was bedeutet oder was ist der Unterschied „GetValueInteger“ in folgender Zeile zur nachfolgenden Zeile?

$wago_id = GetValueInteger("46639");

Es kam die Meldung:



Notice: Unable to locate IPSVariable: 46639 in C:\Programme\IP-SYMCON\scripts.currentscript on line 12

Ich habe diese durch

$wago_id = 46639;

ersetzt, danach kam keine Meldung mehr.

Gruß

Hallo inspiron,

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.

Schau doch mal die Doku durch das ist schon sehr hilfreich.
http://www.ipsymcon.de/~hjh/HelpStudio/html/IPS-Manual/webframe.html
http://www.ipsymcon.de/wiki/index.php/Tonis_kleines_Programmierhandbuch_-_Einleitung

Gruß
Martin