ABER - jetzt habe ich den wirklichen Grund für die erhöhte CPU-Last gefunden.
Diesen Umstand sollten sich alle mal zu Gemüte führen (und zukünftig beachten), die mit PHP "rummachen".
Alle, die das Makro von shen in der ursprünglichen Form benutzen, und die "Ausführung bei Empfang" angewählt haben und dadurch Probleme bzgl. CPU-Last haben/hatten, sollten das Makro folgendermaßen ändern (Erklärung folgt unten):
Code: Alles auswählen
Windchill.Temp := KS300_Temp
Windchill.Wind := KS300_Wind
<?
$t = str_replace(",", ".", $V_Windchill_Temp);
$w = str_replace(",", ".", $V_Windchill_Wind);
if ($w >= 5) {
$wc = round(13.12 + 0.6215 * $t - 11.37 * pow($w, 0.16) + 0.3965 * $t * pow($w, 0.16), 1);
} else {
$wc = $t;
}
$Windchill = str_replace(".", ",", $wc);
?>
Der Grund für die erhöhte CPU-Last mit Original-Makro:
- Am Anfang eines PHP-Scripts werden alle benutzten homeputer-Objekte und homeputer-Variablen in interne PHP-Variablen kopiert.
- Am Ende des PHP-Scripts werden alle benutzten homeputer-Objekte und homeputer-Variablen wieder mit dem Wert der internen PHP-Variablen überschrieben. Soweit - sogut! Das war bekannt.
- Aber: Beim Zurückschreiben der Werte wird sofort das zugehörige Makro des jeweiligen Objektes (in dem Fall KS300_Temp und KS300_Wind) ausgeführt, wenn in diesem die Option "Ausführung bei Empfang" angekreuzt ist! Auch wenn sich weder der reale Wert geändert hat noch wirklich ein Telegramm hereingekommen ist. (Ist dies von Contronics so gewollt?)
- Dadurch ruft sich das Makro immer wieder selbst auf.
(Bei der Option "Ausführen bei Änderung" wäre mir das sofort klar gewesen - aber "Ausführen bei Empfang" klingt bei mir irgendwie anders...)
- Abhilfe: Die Objekte, bei denen "Ausführen bei Empfang" angewählt ist, müssen vorher in andere homeputer-Variablen umkopiert werden!
Was ich dennoch nicht verstehe: wie und wann befreit sich die Studiosoftware von dieser Endlosschleife?! - Irgendwann macht sie's jedenfalls.
Ich denke nicht weiter drüber nach!
Gruss
Thomas