TIME_OF_DAY lesen/schreiben

Hallo,

ich bin auch damit beschäftigt den S7 Datentyp TIME_OF_DAY auszulesen und zu schreiben. Der Aufbau ist ja recht simpel - Millisekunden ab 00:00:00.000 Uhr (also Mitternacht). In der S7 ein DINT und in IPS ein INT.

Jetzt geht es ja „nur“ um die Darstellung in IPS.
Mir ist das Variablenprofil ~UnixTimestamp aufgefallen. Das stellt einen INT ja auch anders dar (Datum & Uhrzeit).

Ist es möglich dies auch für den TIME_OF_DAY so umzusetzen?

Hallo Uli,

teil die empfangenen Millisekunden durch 1000, gerundet auf ganze Zahlen und übergib sie an folgende Function. Das Ergebnis in eine String oder direkt nach html.

<?
//http://www.pchocker.de/php.php?id=4

echo toStd(3661);

function toStd($sekunden)
{
    $stunden = floor($sekunden / 3600);
    $minuten = floor(($sekunden - ($stunden * 3600)) / 60);
    $sekunden = round($sekunden - ($stunden * 3600) - ($minuten * 60), 0);

    if ($stunden <= 9) {
        $strStunden = "0" . $stunden;
    } else {
        $strStunden = $stunden;
    }

    if ($minuten <= 9) {
        $strMinuten = "0" . $minuten;
    } else {
        $strMinuten = $minuten;
    }

    if ($sekunden <= 9) {
        $strSekunden = "0" . $sekunden;
    } else {
        $strSekunden = $sekunden;
    }

    return "$strStunden:$strMinuten:$strSekunden";
}

?>

Hi Wolfgang,

die Umrechnung (Aufteilung in Std/Min/Sek) ist nicht das Problem.

Das Problem besteht vielmehr darin, dass ich von verschiedenen Stellen aus (S7 selbst, Siemens HMI, IP-Symcon) die Uhrzeit ändern möchte.
Somit steht in der Variable, die durch die Instanz (Wert aus S7 lesen) geschrieben wird, der reine Millisekundenwert. Dann kommt das Skript, das den Millisekundenwert in Std/Min/Sek umrechnet und schreibt diese 3 Werte in 3 Variablen (oder einen Sting). Bei Änderung im IPS dann der ganze Weg rückwärts. Getriggert immer durch das Ändern einer der Variablen.

Ich finde es halt recht umständlich, da ich sehr viele Uhrzeiten im TOD-Format in der S7 habe. Und so sollte es auch bleiben!

Der komfortabelste Weg wäre eben dies über ein Variablenprofil zu lösen. Muss ja eigentlich gehen, wenn es bei ~UnixTimestamp auch geht.
Auf der änderen Seite soltle es ja auch kein Problem sein, dass man diesen Datentyp gleich in IPS (also beim Anlegen der Instanz) zur Auswahl hat. Ist ja schließlich auch nur ein Datentyp.

@paresy
Kannst Du mir etwas dazu sagen/schreiben?