OSCAT 3.32 TIA V15.1 SET_DT

Begonnen von nullptr, 23. Januar 2019, 15:50:37

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 2 Gäste betrachten dieses Thema.

nullptr

Hallo,

Verwende die OSCAT 3.32 unter TIA V15.1.
Als Steuerung eine S7 300.
Habe die FC UTC_TO_LTIME verwendet um die Lokalzeit zu berechnen.
Nach der Uhrzeitumschaltung Sommer/Winterzeit wechselt die Stunde der Uhrzeit immer wieder sporadisch.
Lässt sich in der Variablentabelle beobachten.

Ich denke das Problem liegt am SET_DT.
Hier wird die lokale Variable tDT (Date_And_Time) (8 Byte) mit einem Byte Array überlagert aber die
Variable bzw. die letzten 2 Byte werden nicht initialisiert.


  #_DT[0] := WORD_TO_BYTE(INT_TO_BCD16(#t_year));   // year
  #_DT[1] := WORD_TO_BYTE(INT_TO_BCD16(#month));    // month
  #_DT[2] := WORD_TO_BYTE(INT_TO_BCD16(#day));      // day
  #_DT[3] := WORD_TO_BYTE(INT_TO_BCD16(#hour));     // hour
  #_DT[4] := WORD_TO_BYTE(INT_TO_BCD16(#minute));   // minute
  #_DT[5] := WORD_TO_BYTE(INT_TO_BCD16(#second));   // second
 
  #SET_DT := #tDT;


olif

Hallo,

wie du schon richtig beobachtet hast hat die OSCAT Lib an dieser Stelle einen Bug.

Als Hotfix kannst du die letzen beiden bytes auf 0 setzen.
#_DT[6] := 0;
#_DT[7] := 0;

Das funktioniert mit Einschränkungen. Denn in diesen Bytes sind neben der Zeit in ms auch der Wochentag kodiert. Solange dieser nicht verwendet wird ist alles ok.

Was bei dir wahrscheinlich passiert ist dass anschließend eine Funktion aufgerufen wird die DT nach TOD transferiert. Dazu muss von BCD Format wider umgewandelt werden.
Der Siemens Baustein macht aber vor der BCD Wandlung eine Prüfung ob die Wandlung funktioniert. Wenn diese Fehlschlägt wegen un initialisierten Daten wie sie von SET_DT erzeugt werden macht diese Funktion einfach nix -> wiederum potentiell nicht initialisierte Daten. Und kein Syncronfehler mit BCD Wandlungsfehler.

Viele Grüße

Oliver