Datenwort als TW Wert im Timer

dada1983

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

wir haben hier ein MP277 Touch zur Verfügung und da wird eine Zeit für einen Testzyklus angegeben.
Diese Zeit wird in Stunden/Minuten/Sekunden unterteilt.
Alle 3 Angaben sind im WinCC Projekt INT.

Mit einer Berechnung in unserer S7 wird die Gesamtzeit in Sekunden ausgewertet und in ein Datenwort weggeschrieben.
Dieses Datenwort ist eine S5Time.
Desweiteren wird diese Zeit durch 20 geteilt.
Rufe ich jetzt dieses Datenwort an einen Timer TW auf dann stimmt dieser Wert nicht.

L DB300.DBW82
L 20
/ I
T DB300.DBW84

U "Stufe1"
L DB300.DBW84
SV T1
U M1.1
R T1
NOP 0
NOP 0
NOP 0

Kann mir jemand sagen wo mein Denkfehler ist?!?!?!

Gruß Daniel
 
Hallo Daniel

Was kommt denn im DB300.DBW82 an bzw. was soll ankommen??? Liegen die Werte weit auseinander?
Meine Idee wäre das ein Wort eventuell zu klein sein könnte..
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich 1 Stunde im Panel eingebe dann steht im Datenwort DW300.DBW82 eine 3600 was auch richtig ist.
Im Datenwort DB300.DBW84 steht dann die 3600/20 also 180
Diese 180 liegt auch an dem Timer an allerdings läuft diese bei Freigabe nicht ab.

Gruß
 
naja da diese Zeit "1 Stunde" konstant ist aktualisiert die CPU den Wert von DB300.DBW82 bzw. .DBW84.
Das heißt meiner Meinung nach, dass nach jedem Zyklus die 180 Sekunden immer wieder in deinen Timer reingeschrieben werden. SO mit kann die Zeit nicht ablaufen
 
Das S5T-Format entspricht im Prinzip weitestgehend dem BCD-Format, allerdings bildet hier das High-Nibble im Low-Byte statt des Vorzeichens den Zeitfaktor.
Wenn Du /I machst, dann werden die AKKUs als Integer interpretiert und entsprechend geteilt, das kann natürlich nicht funktionieren, wenn man versucht, das mit einer BCD oder einer S5T zu machen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die S5TIME unterliegt einem festem Aufbau und ist 16 Bit groß.
Der eigentliche Zahlenwert ist eine BCD und umfasst 12 der 16 Bit (Bit 0 bis 11)und kann den Wert von 000-999 annehmen. Der eigentliche Zeitwert wird dann über den Faktor Zeitbasis errechnet. Zahlenwert x Zeitbais = Zeitwert. Die Zeitbasis wird durch die Bits 12 und 13 festgelegt, die Bits 14 und 15 sind irrelevant.

Aufbau im Word (Beispiel):


Bit Nr. 15 14 13 12 ! 11 10 09 08 ! 07 06 05 04 ! 03 02 01 00
x x 1 0 ! 1 0 0 1 ! 0 0 1 0 ! 1 0 0 0

Zeitbasis = 1s , Zahlenwert 928 = 928s = 15min 28s

Auf Grund dieses Aufbaus kannst Du den Inhalt des Worts nicht einfach durch 20 teilen. Schau mal inder Hilfe unter S5Time nach.
 
Zuletzt bearbeitet:
Tipp: Gib mal in der STEP7 Hilfe "Format des Datentyps S5TIME (Zeitdauer)" ein und schau Dir den Aufbau des Formats an
 
Die Siemens Timer verlangen den Zeitwert im S5Time Format. Das ist nicht einfach ein Sekunden oder ähnliches Format.
S5Time ist ein Word - soweit richtig. Die ersten 4 Bit representieren den Zeitintervall und die letzten 12 Bit sind 3 Zahlen im BCD-Code, die den Zeitwert bilden.

Ich habe mal kurz Google bemüht. Das hier könnte was für euch sein:
http://www.automation.siemens.com/WW/forum/guests/PostShow.aspx?PostID=72881&language=en




Ich sehe schon andere waren hier schneller, aber der Link ist bestimmt was für euch.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit einer Berechnung in unserer S7 wird die Gesamtzeit in Sekunden ausgewertet und in ein Datenwort weggeschrieben.
Dieses Datenwort ist eine S5Time.
Desweiteren wird diese Zeit durch 20 geteilt.
Rufe ich jetzt dieses Datenwort an einen Timer TW auf dann stimmt dieser Wert nicht.

L DB300.DBW82
L 20
/ I
T DB300.DBW84
Hallo Daniel,
so sollte es funktionieren:
Code:
   L DB300.DBW82
   L 20
   / I
   ITB
   L  2#10 0000 0000 0000
   OW
   T DB300.DBW84
Aber beachte die von User "190B" schon erwähnte Grenze von 999.
 
Und wenn Du im Beispiel von Paule nach dem ITB

Code:
L W#16#FFF
UW

noch mit einfügst, kann zumindest bei einer Fehleingabe (>999 als Ergebniss der Berechnung) nicht mehr viel passieren.

@Paule, ich will kein Besserwisser sein, aber irgendwie fehlten noch die zwei Zeilen :D

Grüße
 
Also, ich bin der Meinung, da fehlt noch etwas.
Das Datenword DB300.DBW82 ist S5TIME, also noch BCD und gesetztem Bit für die Zeitbasis. Es müßte also erst das (die) Bit(s) rückgesetzt werden und man hätte dann den reinen Zahlenwert, allerdings noch BCD. Also muß erst noch von BCD nach Integer gewandelt werden, bevor man eine Integerdivision vornimmt.
Vielleicht wäre es besser, die Sekundenzahl als Integer ins DB300.DBW82 zu schieben, dann teilen, auf max. 999 prüfen und anschließend die Wandlung zu BCD durchführen und das Bit 13 für die Zeitbasis Sekunden setzen.
Korrigiert mich, wenn ich falsch liege. ;)

Edit: Wobei ich mich allerdings im Nachhinein frage, warum man eien Zeitwert vorgibt und ihn dann anschließend durch 20 dividiert?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Det TE Schreibt zwar, das er das Datenwort als S5Time deklariert hat, aber er schreibt einen Integer, der die Sekunden representiert rein. Da ist also gar kein S5Time-Wert drin. Insofern passt alles.

Das mit dem 20 dividieren - keine Ahnung - aber vielleicht sollen 20 gleiche Zeitbereiche erzeugt werden. Der User gibt aber nur die Gesamtzeit am Panel ein... Nur so'ne Idee.
 
Det TE Schreibt zwar, das er das Datenwort als S5Time deklariert hat, aber er schreibt einen Integer, der die Sekunden representiert rein. Da ist also gar kein S5Time-Wert drin. Insofern passt alles.
Das sehe ich auch so!

@Paule, ich will kein Besserwisser sein, aber irgendwie fehlten noch die zwei Zeilen :D
Passt scho ! :D
Was nicht sicher ist, muss sicher gemacht werden. :s1:
 
Hallo 190B,

Ich werde mich beruflich intensiver mit der SPS beschäftigen.
Eines meiner Wissenslücken ist die Zeitvorgabe von Timern mittels Datenwörtern.
Gebe Ich genau so wie du beschrieben hast den BCD Code im DB ein( ohne ! natürlich )?
Wie sieht es aus, wenn ich ich von einem Panel aus die Zeiten ändern möchte?
Was muss ich im Panel eingeben?
Vielen Dank im Voraus für deine Antwort.
Gruß
papatossi
 
Zurück
Oben