Integer Wert (t in ms) in S5Time umwandeln?

OP
A

Anonymous

Guest
Habs gefunden :!:

Antwort:


Voraussetzung ist, dass der gelieferte Wert die Zeit in Millisekunden beinhaltet. Dann kann die Umwandlung in zwei Schritten folgendermaßen vor sich gehen:

1. Zuerst wandelt man den gegebenen Wert in das Format Doppelinteger und schreibt das Ergebnis in eine Variable vom Typ Time.
Integerwerte werden mit dem Befehl "ITD" und Realwerte mit "RND" in das Format Doppelinteger gewandelt. 2. Durch die Nutzung des FC40 aus "Standard Library > IEC Function Blocks > FC40" (TIM_S5TI) wird das Format TIME in S5TIME gewandelt.

Beispiel:
In einer AWL-Quelle sieht die Programmierung für eine INT > S5 Time Umwandlung folgendermaßen aus:

VAR_INPUT
wert_i : INT ;
END_VAR
VAR_OUTPUT
zeit_s5 : S5TIME ;
END_VAR
VAR_TEMP
tmp_time : TIME ;
END_VAR

BEGIN
NETWORK
TITLE =
L #wert_i;
ITD ;
T #tmp_time;
NETWORK
TITLE =
CALL "TIM_S5TI" (
IN := #tmp_time,
RET_VAL := #zeit_s5);
END_FUNCTION
 

Markus

Administrator
Teammitglied
Beiträge
5.253
Punkte Reaktionen
1.291
Zuviel Werbung?
->Hier kostenlos registrieren
es geht auch einfacher wenn man dem wert mit hexzahlen verodert.

2000 entspricht 1sec
1000 entspricht 100ms

also einfach den integer mit dieser zahl verodern wobei der "1000er" wert für das parameter steht wie es früher in s5 an zeit vor dem punkt gegeben wurde. also quasi für den zeitfaktor.

und dann den wert der dann im akku1 stel einfach bei der nächste zeit laden...

muss nicht genau stimmen, kann grad nicht nachschaun, bin grad heim und nicht mehr ganz nüchtern...
 

lorenz2512

Well-known member
Beiträge
3.251
Punkte Reaktionen
310
hallo, die s5 time setzt sich so zusammen: 0-11 bit zeitwert in bcd codiert,
also 0-999. bit 12+13 den zeitfaktor.bit 14+15 ohne bedeutung.
also wenn man nach bcd codiert kann man ohne bit 12+13 zu setzen von 10ms-9990ms einstellen. der befehl lautet in awl itb.
ich hoffe das hilft erstmal weiter.
 

knabi

Well-known member
Beiträge
1.070
Punkte Reaktionen
176
Zuviel Werbung?
->Hier kostenlos registrieren
Heißt das, daß ich mit Bit 12/13 den Faktor von "ms" auf "s", "min" oder "h" umstellen kann? Und wenn ja: 12 und 13 =1 bedeutet Stunde?
Beispiel:

Ich möchte einen Wert von 1-99 Stunden vom Bediener vorgeben lassen, der liegt in einem DB. Standardmäßig koppelt mir STEP7 den Wert als "ms" an den Zeibaustein, wenn ich den also vorher mit "001100000000000" verunde, hätte ich den entsprechenden Wert in Stunden?

Gruß

Holger
 

Rainer Hönle

Well-known member
Beiträge
5.665
Punkte Reaktionen
989
Dort wird der Zeitfaktor eingestellt:
00 = 10 ms
01 = 100 ms
10 = 1000 ms = 1 s
11 = 10 s
Daraus ergibt sich eine Zeit zwischen 10 ms bis 9990 s. Dies hat nichts mit Stunden, Minuten oder Sekunden direkt zu tun.
 

knabi

Well-known member
Beiträge
1.070
Punkte Reaktionen
176
Ach ja richtig, 9990 s Maximum, da war doch was :-D ...

Da werd' ich wohl einen von den IEC-Timer nehmen, die werden im übrigen bei den SIEMENS-Kursen komplett links liegengelassen ;).

Gruß

Holger
 
Oben