Hallo,
da ich einen sehr hohen "load average" habe und mit der Firmware V3 zusätzlich längere Busantwortszeiten hinzugekommen sind, habe ich mich damit beschäftigt, wo der Performancefresser in meinem Programm herkommt.
Um die Zykluszeit zu berechnen habe ich den Code aus dem Handbuch verwendet. Habe ich das richtig verstanden, dass Restzeit jede ms dekrementiert wird?
Wenn die Zykluszeit einen bestimmten Wert überschritten hat, sende ich auf den Bus.
Ich habe mit einem "leeren" Programm begonnen und nach und nach Funktionen hinzugefügt, um dem Performancefresser auf die Spur zu kommen. Dabei ist mir aufgefallen, dass es immer genau nach 5min, synchron zur aktuellen Uhrzeit, zu recht hochen Peaks in der Zykluszeit kommt, z.B. 16:05 Uhr, 16:10 Uhr, 16:15 Uhr, 16:20 Uhr usw.
Mir ist nicht klar, wo diese Peaks herkommen. Ich habe in meinem Programm nichts, was alle 5 min irgendetwas bestimmtes ausführt.
Gibt es in der Firmware vielleicht irgendetwas mit dieser Zeitbasis?
Gruß Markus
da ich einen sehr hohen "load average" habe und mit der Firmware V3 zusätzlich längere Busantwortszeiten hinzugekommen sind, habe ich mich damit beschäftigt, wo der Performancefresser in meinem Programm herkommt.
Um die Zykluszeit zu berechnen habe ich den Code aus dem Handbuch verwendet. Habe ich das richtig verstanden, dass Restzeit jede ms dekrementiert wird?
Code:
// Die erste Zyklus kann etwas länger dauern ... if afterc(after(systemstart(),30000u64), Max, Restzeit) then { StoppZeit=0u64; } endif if change (Restzeit) then { MaxZyklusZeit = max(StoppZeit - Restzeit - PerformanceZeit,MaxZyklusZeit); MinZyklusZeit = min(StoppZeit - Restzeit - PerformanceZeit,MinZyklusZeit); ZyklusZeit = (StoppZeit - Restzeit - PerformanceZeit); StoppZeit = Restzeit; } endif
Code:
if change(ZyklusZeit) and ((ZyklusZeit > 150u64) and (ZyklusZeit < 200u64))then write("150ms-11/0/0",EIN) endif if change(ZyklusZeit) and ((ZyklusZeit > 200u64) and (ZyklusZeit < 250u64))then write("200ms-11/0/5",EIN) endif
Mir ist nicht klar, wo diese Peaks herkommen. Ich habe in meinem Programm nichts, was alle 5 min irgendetwas bestimmtes ausführt.
Gibt es in der Firmware vielleicht irgendetwas mit dieser Zeitbasis?
Gruß Markus
Kommentar