TIA Probleme CPU-Zeit stellen S7-300

Frame

Well-known member
Beiträge
63
Punkte Reaktionen
5
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo liebes Forum,

ich habe mal wieder Probleme mit dem Stellen der CPU-Zeit einer S7-300 und TIA V15.1. Vorgegangen bin ich u.a. mithilfe dieses Links: https://support.industry.siemens.co...-(set_clk)-eingestellt-werden-?dti=0&lc=de-WW

Wir bekommen die Zeit als CP56tima2a Format gesendet. Dieses habe ich auch schon soweit aufbereitet, das sollte mMn auch stimmen und richtig sein (FB_Aufbereitung.PNG). Im Grunde füge ich in dem Baustein die Eingangsdaten entsprechend zusammen, maskiere Bits aus, usw.. Am Ende werden diese auf den DB315 geschrieben. Alle Ausgänge sind Bytes.

"Testaufbau.PNG" zeigt meinen FC der die CPU-Zeit stellen soll und eine Test-Variable die den Baustein aktivieren soll. In der PDF ist die Bausteinprogrammierung abgelegt. Wenn ich den FC mit der Testvariable aktiviere sehe ich während der 10 Sekunden auch, dass die CPU-Zeit gelesen und in den dafür vorgesehenen DB314 (CPU_Zeit_auslesen.PNG) geschrieben wird (Sekunden und Millisekunden verändern sich fortwährend, solange die 10 Sekunden laufen). Auch die Tage, Stunden, etc. ändern sich wenn ich die CPU-Zeit händisch ändere und den FC erneut starte. Also würde ich zumindest beim einlesen der CPU-Zeit keinen Fehler vermuten. Aber wer weiß ...

Ansonsten gebe ich die zu schreibende Zeit über meinen FB (FB_Aufbereitung.PNG) vor. Die vorgegebene Zeit sehe ich auch fortwährend beim Beobachten des dafür vorgesehenen DB315 (CPU_Zeit_schreiben.PNG).

Nur leider wird die zu schreibende Zeit nicht auf die CPU übernommen und ich weiß leider nicht wo mein Fehler liegt.
Ich denke, dass der Fehler irgendwo im FC bei NW4/5 liegt. Aber leider fällt mir jetzt nichts mehr ein.

Ich hoffe ich habe mein Problem verständlich formuliert und ihr könnt mir weiterhelfen.
Vielen Dank schon einmal im Voraus.

Grüße
Frame
 

Anhänge

  • CPU_Zeit_ausgelesen.PNG
    CPU_Zeit_ausgelesen.PNG
    35,1 KB · Aufrufe: 17
  • CPU_Zeit_schreiben.PNG
    CPU_Zeit_schreiben.PNG
    35,5 KB · Aufrufe: 21
  • CPU_Zeit_stellen_FC.pdf
    131,1 KB · Aufrufe: 17
  • FB_Aufbereitung.PNG
    FB_Aufbereitung.PNG
    40,3 KB · Aufrufe: 22
  • Testaufbau.PNG
    Testaufbau.PNG
    10,2 KB · Aufrufe: 22

PN/DP

User des Jahres 2011 - 2013; 2015 - 2017; 2020
Beiträge
17.262
Punkte Reaktionen
5.075
Zuviel Werbung?
->Hier kostenlos registrieren
h_write = 16#0C wird garantiert abgelehnt werden. Ist Dir schon aufgefallen, daß im Datentyp DATE_AND_TIME (DT) alle Werte im BCD-Format sind/sein müssen?

Harald
 
OP
Frame

Frame

Well-known member
Beiträge
63
Punkte Reaktionen
5
h_write = 16#0C wird garantiert abgelehnt werden. Ist Dir schon aufgefallen, daß im Datentyp DATE_AND_TIME (DT) alle Werte im BCD-Format sind/sein müssen?

Harald
Das klingt erstmal sehr logisch, dass dort mein Problem liegen könnte. Gibt es eine Möglichkeit das Byte direkt ins BCD Format zu bringen?

Ich kenne den AWL Befehl ITB für Integer in BCD. Gibts das auch fürs Byte?
 

PN/DP

User des Jahres 2011 - 2013; 2015 - 2017; 2020
Beiträge
17.262
Punkte Reaktionen
5.075
In AWL ist den Befehlen ITB und BTI egal, ob das Ergebnis in Bytes oder Words oder INTs oder ... landet oder woher die Eingangswerte stammen, weil die Anweisungen immer mit den niedrigsten 16 Bit des AKKU1 arbeiten. Die für DATE_AND_TIME relevanten Zahlen sind immer max. zweistellig und passen daher immer auch in Bytes (außer die Millisekunden 0..999).

Wenn Du die Uhrzeit-Bestandteile als dezimal-Werte (z.B. von HMI-Eingabefeldern) vorgeben willst bzw. wenn die Werte in Deinem CP56tima2a Format dezimal sind, dann musst Du die Dezimalwerte beim Eintragen in die DATE_AND_TIME-Variable in BCD-Werte wandeln:

Code:
Netzwerk 4: zu stellende Uhrzeit speichern
LAR1 P##Datum_Uhrzeit_Write //Temporäre Variable vom Type DT

L "DB315_CP56time2a".a_write //Jahr 0..99
ITB
T B [ AR1 , P#0.0 ]          //Jahr BCD#0..BCD#99

Genaugenommen müsste man vor der BCD-Wandlung noch prüfen, ob die Stunden/Minuten/.../-Werte im jeweils zulässigen Bereich (0..23, 0..59, ...) sind, doch auch ohne Prüfung nur mit direkter BCD-Wandlung funktioniert das Programm hier schon besser als Vorführprogramm als das undurchdachte Siemens-Beispiel...

Willst Du auch die Werte der gelesenen Uhrzeit dezimal 0..23/0..59/... anstatt BCD haben, so müsstest Du auch noch ändern:
Code:
Netzwerk 3: ausgelesene Uhrzeit speichern
LAR1 P##Datum_Uhrzeit_Read

L B [ AR1 , P#0.0 ]          //Jahr BCD#0..BCD#99
BTI
T "DB314_CP56time2a".a_read  //Jahr 0..99

Achtung: wenn bei einer S7-300/400 der Eingangswert von BTI nicht im Bereich BCD#-999 .. BCD#+999 liegt, dann geht die CPU in STOP wenn kein OB121 vorhanden ist.

Harald
 
OP
Frame

Frame

Well-known member
Beiträge
63
Punkte Reaktionen
5
Wieder einmal kann ich dem Forum nicht genug danken. Es lag tatsächlich an der BCD-Codierung.
 
Oben