Zeit mit Zähler stoppen

Trust1981

Level-1
Beiträge
14
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
1.CPU TYP 315-2DP , 16*DI/DO, 2*12bit AI
2. Step7 V5
3. WinCC flexible V 5.4


Hallo!

Ich möchte die Zeit stoppen die von betätigen von e 0.1 bis erreichen eines Initiators A 2.1 vergeht. Die Zeitangabe mit einer Komastelle reicht.

Hab das mal wie folgt probiert:

E0.1 setzt nen Vorwärtszähler der den Takt von Taktmerker 100.0 bekommt (0,1s).

Am dezimalausgang des Zählers schreib ich den Zählwert in MW 2.
MW 2 teile ich durch 10 um wieder auf den Wert in sekunden zu kommen.

Leider ist MW 2 nur ein INT und ich kann keine Kommazahlen zeigen und auch nur mit INT rechnen.


Ist es möglich MW 2 mit ITD in MD 2 zu schreiben um mit real zahlen weiterzurechnen und diese ggf. darzustellen?

Muss ich vllt. vor den rechenfunktionen Bitschieben in MD 2, um an den Wert z.B. bei 23 Takten; 2,3 s zu kommen?

Würd mich sehr über Antworten, Anregungen freuen.
 
Hallo Trust,

ich versuche eigentlich immer auf Taktmerker zu verzichten um meine Programmteile auch wieder für andere Projekte wiederzuverwerten ohne dann die halbe Hardwarekonfiguration wieder über den Haufen zu werfen müssen.

Im OB1 hast du ja in der TEMP-Schnittstelle verschiedene Variablen u.a. auch eine, die sich #OB1_PREV_CYCLE nennt. Diese gibt dir die Zeit in ms des letzten Durchlaufs des OB1 an.

Also wenn du das dann so machst:
Code:
NW1: Initialisieren
UN    M 0.0 // Hilfsmerker Flanke
U     E 0.1 // dein Eingang
=     M 0.1 // Flanke
 
U     E 0.1 // dein Eingang
=     M 0.0 // Hilfsmerker Flanke
 
U     M 0.1 // Flanke
UN    A 2.1 // dein Ausgang
SPBN  M001
L     L#0
T     MD 4 // Zeit auf 0 setzen
M001: NOP 0
 
NW2: Zählen
U     E 0.1 // dein Eingang
UN    A 2.1 // dein Ausgang
SPBN  M002 // springen wenn VKE <> 1
L     #OB1_PREV_CYCLE // Zykluszeit
ITD // Int in DInt wandeln
L     MD 4 // Zeit
+D // addieren
T     MD 4 // wieder auf MD zurückschreiben
M002: NOP 0
 
NW3: Zähler in REAL konvertieren
L     MD 4
DTR
L     1000.0
/R
T     MD 8

Dann hast du im MD 4 deine Zeit in ms und im MD 8 deine Zeit in Sekunden als Gleitpunktzahl.
Die Konvertierung in eine Gleitpunktzahl musst du aber nicht machen, da es im WinCC flex im Darstellungsformat einfach hingehen kannst und dort z.B. "9999,9" eingeben kannst, dann konvertiert das WinCC deine Zahl automatisch in eine Komazahl mit einer Nachkommastelle.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, welche Zeiten sind denn zu erwarten?
Wenn ob35 noch nicht verwendet wird, könnte man diesen zB. auf 100ms stellen und jeden Aufruf zwischen Start und Stopp hoch zählen und hat so gleich den Wert in 0,1 Sekunden – Raster.
Andere Möglichkeit ist das Lesen der Systemzeit bei Start und Stopp und gegeneinander verrechnen.
 
Danke für deine Hilfe!!!

Habs Folgendermaßen im OB 1 gelöst, siehe Anhang

Mfg Trust

Hallo Trust,

ich versuche eigentlich immer auf Taktmerker zu verzichten um meine Programmteile auch wieder für andere Projekte wiederzuverwerten ohne dann die halbe Hardwarekonfiguration wieder über den Haufen zu werfen müssen.

Im OB1 hast du ja in der TEMP-Schnittstelle verschiedene Variablen u.a. auch eine, die sich #OB1_PREV_CYCLE nennt. Diese gibt dir die Zeit in ms des letzten Durchlaufs des OB1 an.

Also wenn du das dann so machst:
Code:
NW1: Initialisieren
UN    M 0.0 // Hilfsmerker Flanke
U     E 0.1 // dein Eingang
=     M 0.1 // Flanke
 
U     E 0.1 // dein Eingang
=     M 0.0 // Hilfsmerker Flanke
 
U     M 0.1 // Flanke
UN    A 2.1 // dein Ausgang
SPBN  M001
L     L#0
T     MD 4 // Zeit auf 0 setzen
M001: NOP 0
 
NW2: Zählen
U     E 0.1 // dein Eingang
UN    A 2.1 // dein Ausgang
SPBN  M002 // springen wenn VKE <> 1
L     #OB1_PREV_CYCLE // Zykluszeit
ITD // Int in DInt wandeln
L     MD 4 // Zeit
+D // addieren
T     MD 4 // wieder auf MD zurückschreiben
M002: NOP 0
 
NW3: Zähler in REAL konvertieren
L     MD 4
DTR
L     1000.0
/R
T     MD 8
Dann hast du im MD 4 deine Zeit in ms und im MD 8 deine Zeit in Sekunden als Gleitpunktzahl.
Die Konvertierung in eine Gleitpunktzahl musst du aber nicht machen, da es im WinCC flex im Darstellungsformat einfach hingehen kannst und dort z.B. "9999,9" eingeben kannst, dann konvertiert das WinCC deine Zahl automatisch in eine Komazahl mit einer Nachkommastelle.
 

Anhänge

  • 1.jpg
    1.jpg
    214,6 KB · Aufrufe: 41
  • 2.jpg
    2.jpg
    143,7 KB · Aufrufe: 29
Datum_uhrzeit ist eine Temporäre Variable vom Typ Date_and_time.

SFC1 findest du in der Bibliothek -> Standard Library -> System Function Blocks

Der FC8 ist in der Bibliothek -> IEC Function Blocks zu finden.

MD80 = Startzeit
MD90 = Endzeit
Differenzbilden und ausgeben in MD100

Gruß wolder
 

Anhänge

  • FC10.pdf
    16,7 KB · Aufrufe: 37
Zurück
Oben