WinCC Flex 2005 Uhrzeit aus Steuerung lesen

eYe

Level-1
Beiträge
759
Reaktionspunkte
80
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

ich hab einen Slave am Profibus welcher als Matser für die Uhrzeit arbeitet.
Diese Uhrzeit lese ich nun in einen DB ein. ( 6 Bytes mit Jahr, Monat, Tag, Stunde, Minute und Sekunde)

In der WinCC Flex 2005 RT ist nun der Bereichszeiger "Datum/Uhrzeit Steuerung" aktiviert um die Werte aus der Steuerung zu übernehmen.
Das Ganze funktioniert schon soweit das er die Werte aus der Steuerung einliest, allerdings kommt es bei den Werten zu folgendem Ereignis:

z.B. Bei den Minuten (Bei den anderen analog dazu)

0-15 werden richtig angezeigt
16-31 werden um 6 verringert angezeigt
32-47 werden um 12 verringert angezeigt
48-59 werden um 18 verringert angezeigt

Hat jemand eine Idee wo das Problem liegt, sieht ja sehr systematisch aus der Fehler ^^

PS: Im DB stehen natürlich die richtigen Werte, nur WinCC Flex zeigt sie nicht richtig an...
PSS: Ich lese die Werte vom Slaves als Typ Byte ein und schreibe sie auch als Byte in den DB.


mfg, eYe
 
Zuletzt bearbeitet:
Hm, ich würde zuerst mal nachsehen, ob da irgendwas mit BCD codiert ist bzw. nicht mit BCD.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also
16 dezimal ist 10 hex Unterschied 6
17 dezimal ist 11 hex
..
32 dezimal ist 20 hex Unterschied 12
..
48 dezimal ist 30 hex Unterschied 18

Bekommst du denn auch Buchstaben anstatt Ziffern zu sehen, also Werte wie 1F (31 dezimal) oder so
 
jau das ist in der Steuerung anscheinend BCD codiert.
Kontrollier mal die Variablenformate.

128 64 32 16 8 4 2 1
0 0 0 0 0 0 0 0 = 0 BCD = 0
0 0 0 0 0 0 0 1 = 1 BCD = 1
...
0 0 0 0 1 0 0 1 = 9 BCD = 9
0 0 0 1 0 0 0 0 = 16 BCD = 10

Wäre jetzt meine Erklärung !?

Edit: boah ... alle schneller =)
 
In der WinCC Flex Hilfe steht Format DATE_AND_TIME (BCD codiert).

Sprich ich muss nun meine einzelnen Bytes in BCD umwandeln.
Da Byte ja nur 8 Bit haben und BCD 16 Bit muss ich wohl erst das höhere Byte in ein Word laden und in BCD umwandeln (BTI, ITB) und um 8 Stellen nach links schieben. Dann das zweite Byte in BCD wandeln und hinzufügen, wobei ich das highbyte ned überschreiben darf...

Es gibt nicht zufällig einen SFC der aus 2 Byte ein BCD macht? ^^
 
Normalerweise sollte es für diese Art der syncronisation keine Probleme geben.
Vorrausetzung, die Uhrzeit im DB liegt auch im "DATE_AND_TIME" Format vor.
Bei mir läuft dies ohne Probleme.

Die Frage, dies sich nun also stellt: Wie liest du aus der SPS aus?
Bei mir läufts über: SFC 1 "READ_CLK"
Die Ausgabe erfolgt auch über DT
 
Mit SFC geht es natürlich am elegantesten.
Sonst musst du deine Byte ins Datenformat DT BCD codiert bringen.

Byte n Jahr 0...99
Byte n+1 Monat 1...12
Byte n+2 Tag 1-31
...

etc. steht in der Hilfe
 
So ich habe fertig ^^


Hier mal als Beispiel der Code für Jahr(PEB32) und Monat(PEB33)

Code:
      L     PEB   32
      ITB   
      SLW   8
      L     PEB   33
      ITB   
      OW    
      T     DB4.DBW    0
Danke nochmal für den Tipp mit BCD :)
 
Zurück
Oben