-> Hier kostenlos registrieren
Guten Morgen liebe Community,
hab ein kleines Problem das ich nicht lösen kann. Im Prinzip geht es darum die Ticks zwischen den Zyklen vom OB1 zu messen. Genauer will ich den Minimalen Zyklus den Maximalen und den Mittelwert raus lesen natürlich zur Laufzeit.
Hier mal der Code Abschnitt:
alle Cycles sind in ULint.
Über die Systemfunktion RD_SYS_T lass ich mir die Zeit raus geben Convertiere die Zeit in ULINT-Datentypen und fasse dann Jahre Monate Tage... Sekunden Milli Mico zu einer langen ULint NANO_Sekunden Variable --> GetUnixTime zusammen.
Die Zyklus Zeit im OB1 beträgt minimal 1ms und max. 150ms
Das Problem das ich habe ist, dass nach dem 2,3,4 oder 5 Zyklus die prev_Cycle größer als act_Cycle ist. Was ja garnicht passieren dürfte. Weiter würde dadurch ein Overflow durch act_Cycle - prev_Cycle entstehen. Der Overflow wird in Max_delta gespeichert und zählt von da an als größter Wert.
Hat jemand eine Idee woran das liegen könnte?
Hier nochmal ein Screenshot falls es weiterhilft:

Lieben Gruß
Yadid
hab ein kleines Problem das ich nicht lösen kann. Im Prinzip geht es darum die Ticks zwischen den Zyklen vom OB1 zu messen. Genauer will ich den Minimalen Zyklus den Maximalen und den Mittelwert raus lesen natürlich zur Laufzeit.
Hier mal der Code Abschnitt:
alle Cycles sind in ULint.
Über die Systemfunktion RD_SYS_T lass ich mir die Zeit raus geben Convertiere die Zeit in ULINT-Datentypen und fasse dann Jahre Monate Tage... Sekunden Milli Mico zu einer langen ULint NANO_Sekunden Variable --> GetUnixTime zusammen.
Die Zyklus Zeit im OB1 beträgt minimal 1ms und max. 150ms
Code:
"Unixtime_ext"(Unixtime_nano=>#GetUnixTime,
Has_Error=>#HasError);
IF #First_Cycle = TRUE THEN
#TestBeginn := #GetUnixTime;
#prev_Cycle := #GetUnixTime;
#mainOB_counter := 0;
#Max_delta_intern := 0;
#Min_delta_intern := 999999999;
#First_Cycle := FALSE;
ELSE
#act_Cycle := #GetUnixTime;
#delta := #act_Cycle - #prev_Cycle;
#mainOB_counter := #mainOB_counter + 1;
IF (#delta > #Max_delta_intern) THEN
#Max_delta_intern := #delta;
END_IF;
IF ((#delta < #Min_delta_intern)) THEN
#Min_delta_intern := #delta;
END_IF;
#prev_Cycle := #act_Cycle;
Das Problem das ich habe ist, dass nach dem 2,3,4 oder 5 Zyklus die prev_Cycle größer als act_Cycle ist. Was ja garnicht passieren dürfte. Weiter würde dadurch ein Overflow durch act_Cycle - prev_Cycle entstehen. Der Overflow wird in Max_delta gespeichert und zählt von da an als größter Wert.
Hat jemand eine Idee woran das liegen könnte?
Hier nochmal ein Screenshot falls es weiterhilft:

Lieben Gruß
Yadid