String von SPS lesen

Hallo,
ich habe eine WAGO 881.
Ich möchte einen String der ein Zeitformat in TOD von der SPS enthällt, mit IPS auslesen und im WebFront anzeigen.
Habe bis jetzt nix passendes gefunden.

Das ist mit IPS nicht so einfach möglich. Wie ist der String denn überhaupt in der SPS codiert?

paresy

Hallo,
der ist als TOD Time_of_Day kodiert. Also eine Uhrzeit.
Meine SPS rechnet die Astrozeit aus, und schaltet danach Rolladen, Licht usw.
Jetzt möchte ich mir diese Zeit anzeigen lassen um zu wissen wann geschaltet wird, da es jeden Tag etwas anders ist.

Geht nur mit zerlegen in einzelne Wörter und dann in IPS wieder zusammenbauen…

„ColdIce
Geht nur mit zerlegen in einzelne Wörter und dann in IPS wieder zusammenbauen…“

Das verstehe ich nicht ganz.
Geht es nicht irgendwie mit timestamp oder strtotime?

Zitieren-Button unter dem Beitrag gesehen? :eek:

Du kannst einzelne Bytes/Wörter lesen und dann zu einem String zusammensetzen. Direkt Strings lesen ist leider nicht möglich. Kannst du in der SPS die Zeit nicht anders codieren? z.B. Unixtime?

paresy

Ich kann es auch in INT in der SPS umwandeln und von IPS als INT lesen lassen.
Würde das gehen?Hätte jemand dafür eine Lösung?

Bist du sicher, dass dein Zeitwert als Sring formatiert ist?
Normalerweise ist TOD ein 32 Bit Wert (Doppelwort) indem die Tageszeit in Millisekunden seit 0:00Uhr liegt.
Man kann zwar den Wert als „Klartext“ vorgeben, jedoch wird dies intern in Millisekunden gewertet.

Ich nutze den umgekehrten Weg: Dämmerungszeit per php in IPS ermitteln, als Unix-Timestamp in int schreiben und auf der SPS-Seite als DateTime-Merker lesen. Klappt problemlos. Bietet „nebenbei“ anhand des enthaltenen Datums noch die Info, ob die Zeiten auch aktuell ermittelt sind.

Die SPS wandelt mir das jetzt in DT_TO_INT um.
Ich habe jetzt folgendes Script von ENRA probiert.
<?
$zeit=GETVALUE(26903 /[Astrozeiten\Sonnenaufgang\Value]/);//variable welche zeitwert (int) beinhaltet
$h=intval($zeit/100);
$m=$zeit%100;
$zk=‚aktuelle Zeit: ‚.$h.‘:‘.$m;
echo $zk; //das ist eine Zeichenkette, welche in eine variable geshriben werden sollte…
?>

Leider ist da noch irgendwo der Wurm drin. Der INT Wert der SPS ist 28848 und die Ausgabe mit dem Script in IPS ist 288:48
Der errechnete Zeitwert der SPS ist 08:00:48 (h:m:s).

Da kann ich dir 2 Versionen anbietet in einem Script. 28848 sind ja die Sekunden von Heute.

$zeit=28848;
$h=intval($zeit/3600);
$rest=$zeit%3600;
$m=intval($rest/60);
$rest=$zeit%60;
$s=intval($rest);
$zk='aktuelle Zeit: '.$h.':'.$m.':'.$s;
echo $zk; //das ist eine Zeichenkette, welche in eine variable geshriben werden sollte....

$mitternacht = mktime(0, 0, 0, date("n"), date("j"), date("Y"));
$zeit = $mitternacht + $zeit;
echo "
" ;
$zk = date("H:i:s",$zeit);
echo $zk; //das ist eine Zeichenkette, welche in eine variable geshriben werden sollte....

Ergebniss:

aktuelle Zeit: 8:0:48
08:00:48

Das zweite ist dann gleich formatiert.

Hallo 1007,
habe dein Script mal so eingegeben:
<?
$zeit=GetValue (26903 /[Astrozeiten\Sonnenaufgang\Value]/)
$h=intval($zeit/3600);
$rest=$zeit%3600;
$m=intval($rest/60);
$rest=$zeit%60;
$s=intval($rest);
$zk=‚aktuelle Zeit: ‚.$h.‘:‘.$m.’:’.$s;
echo $zk; //das ist eine Zeichenkette, welche in eine variable geshriben werden sollte…

$mitternacht = mktime(0, 0, 0, date(„n“), date(„j“), date(„Y“));
$zeit = $mitternacht + $zeit;
echo "
" ;
$zk = date(„H:i:s“,$zeit);
echo $zk; //das ist eine Zeichenkette, welche in eine variable geshriben werden sollte…
?>

und erhalte die Meldung:
Parse error: syntax error, unexpected ‚$H‘ (T_VARIABLE) in C:\IP-Symcon\scripts\27591.ips.php on line 3

Hab den Fehler gefunden, hatte ; in Zeile 2 vergessen.
Das Script läuft.
Danke

Das einzige Problem was noch ist, im WebFont bekomme ich immer noch die INT Zahl angezeigt und nicht das Ergebnis des Script’s

Und schreibst du es auch in die Variable ? ( Stringvariable ! )

echo $zk; //das ist eine Zeichenkette, welche in eine variable geshriben werden sollte....

bei:


$zk=SetValue (40784 /*[Astrozeiten\Sonnenaufgang\Value\Sonnenaufgang]*/);

kommt eine Fehlermeldung:
Warning: Wrong parameter count for SetValue() in C:\IP-Symcon\scripts\27591.ips.php on line 15

@klamsie01
Solltest Du dich wundern dass der eingefügte Code bei 1007 besser aussieht und das ändern wollen, bitte die php-Tags (Antworten, mittlere Zeile ganz rechts, Blatt mit php) verwenden.

Gruß
Bruno

SetValue(40784,$zk);

Gesendet von meinem iPad mit Tapatalk HD

@1007
Das Script von Dir geht super. Ich habe aber mal eine Frage.
Wie müsste das Script aussehen das es in WebFront die Zeit wie Sie von der SPS kommt Anzeigt (so wie es jetzt ist),
das ich die Zeit ändern kann in WebFront und die geänderte Zeit dann als INT an die SPS schicke?
MfG