Step 7 PCS7 Uhrzeitübermittlung zur Steuerung über E/A-Feld WinCC

pat125

Level-1
Beiträge
57
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

ich habe eine Frage zur Übertragung von einer Zeitangabe vom WinCC ins Step7 bzw. von der Visualisierung zu Steuerung.

Folgendes System:

  • PCS7 V8.1
  • WinCC V7.3


Folgendes Problem:

Der Bediener soll eine Zeit in der Visualisierung eingeben können, die dann auf der Steuerung mit der Systemzeit der CPU verglichen werden soll. Damit zur festgelegten Zeit eine (Schalt-)Aktion ausgeführt wird.

Hierfür habe ich ein E/A-Feld angelegt und mit einem Merker-Doppel-Wort (Real) verknüpft. Datenformat des E/A-Feld habe ich „Datum/Uhrzeit“ und Ausgabeformat ist „time“. Das funktioniert auch soweit, man kann eine Zeit eingeben und diese wird auch zu Steuerung übertragen.

Leider kann ich mit dem angegeben Wert in der Steuerung nichts anfangen. Wie ist der Wert auf der Steuerung aufgeschlüsselt. Wie bekomme ich hier nun die Zeit raus?

Wenn ich 10:00:00 eingebe, erhalte wich folgende Werte:

  • Hex DW#16#3ED55555
  • Dez L#1054168405
  • Gleitpunkt 0.416667
  • Zeit T#12d4h49m28s405ms


Ich hoffe es kann mir jemand weiterhelfen.

Vielen Dank!
 

Anhänge

  • Zeit.JPG
    Zeit.JPG
    45,9 KB · Aufrufe: 19
Code:
//                                          h/d  m/h  s/m  ms/s
iDays         := UDINT_TO_INT( udTime_ms / (24 * 60 * 60 * 1000)) ;
iHours        := UDINT_TO_INT((udTime_ms / (     60 * 60 * 1000)) MOD 24 ) ;
iMinutes      := UDINT_TO_INT((udTime_ms / (          60 * 1000)) MOD 60 ) ;
iSeconds      := UDINT_TO_INT((udTime_ms /                 1000 ) MOD 60 ) ;
iMilliSeconds := UDINT_TO_INT( udTime_ms                          MOD 1000 ) ;
// z.B.
// udTime_ms     : 1054168405                     
// liefert
// iDays         :  12                     
// iHours        :   4                   
// iMinutes      :  49
// iSeconds      :  28
// iMilliSeconds : 405
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe das so wie du zwar noch nie verwendet, aber 0,416666 mal 24 (Stunden pro Tag) ist annähernd 10. Ich würde ein paar andere Eingaben ausprobieren, mit Minuten und Sekunden ob das Schema bleibt. Ob das mit Real sinnvoll und nachvollziehbar ist sei mal dahingestellt.
 
Ich habe das so wie du zwar noch nie verwendet, aber 0,416666 mal 24 (Stunden pro Tag) ist annähernd 10.
Das erinnert an die Darstellung von Datum und Zeit in einer Variablen bei VBA.
Die VorkommaStellen sind die Tage und die NachkommaStellen die Uhrzeit, ebenfalls in der Einheit Tage.
Ob es allerdings Sinn macht, diese Betrachtungsweise in das Format REAL zu giessen, wage ich zu bezweifeln.

Was steht denn im Bildchen aus #1 noch rechts von dem grünen Lämpchen? Ich sehe da nur ein halbes "H". Steht da etwa "HH:MM:SS"?
Wo sehe ich denn, dass der DatenTyp des Feldes überhaupt als REAL gemeint ist? Wäre zwar plausibel durch 0,4166667 * 24 = 10, aber ... ?

Alles ganz stark merkwürdig.

Also (in #2) vorab noch:
Code:
udTime_ms := REAL_TO_UDINT (24.0 * 60.0 * 60.0 * 1000.0 * rTime ) ;
 
Vielen Dank für die Antworten. Hat mir schon etwas geholfen bzw. Verständnis geschafft :)

Das mit dem REAL war nur gewählt, da ich ansonsten die Zeit nicht in die Steuerung bekommen habe.

