S5 zeiten addieren

Papschtler

Level-1
Beiträge
15
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe folgendes Problem.
Ich will eine variable Taktzeitüberwachung erstellen. Ich habe einen Timer für die Taktzeit. Zusätzlich habe ich aber in mehreren Schritten noch prüfzeiten die ich addieren will um damit den Zeitwert des Taktzeittimers zu füttern.
gibts da irgend ein baustein der S5t# +S5t# rechnen kann oder so??

mfg
Stefan
 
Hallo,
die S5Time ist BCD-Codiert.
Die obersten 4 Bit beinhalten den Multiplikator (3 = *10s , 2 = *1s , 1 = *100ms , 0 = *10ms) die unteren 12Bit den Zeitwert (0 .. 999). Den mußt du dir umrechnen - dann kannst du alle weiteren Rechen-Operationen machen und dananch wieder zurück-rechnen.
Macht ein bißchen Arbeit - ist aber kein Hexenwerk.

Eine andere Möglichkeit wäre mit den IEC-Timern (SFB3 - 5) zu arbeiten. Diese verwenden als Zeitbasis Time und dies ist einfach in ms codiert. Den Wert hiervon kannst du einfach so aufaddieren (etc.).

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde das auch auf keinen Fall mit S5-Zeiten machen. Wenn schon dann mit Ton, siehe Larry.

Oder du nimmst die Im OB 1 oder mittels SFC auslesbare SPS-Zeit.
 
Danke für die schnelle antwort.
Das mit den IEC-Timern hab ich mir auch schon überlegt. Gibts ne möglichkeit die S5-BCD Zeit ins normale "Time" format zu wandeln?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die schnelle antwort.
Das mit den IEC-Timern hab ich mir auch schon überlegt. Gibts ne möglichkeit die S5-BCD Zeit ins normale "Time" format zu wandeln?

Ich weiß zwar nicht, warum du den Umweg über S5Time gehen willst,
aber FC33 aus den IEC-Functions der Standard-Library würde diese Wandlung können.

Mfg
Manuel
 
So kannst du dir deine S5-Zeit in Millisekunden umwandeln:

Code:
IN:
s5tim: S5TIME
TEMP:
timebase: BYTE
bcdtime: WORD
multi: WORD
RETURN:
RET_VAL: DWORD
 
Netzwerk 1: Zeitbasis
      L    #s5tim
      UW  W#16#3000
      SRW 12
      T   #timebase
 
Netzwerk 2: BCD-Zeit
      L   #s5tim
      UW  W#16#FFF
      BTD
      T   #bcdtime
 
Netzwerk 3: Multiplikator
      L   1
      T   #multi
      L   #timebase
      SPL MFFF
      SPA M000
      SPA M001
      SPA M002
      SPA M003
MFFF: NOP 0
M003: L   10
      L   #multi
      *D
      T   #multi
M002: L   10
      L   #multi
      *D
      T   #multi
M001: L   10
      L   #multi
      *D
      T   #multi
M000: L   10
      L   #multi
      *D
      T   #multi
 
Netzwerk 4: Zeit ausrechnen
      L   #multi
      L   #bcdtime
      T   #multi
 
Selbes Problem

Hallo.

Ich habe grade die selbe Thematik. Hintergrund bei mir ist eine Stauüberwachung, welche sich aus einem Timer mit einer variablen Zeit zusammensetzt. Diese variable Zeit soll gebildet werden aus der Materiallänge und der Bandgeschwindigkeit. Die Pads haben eine bestimmte Länge und je nach Bandgeschwindigkeit brauchen diese unterschiedlich lange, bis sie "durch" sind. Hier wird dann etwas "Reservelänge" dazuaddiert und fertig ist die Zeit für den Timer.

Folgende Umsetzung habe ich geplant:
Ich errechne mit eine "Zeit" in ms als Datentyp int aus Padlänge und Geschwindigkeit.

Formel: Zeit = Weg(bzw. Länge) / Geschwindigkeit

Das Ergebnis auf INT gecastet (REAL_TO_INT) und diesen Wert dann als Laufvariable für eine FOR Schleife genommen:

1. Versuch in S7-SCL mit Datentypen S5TIME
PHP:
...
Time_int : INT;
Zeit : S5TIME;
...
FOR i:=1 TO Time_int DO
   Zeit := Zeit + T#1ms;
END_FOR;
Beim Compilieren gibt es dann eine Fehlermeldung: Unzulässige Operandentypen ...

Nimmt man aber als Datentyp IEC TIME also

PHP:
...
Zeit : TIME;
...
dann funktioniert es.

:ROFLMAO: Jetzt habe ich aber grade gelesen, dass der Datentyp TIME eigentlich ein Wert in ms ist. Dann könnte ich mir ja die FOR Schleife eigentlich sparen und das direkt zuweisen. Aber da werde ich bestimmt einen TYP Konflikt angemeckert bekommen. Vielleicht nach dem Mittag mal probieren ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich weiß jetzt nicht, was deine Frage war ... aber :
du kannst schon mal keinen Datentyp S5Time (Datenbreite 16Bit - BCD-Codiert) mit einem Time (Datenbreite 32Bit) direkt verrechnen. Auch eine Typ-Umwandlung wird dir da nicht weiter helfen. Das Einzige was geht ist : S5Time in Time umrechnen, dann alles addieren und hinterher wieder S5Time davon machen. Die beiden Wandler gibt es allerdings nicht als Befehl, die mußt du dir schon selbst erstellen ... oder auf das S5Time verzichten und gleich mit den IEC-Timern arbeiten (SFB3 .. 5).

Gruß
LL
 
Zurück
Oben