Wert eines Timers in INT oder der gleichen wandeln

CrazyCat

Level-1
Beiträge
683
Reaktionspunkte
9
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielleicht stehe ich ja nur auf der Leitung, aber ich bekomme es nicht hin den Wert eines Timers in eine Int - Variable oder etwas ähnliches zu wandeln.

Es soll ein INT - Wert (Gasdurchfluss/Sekunde) mit der gestoppten Zeit eines Timers multipliziert werden.

Das man einen Timer nicht direkt mit dem INT - Wert multiplizieren kann ist mir schon klar, darum werde ich den Wert irgendwie in einen anderen Variablentyp konvertieren müssen, nur wie?

Die Millisekundenangaben dürfen nicht verloren gehen, sonst wird das Ergebnis zu ungenau.
 
Hallo bin mir nicht ganz sicher aber Timer sind in BCD richtig?

Da wäre die umwandlung so meines wissens

L XXX
BTI
T XXX

hoffe das ist kein blödsinn was ich da erzähle


In der hilfe sollten aber alle konvertierungen mit deren abkürzungen zu finden sein
 
@Adenauer
Ja aber, in dem BCD Wert des Timers verstecken sich 3 Stellen, mit dem Zeitwert, und eine mit der Zeitbasis.
0 = 10 ms
1 = 100 ms
2 = 1 s
3 = 10 s

Mfg
Manuel
 
Der FC33 bringt mich irgendwie nicht weiter, damit erhalte ich das Format TIME.

Mit dem Format kann ich immer noch nicht rechnen.


Wie funktioniert das mit den Bytes, wo ist die Zeitbasis und wo die Werte?
 
Oh, das war mir neu.

Also das Ding in Time wandeln und in eine REAL oder INT - Variable konvertieren, dann sollte es mit der Rechnung klappen, richtig?

Den Durchfluss muss ich natürlich auch vorher in eine dementsprechende Variable konvertieren.
 
Eine Frage hätte ich noch:

Fällt jemand eine elegantere Lösung für das Stoppen der Zeit ein, als jene die ich anwende?

Momentan läuft das so:

Die aktuelle Zeit und das Datum werden im OB1 gelesen und in einem DB im Format date_and_time abgelegt.

Bei einer positiven Flanke eines Merkers wird dieser Eintrag mit BLK_MOV in die Variable Start_Zeit geschrieben.
Bei der negativen Flanke des Merkers in die Variable End_Zeit.

Ist der Merker nicht gesetzt werden FC34 die beiden Werte voneinander abgezogen und in eine Variable des Typs TIME das Ergebnis abgelegt.

Das Ergebnis wird anschließend in eine Hilfsvariable des DINT geschrieben mit der anschließend weiter gerrechnet werden kann.

Geht das auch einfacher?

Zuvor hatte ich eine ähnliche Lösung mit 2 Timern, aber die war noch komplizierter.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da stell ich mir gerade die Frage in welchem zu erwarteten
Stopp-Zeitrahmen bewegen wir uns bei Deiner Frage und
wie genau muss das sein ?

Ich baue mir für sowas immer einen Taktgeber in einem
gewünschtem Zeittakt. Zum Beispiel 100ms.

Jetzt zähle ich einfach, wie oft der Takt in der zu stoppenden
Zeit da war.
Code:
//Taktgeber 100ms
 
L S5T#100ms
 
UN Takt
SE Timer_Takt_Aus
 
U Timer_Takt_Aus
S Takt
 
U Takt
SE Timer_Takt_Ein
 
U Timer_Takt_Ein
R Takt
 
//Stoppen
 
ON Stoppen
ON Takt
O Flanke
SPB M001
L DB1.DBW0
L 1
+I
T DB1.DBW0
 
UN Flanke
S Flanke
M001: NOP 0
 
UN Takt
U Flanke
R Flanke

So Zähle ich, so lange der Stoppen Merker 1 ist die Anzahl
der Impulse. Für mich hat das bisher immer ausgereicht.
Ist natürlich jetzt noch ohne jegliche Überlauf Sicherung und
falls ein Wort nicht reicht für die Anzahl nehm ich ein DW.
Gruß.

ToBo
 
Eine Frage hätte ich noch:

Fällt jemand eine elegantere Lösung für das Stoppen der Zeit ein, als jene die ich anwende?

Momentan läuft das so:

Die aktuelle Zeit und das Datum werden im OB1 gelesen und in einem DB im Format date_and_time abgelegt.

Bei einer positiven Flanke eines Merkers wird dieser Eintrag mit BLK_MOV in die Variable Start_Zeit geschrieben.
Bei der negativen Flanke des Merkers in die Variable End_Zeit.

Ist der Merker nicht gesetzt werden FC34 die beiden Werte voneinander abgezogen und in eine Variable des Typs TIME das Ergebnis abgelegt.

Das Ergebnis wird anschließend in eine Hilfsvariable des DINT geschrieben mit der anschließend weiter gerrechnet werden kann.

Geht das auch einfacher?

Zuvor hatte ich eine ähnliche Lösung mit 2 Timern, aber die war noch komplizierter.

So ähnlich mach ich das auch. Damit messe ich die Taktzeit meiner Maschinen.
 
Ich zähle auch bei den meisten zeiten einfach takte hoch. Nur das ich keine Zeit dazu verwende sondern einfach Taktmerker
 
Zurück
Oben