Time anzeigen in WinCC

Carsten_F

Level-1
Beiträge
15
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
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:

Code:
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:

Code:
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
 
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.

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.
 
Zurück
Oben