SFC1 und Zeitformate

mariob

Level-3
Beiträge
2.052
Reaktionspunkte
276
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe mich ein wenig festgefressen, stehe im Dschungel und sehe keinen Weg, also:
Der SFC 1 CPU Uhr auslesen liefert mir eine 64 bit Zeitangabe mit ms Genauigkeit. Wenn ich also eine Zeitdifferenz ermitteln möchte rufe ich diesen zweimal auf und subtrahiere beide erhaltenen Zeitangaben voneinander. Soweit sogut, nur ich brauche eigentlich nur die Millisekunden, wie bekomme ich die vernünftig in eine Int Variable?
Ein anderer Weg wäre die Zykluszeit der CPU, diese in der Meßphase einfach jeden Zyklus aufaddieren, nur wie ist das Ergebnis wenn der Zyklus unter einer ms bleibt? Ich vermute mal das es da nichts zum addieren gibt.....
Und zu guter letzt muß ich in einem Zeitraum Weggeberimpulse ermitteln, ich sage mal im Bereich von 10 bis 100 ms, Genauigkeit vorläufig noch unbekannt.
Da ergeben sich drei Wege, erstens ein Timer, der kleinste ist 10ms, mit einer solchen Unschärfe beim Start plus der Ungenauigkeit im Zyklus, letztere ist vernachlässigbar.
Zweitens wieder die SFC 1 Geschichte, diese würde ich favorisieren, sofern nicht Variante 3 mit der Zykluszeitaddition funktionieren sollte.
Oder gibt es noch andere Möglichkeiten, die vielleicht sogar eleganter sind?

Gruß
Mario
 
Hallo Mario,
wie du schon schreibst gibt es da mehrere Möglichkeiten.

Um bei der Systemuhr zu bleiben : nur mit den ms zu arbeiten nützt dir nichts wenn du einen Sekundenübertrag hast. Du könntest also die Systemuhr mit dem genannten SFC auslesen und den ausgelesenen Wert mit dem Baustein aus der Siemens-Bibliothek DT_to_TOD umwandeln. Nun hast du einen DINT mit dem du dann rechnen kannst.

Die nächste Möglichkeit wäre, den OB1_Date_Time (z.B.) auf gleiche Weise umzuwandeln. Das käme vom Ergebnis auf dasselbe.

Das Aufaddieren der OB1_Prev_Cycle geht auch und den Genauigkeits-Fehler, den du dort erhälst kannst du sehr wahrscheinlich auch verschmerzen. das mußt du aber entscheiden.

Kommst du so weiter ?

Gruß
Larry

Nachsatz:
Die Variante mit dem Timer scheidet für mich hier aus.

Zu der Sache mit dem Weggeber müßtest du m.E. noch etwas mehr schreiben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Der SFC 1 CPU Uhr auslesen liefert mir eine 64 bit Zeitangabe mit ms Genauigkeit.
Das ist aber bestimmt nicht so wie du denkst. Also du bekommst keinen 64 Bit ms Wert, sondern eine Struktur in der für die Einzelnen Werte (Tag, Monat, Jahr, Stunde, Minute, Sekunde)
 
Was musst du eigentlich erreichen?
Wenn ich das richtig verstanden habe, geht darum Impulse während einer Zeit zu ermitteln.
Da ist es doch einfacher, du hast ein festes Zeitraster (Zeit-OB)
Oder gleich eine entsprechende Karte, kommt auf die Werte an.

Gruß Roland
 
Hallo,
also, es geht darum die mechanischen Verzögerungszeiten z.B. eines Ventils und Zylinders von der Aktivierung des Ausganges bis zum Erreichen der Endlage zu messen.
Aus diesen Werten müssen dann Vorhaltewege errechnet werden. Thats all.
@ Jochen Kühner, das mit der Struktur habe ich schon befürchtet, es gibt auch keinen mir bekannten SFC, der mir die ms extrahiert. Ich hatte hier irgendwo gelesen, das das wohl ein DINT sei, das war mir aber unlogisch (wozu gibt es dann das Zeitformat überhaupt).
@LL, wie beschrieben, wenn ich unter einer ms Zykluszeit bleibe (wovon auszugehen ist) erhalte ich doch sicherlich 0 als Zykluszeit und das brauche ich nicht zu addieren oder liege ich da falsch?

Gruß
Mario
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Mario,
das Siemens-Ding, das dir die DT in TOD umrechnet ist der FC8 aus der Standard-Bibliothek-IEC-Funktion-Blocks.

Und ... wenn du unter 1 ms bleibst (was ich aus deiner Beschreibung als eher unwahrscheinlich ansehe) dann hast du so oder so verloren, da du auf keinem Weg irgendetwas, das kleiner als 1 ms ist, aus der systemuhr heraus bekommst - so oder so nicht.

Gruß
Larry
 
mit der fc 34 kann man direkt 2 dt vergleichen.
macht auch deshalb sinn, wenn man man den messzyklus mist der den nächsten tag einleutet

Code:
[FONT=Arial]SB_DT_DT [/FONT][FONT=Arial]FC34 [/FONT][FONT=Arial]Subtract DT - DT; subtrahiert zwei Zeitpunkte (DT) liefert eine Zeitdauer (TIME)[/FONT]
 
Zurück
Oben