# Time anzeigen in WinCC



## Carsten_F (25 Dezember 2010)

Hallo,

ich habe SIMATIC WinCC flexible 2008 SP2, STEP7 V5.5 und ein OP 177B 6 mono DP.

WinCC kann von Natur aus kein Time richtig anzeigen und die Skalierung ist ja auch mehr ein behelf.
Um Power Tags zu sparen hätte ich gern ein Skribt was die umwandlung von Time in String quasi direkt in WinCC durchfürt und das Ergebniss anzeigt.

Ich habe zwar ein bischen erfahrung in C und C# aber nicht in VB und WinCC Skribts.

Zum Testen (für die umrechnung) habe ich in SCL erstmal ein Test programm geschrieben wobei die umwandlung zum string allerdings nicht klappt:


```
FUNCTION FC1 : VOID
VAR_INPUT
    Zeit    : TIME;
END_VAR

VAR_OUTPUT
   ms       : INT;
   s        : INT;
   m        : INT;
   h        : INT;
   d        : INT; 
   Zeit_St     : STRING;
END_VAR

VAR_TEMP
   Zeitt     : DINT;
   mst       : DINT;
   st        : DINT;
   mt        : DINT;
   ht        : DINT;
   dtt       : DINT;
   Zeit_t     : STRING;
END_VAR

Zeitt:=TIME_TO_DINT(Zeit);

mst:= Zeitt MOD 1000;
Zeitt:= (Zeitt - mst)/1000;
ms:= DINT_TO_INT(mst);

st:= Zeitt MOD 60;
Zeitt:= (Zeitt - st);
s:= DINT_TO_INT(st);

dtt:= Zeitt / 86400;
Zeitt:= Zeitt-(dtt*86400);
d:= DINT_TO_INT(dtt);

ht:= Zeitt / 3600;
Zeitt:= Zeitt-(ht * 3600);
h:=DINT_TO_INT(ht);


mt:= Zeitt / 60;
Zeitt:= Zeitt-(mt*60);
m:=DINT_TO_INT(mt);

IF dtt > dint#0 THEN
    Zeit_t:= CONCAT( in1 := DINT_TO_STRING(dtt), in2 := 'D');
END_IF;

IF ht > dint#0 THEN
    Zeit_t:= CONCAT( in1 :=CONCAT( in1 := Zeit_t, in2 := DINT_TO_STRING(ht)), in2 := 'H');
END_IF;

IF mt > dint#0 THEN
    Zeit_t:= CONCAT( in1 :=CONCAT( in1 := Zeit_t, in2 := DINT_TO_STRING(mt)), in2 := 'M');
END_IF;

IF st > dint#0 THEN
    Zeit_t:= CONCAT( in1 :=CONCAT( in1 := Zeit_t, in2 := DINT_TO_STRING(st)), in2 := 'S');
END_IF;



Zeit_St:=Zeit_t;



END_FUNCTION
```

Danach habe ich das versucht auf WinCC zu übertragen da kam dann das heraus:


```
Function Time_To_String(Zeit New Int)
  Dim ms_ New Int
  Dim s_ New Int
  Dim m_ New Int
  Dim h_ New Int
  Dim d_ New Int
Dim Zeit_ New String

ms_= Zeit Mod 1000
Zeit = (Zeit - ms_)/1000

s_ = Zeit Mod 60
Zeit = (Zeit - s_)

d_ = Zeit / 86400
Zeit = Zeit -(d_ * 86400)

h_= Zeit / 3600
Zeit = Zeit -(h_ * 3600)

m_ = Zeit / 60
Zeit = Zeit -(m_*60)
'-----------------------------------------------------------------------------------------------------------------------------------
If d_ > 0 Then
    Zeit_ = CStr(d_) + "D"
End If

If h_ > 0 Then
    Zeit_ = Zeit_ + CStr(h_) + "H"
End If

If m_ > 0 Then
    Zeit_ = Zeit_ + CStr(m_) + "M"
End If

If s_ > 0 Then
    Zeit_ = Zeit_ + CStr(s_) + "S"
End If




   Time_To_String = Zeit_
 End Function
```

aber der code hat erstmal irgentein Fehler und zweitens weiss ich gar nicht wie man die Skribts nacher anwendet.

Kann mir jemand helfen??

MfG

Carsten


----------



## Thomas_v2.1 (25 Dezember 2010)

Carsten_F schrieb:


> Hallo,
> 
> ich habe SIMATIC WinCC flexible 2008 SP2, STEP7 V5.5 und ein OP 177B 6 mono DP.
> 
> ...



WinCCflexible kann eine date_and_time Variable doch direkt anzeigen. Dafür gibt es in der Werkzeugkiste das "Datum-Uhrzeit-Feld". Du brauchst nur in der SPS die Uhrzeit mit SFC1 auslesen und das Ergebnis z.B. in einem Datenbaustein ablegen.
Es ist WinCC (ohne flexible) welchses sich mit dem Umgang von date_and_time etwas schwer tut.


----------



## Carsten_F (25 Dezember 2010)

Hallo,

ich mein nicht Formate DateAndTime sondern nur Time.

ich Versuche die abgelaufene Zeit von TON und TOF bausteinen ordendtlich anzuzeigen.


----------



## Andy79 (25 Dezember 2010)

Hallo,

das geht jetzt zwar in eine andere Richtung, aber willst du das nicht lieber in der SPS lösen?
Das Beispiel 4 im angefügten Link benutze ich immer für IEC Timer bei denen ich die Restlaufzeit ausgeben will, funktioniert soweit sehr gut und ist schnell und einfach parametriert.

http://support.automation.siemens.com/WW/view/de/23992560

Gruß Andy


----------