Bin für eine andere Lösung/Vorschläge offen und auch dankbar.
Wie beschrieben möchte ich gerne eine eingegebene Uhrzeit per E/A-Feld an die Steuerung übermitteln. Das Ganze soll aber mit Standard-Mittel/Bausteine funktionieren. Heißt keine selbst geschriebene Baustein in SCL oder so. Da es eventuell bei Migration auf eine höhere PCS/ Version zu Problem kommen könnte bzw. extra arbeite sein kann (GMP).

Danke!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Falls du die APL verwendest, wäre in der Industry-Library eine fertige Wochenschaltuhr vorhanden. Die hat zwar ein paar Bugs, bzw. "Systemeigenschaften" aber da es von Siemens ist, ist das natürlich gut.

Wenn du ganz ohne Spezialfunktionen auskommen willst, dann nimmst du je Zeit 3 Integer-Variablen für Stunde, Minute und Sekunde, und machst dann im WinCC drei Eingabefelder. Wenn Minuten nicht gewünscht sind, dann kannst du die hier auch weglassen, das ginge z.B. beim EA-Feld mit dem Zeitformat nicht. Du kannst natürlich auch an ein einziges EA-Feld in WinCC ein paar Skripte anhängen, die bei Eingabe den Eingabewert entsprechend umformatieren, und beim Ausgabewert ebenso. Aber wenn einer unbedingt "Standard" haben will, dann wäre imho 2/3 Integervariablen mit einzelnen EA-Feldern der richtige Weg, mit dem kleinen Nachteil bei der Eingabe der Zeit zwei Felder bearbeiten zu müssen.

Im Programm bietet es sich meiner Meinung nach an vielen Stellen auch an, nicht mit der Uhrzeit in Form von Time_of_day zu arbeiten sondern mit den Einzelelementen. Ich zerlege das meistens in einem einzigen CFC-Plan und hole mir dann dort die Zeit her wenn ich sie benötige. Wenn man nur CFC malen darf, wird das auch der richtige Weg sein. Ich hatte auch schon mal so eine Vorgabe, das macht die ganzen Vorteile von CFC kaputt, jedes Fitzelchen in CFC mit zig Bausteinen nachzubauen wo niemand mehr durchsteigt, was in SCL zwei drei Zeilen wären. Aber so lange ich den Quatsch nicht warten muss liefere ich sowas auch ab.
 
Das mit dem REAL war nur gewählt, da ich ansonsten die Zeit nicht in die Steuerung bekommen habe.
Unter welchen Alternativen hättest Du wählen können?

Die SCL-ähnlichen ProgrammSchnippsel sollen doch nur den Lösungsweg andeuten. Kann man z.B. auch in FUP realisieren.
Es sind doch nur TypKonvertierungen, Multiplikation und Division bzw. MOD.
Die vielen Multiplikationen von Konstanten kann man auch vorab zu Fuss ausrechnen und im Programm mit den Ergebnissen weiterrechnen.

@ Thomas:
Hab's hier nur mit Excel probiert ... wenn's auf die eine oder andere ms nicht ankommt ... na ja. Sollte für eine Eingabe von h, m und s schon seinen Zweck erfüllen.
 
Zuletzt bearbeitet:
Unter welchen Alternativen hättest Du wählen können?
In der Konfiguration von ihm funktioniert das EA-Feld nur mit Gleitkomma-Zahlen, warum auch immer. Ich hatte mir das anfangs auch mal angesehen zur Zeiteingabe, das ist aber meiner Meinung nach so nicht sinnvoll in Kombination mit einer SPS brauchbar, zumindest nicht wenn es direkt mit einer Variable verknüpft wird.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,
wollte euch eine kurze Rückmeldung geben.
Habe es nun so wie der Thomas es beschrieben hat umgesetzt. Drei Eingabefelder angelegt und diese mit DB-Variablen verknüpft. Ist zwar etwas umständlich, aber wenn der Kunde nur "Standard-Mittel" wünscht, wohl die beste Möglichkeit.

Vielen Dank an Alle!

Gruß
Pat
 
Zurück
Oben