String von SPS lesen

Frage ist , willst du irgendeine Zeit haben , oder einfach nur die aktuelle Zeit zur SPS schicken ?

Eigentlich möchte ich eine beliebige Zeit an die SPS schicken. Also praktisch die gelesene Zeit verändern.

Ja hab da schon was im Sinn.
Frage :
Soll die Eingabe ueber die gleiche Variable geschehen wie die Anzeige im Webfront
oder eine eigene Variable ?

Gesendet von meinem iPad mit Tapatalk HD

Das kann sowohl als auch.
Beide Varianten höhren sich gut an.
Da kann man für spätere Ideen mehr Varianten.

Nimm mal diesen Schnipsel in ein Script und mach dir eine neue String Variable.
Bei dieser Variablen gibst du das Script als „Eigene Aktion“ an.
Damit kannst du die Variable im Webfront aendern. Dadurch wird das Script dann ausgefuehrt.
Fehleingaben ( keine Uhrzeit ) werden nicht abgefangen, aber als Anfang sollte es reichen.

<?
	if($_IPS['SENDER'] == "WebFront")
		{
		$value    = $_IPS['VALUE'];
		$zeit     = explode(":",$value);
		$stunden  = $zeit[0];
		$minuten  = $zeit[1];
		$sekunden = $zeit[2];
		$tagsek   = ($stunden*3600)+($minuten*60)+$sekunden;
		
		$mitternacht = mktime(0, 0, 0, date("n"), date("j"), date("Y"));
		$zeit = $mitternacht + $tagsek;
		$zk = date("H:i:s",$zeit);
		
		// $zk ist ein formatierter Uhrzeitstring
   	SetValue($_IPS['VARIABLE'], $zk);
   	// $tagsek sind die Sekunden heute , ab in Richtung SPS

		}

?>

Also irgendwie geht es nicht. Auf der SPS kommt nix an. Wenn ich mit der zuständigen Instanz auf Werte schreiben gehe,
dann kommt der INT Wert bei der SPS an.
Oder hab ich im Script etwas verkehrt?


<?
    if($_IPS['SENDER'] == "WebFront")
        {
        $value    = $_IPS[47604 /*[Test\ModBus Gerät\zeit schreiben]*/];
        $zeit     = explode(":",$value);
        $stunden  = $zeit[0];
        $minuten  = $zeit[1];
        $sekunden = $zeit[2];
        $tagsek   = ($stunden*3600)+($minuten*60)+$sekunden;

        $mitternacht = mktime(0, 0, 0, date("n"), date("j"), date("Y"));
        $zeit = $mitternacht + $tagsek;
        $zk = date("H:i:s",$zeit);

        // $zk ist ein formatierter Uhrzeitstring
       SetValue($_IPS[29245 /*[Test\ModBus Gerät\Value]*/], $zk);
       // $tagsek sind die Sekunden heute , ab in Richtung SPS

        }

?>

Das Schreiben zur SPS hab ich nicht drin im Script

        // $zk ist ein formatierter Uhrzeitstring
       SetValue($_IPS[29245 /*[Test\ModBus Gerät\Value]*/], $zk);
       // $tagsek sind die Sekunden heute , ab in Richtung SPS 

$tagsek musst du noch irgendwie weiter verwenden.
Ich weiss nicht wie du in die SPS schreibst.
In $tagsek steht nur der Wert.

Ich lese und schreibe mit IPS per Modbus von/zur SPS(WAGO 750-881)

Kann mir Bitte jemand Sagen warum immer noch keine Daten auf der SPS ankommen?
Warum kann ich im WebFront mit der Variablen Einstellung ~String keine Werte mehr eingeben. Hab heut IPS Update gemacht. Oder gibt es dafür eine neue Funktion?

Zumindest das

<?
    if($_IPS['SENDER'] == "WebFront")
        {
        $value    = $_IPS[47604 /*[Test\ModBus Gerät\zeit schreiben]*/];

entspricht nicht dem Original und geht so nicht (meines Wissens)

Das untere mit „ModBus…“ stimmt auch nicht, da die Variable geschrieben werden muss. Das geht mit dem Original von oben

SetValue($_IPS['VARIABLE'], $zk); 

Die ModBus-Variable muss extra geändert werden. Denke ich mal. :o

Gruß
Bruno

Wenn ich das Orginalscript nehme ohne Änderungen geht es auch nicht. Ich muss dem Script doch sagen wo es lesen soll und wohin es schreiben soll. Wie soll ich den Teil nach SetValue denn schreiben das dann per Modbus zur SPS geschrieben wird?

Du musst das Original-Skript nehmen und zusätzlich!! die SetValue Zeile für den ModBus reinschreiben. Das Skript weiss durch den Auslöser selbst „wo es lesen muss“.

Das stand doch so da

Hätte jemand ein Beispiel dafür?

Habe keine Ahnung vom ModBus-Teil bzw. INT … Variable $zk oder $tagsek

 <?
    if($_IPS['SENDER'] == "WebFront")
        {
        $value    = $_IPS['VALUE'];
        $zeit     = explode(":",$value);
        $stunden  = $zeit[0];
        $minuten  = $zeit[1];
        $sekunden = $zeit[2];
        $tagsek   = ($stunden*3600)+($minuten*60)+$sekunden;
        
        $mitternacht = mktime(0, 0, 0, date("n"), date("j"), date("Y"));
        $zeit = $mitternacht + $tagsek;
        $zk = date("H:i:s",$zeit);
        
        // $zk ist ein formatierter Uhrzeitstring
       SetValue($_IPS['VARIABLE'], $zk);
       // $tagsek sind die Sekunden heute , ab in Richtung SPS

       ModBus_WriteRegisterInteger(45394, $tagsek);

        }

?> 

Ansonsten mal den Autor hier per pm anschreiben dass er seine Lösung verrät

Gruß
Bruno

Hallo, also irgendwie geht es immer noch nicht.
Wenn ich die } in line 22 lasse kommt nichts bei der SPS an. Setze ich die } zb in line 14 wird die „800“ zur SPS geschickt.
Dafür erhalte ich aber auch Fehlermeldungen. Wenn ich anstatt „800“ $tagsek einsetze habe ich auch eine Fehlermeldung für line 20. Könnte mir bitte wer verraten wo der Fehler ist?

Wenn du „}“ in Zeile 22 schreibst wird dein komplettes Script nur ausgefuehrt wenn es vom Webfront aufgerufen wird.

 if ( $_IPS['Sender'] == 'Webfront' )

Wenn du „}“ in Zeile 14 schreibst wird nur der Teil ausgefuehrt nach dem „}“ .
Dann ist natuerlich $tagsek und $zk nicht definiert .
Zeile 17 ist mir auch unklar ?

Hab die } jetzt wieder in line 22 gemacht. Wenn ich jetzt im WebFront das Script ausführe erhalte ich mehrere Fehlermeldungen (siehe Anhang). Ich kann die String Variable im Webfront auch nicht bearbeiten/ändern, klicke ich auf das „ENTER“ Symbol geht das Kästchen kurz auf und danach sofort wieder zu.

Das hatten wir eigentlich schon in #30 besprochen und auch in meinem Beispielskript dürfte es richtig drin sein. Irgendwie kommt es aber nicht bei ihm an. :confused:

@klarnsie
Wenn in die Variable 37943 noch geschrieben werden soll muss eine zusätzliche !! Zeile rein :eek:

       SetValue(37943, $zk);

Das Auf und Zu ist ein aktuelles Problem welches paresy noch lösen darf. Da Du keinen Wert eingeben kannst, gibt es kein Value.

Gruß
Bruno

Aendere mal das Profil deiner Variable von ~String in ~TextBox.

Das MODBUS ist doch drinnen. Ich weis aber nicht was mit zusätzlicher Zeile gemeint sein soll.

@1007
das mit ~Textbox geht jetzt. Ich kann im WebFront die Werte ändern.

Aber bei der SPS kommt die INT Zahl nicht an. Die Webfront Fehlermeldungen sind immer noch da.