Timeout bei PHP-Scripts und Anweisung Schreibedatei
Moderator: Co-Administratoren
-
- Beiträge: 954
- Registriert: 18.07.2006, 15:58
Re: Timeout bei PHP-Scripts und Anweisung Schreibedatei
Wir konnten den Fehler beim Beenden reproduzieren und beseitigen (trat mehr oder weniger zufällig je nach Speicherbelegung bei der Speicherfreigabe am Programmende auf).
Bei der Benutzung von PHP-Scripts konnte es passieren, dass durch die Änderung eines Sensorwertes im PHP-Script die Ausführung des entsprechenden Sensormakros aktiviert wurde, das konnte dann je nach Programmstruktur zu einer Endlosschleife führen. Das Problem war allerdings schon in der letzten Beta-Version hier im Forum beseitigt.
Die aktuelle berichtigte Version steht auf den normalen Downloadseiten unter:
http://www.contronics.de/html/download.html
Bei der Benutzung von PHP-Scripts konnte es passieren, dass durch die Änderung eines Sensorwertes im PHP-Script die Ausführung des entsprechenden Sensormakros aktiviert wurde, das konnte dann je nach Programmstruktur zu einer Endlosschleife führen. Das Problem war allerdings schon in der letzten Beta-Version hier im Forum beseitigt.
Die aktuelle berichtigte Version steht auf den normalen Downloadseiten unter:
http://www.contronics.de/html/download.html
Mit freundlichem Gruss
CL-control - Ralph Krapoth
http://www.cl-control.de
Bei Fragen bitte keine PMs, sondern mail an technik@cl-control.de
PMs werden nicht regelmässig kontrolliert und und können unbeantwortet bleiben.
CL-control - Ralph Krapoth
http://www.cl-control.de
Bei Fragen bitte keine PMs, sondern mail an technik@cl-control.de
PMs werden nicht regelmässig kontrolliert und und können unbeantwortet bleiben.
Re: Timeout bei PHP-Scripts und Anweisung Schreibedatei
Das Ändern des Verhaltens bei Änderung eines Sensorwertes aus einem PHP-Script heraus in der letzten Download-Version hat bei mir zu massiven Problemen geführt.
Ich lese in einem PHP-Script Werte mehrerer externer Nicht-FHZ-Sensoren und weise diese im PHP-Script entsprechenden virtuellen Temperatursensoren in der Studio-Software zu (das PHP-Script läuft selbstverständlich NICHT im Modul des virtuellen Sensors). Da üblicherweise bei Sensoren (egal ob physischen oder virtuellen) bei Änderung des Wertes eine Aktion erfolgen soll, bewirkt das Verhindern der Aktion "Ausführen bei Änderung" in diesem Fall, dass die Änderung eines Wertes im Projekt nicht erkannt wird.
Wie in einigen Beiträgen vorher von contronics-RK begründet, soll durch diese Verhaltensänderung das Auftreten einer Endlosschleife verhindert werden. Meiner Meinung nach ist aber eine Endlosschleife das Ergebnis eines Fehlers in der Programmlogik und durch Ändern der Programmierung zu beheben, nicht durch Anpassung des Verhaltens der Programmiersprache. Um mein Projekt mit dieser neuen Version korrekt zum Laufen zu bringen, wäre zusätzlicher, unnötiger Programmieraufwand nötig, was meiner Meinung nach nicht der Sinn der Weiterentwicklung der Studio-Software sein kann und außerdem eine weitere Fehlerquelle bedeutet.
Ich glaube nicht, dass ich der einzige bin, bei dem dieses "Update" gravierende unangenehme Nebenwirkungen hat und würde mir dringend wünschen, dass diese Änderung wieder rückgängig gemacht wird.
mfg copros
Ich lese in einem PHP-Script Werte mehrerer externer Nicht-FHZ-Sensoren und weise diese im PHP-Script entsprechenden virtuellen Temperatursensoren in der Studio-Software zu (das PHP-Script läuft selbstverständlich NICHT im Modul des virtuellen Sensors). Da üblicherweise bei Sensoren (egal ob physischen oder virtuellen) bei Änderung des Wertes eine Aktion erfolgen soll, bewirkt das Verhindern der Aktion "Ausführen bei Änderung" in diesem Fall, dass die Änderung eines Wertes im Projekt nicht erkannt wird.
Wie in einigen Beiträgen vorher von contronics-RK begründet, soll durch diese Verhaltensänderung das Auftreten einer Endlosschleife verhindert werden. Meiner Meinung nach ist aber eine Endlosschleife das Ergebnis eines Fehlers in der Programmlogik und durch Ändern der Programmierung zu beheben, nicht durch Anpassung des Verhaltens der Programmiersprache. Um mein Projekt mit dieser neuen Version korrekt zum Laufen zu bringen, wäre zusätzlicher, unnötiger Programmieraufwand nötig, was meiner Meinung nach nicht der Sinn der Weiterentwicklung der Studio-Software sein kann und außerdem eine weitere Fehlerquelle bedeutet.
Ich glaube nicht, dass ich der einzige bin, bei dem dieses "Update" gravierende unangenehme Nebenwirkungen hat und würde mir dringend wünschen, dass diese Änderung wieder rückgängig gemacht wird.
mfg copros
Re: Timeout bei PHP-Scripts und Anweisung Schreibedatei
Hallo copros,
ich sehe die Änderung auch kritisch. Zwar gibt es jetzt die unter diesem Beitrag beschriebenen Probleme nicht mehr, allerdings war es auch nicht mein Wunsch, das wirkliche Änderungen nun gar nix mehr bewirken.
Aus meiner Sicht müsste beim Zurückschreiben der PHP-Variablen in die Studio-Objekte überprüft werden, ob sich der Wert geändert hat. Wenn ja, dann "Ausführen bei Änderung" durchführen, ansonsten nicht. Oder die PHP-Variablen in die Studio-Objekte nur dann zurückschreiben, wenn sich der Wert wirklich geändert hat.
(Mir ist schon klar, dass die Studio-Software nicht überprüfen kann, was innerhalb der PHP-Abarbeitung mit den Variablen geschieht, aber eine Überprüfung vor Zurückschreiben sollte meines Erachtens nach möglich sein.)
Gruss
Thomas
ich sehe die Änderung auch kritisch. Zwar gibt es jetzt die unter diesem Beitrag beschriebenen Probleme nicht mehr, allerdings war es auch nicht mein Wunsch, das wirkliche Änderungen nun gar nix mehr bewirken.
Aus meiner Sicht müsste beim Zurückschreiben der PHP-Variablen in die Studio-Objekte überprüft werden, ob sich der Wert geändert hat. Wenn ja, dann "Ausführen bei Änderung" durchführen, ansonsten nicht. Oder die PHP-Variablen in die Studio-Objekte nur dann zurückschreiben, wenn sich der Wert wirklich geändert hat.
(Mir ist schon klar, dass die Studio-Software nicht überprüfen kann, was innerhalb der PHP-Abarbeitung mit den Variablen geschieht, aber eine Überprüfung vor Zurückschreiben sollte meines Erachtens nach möglich sein.)
Gruss
Thomas
-
- Beiträge: 954
- Registriert: 18.07.2006, 15:58
Re: Timeout bei PHP-Scripts und Anweisung Schreibedatei
ok, wir haben jetzt folgende Modifikation gemacht, die alles abdecken sollte.
Wenn in einem PHP-Script ein Aktorwert geändert wird und die Option "Ausführung bei Änderung" aktiviert des Aktors ist, wird das Makro ausgeführt.
Wenn in einem PHP-Script ein Sensorwert geändert wird (das Ändern von Sensorwerten sollte nach Möglichkeit grundsätzlich vermieden werden, besserer Stil ist es einen geänderten Sensorwert in einem separaten Objekt oder Variablen zu speichern), kann nur die Option "Ausführung bei Empfang" des Sensors aktiviert sein. Da es sich in einem solchen Fall aber nicht um einen Empfang handelt, erfolgt auch keine Ausführung. Soll bei Änderung eines Sensorwertes eine Ausführung erfolgen, so muss diese explizit mit "Starte(Objektname)" durchgeführt werden.
Somit gelten bei Änderung von Werten durch PHP-Scripts die gleichen Bedingungen wie bei Änderung von Werten bei normaler Makroausführung, daher dürfte diese Lösung auch unter Berücksichtigung für das Verständnisses der Problematik bei Neueinsteigern die richtige sein. Wir hoffen damit sind alle zufrieden.
Das modifizierte Programm steht auf unserer normalen Downloadseite:
http://www.contronics.de/html/download.html
Wenn in einem PHP-Script ein Aktorwert geändert wird und die Option "Ausführung bei Änderung" aktiviert des Aktors ist, wird das Makro ausgeführt.
Wenn in einem PHP-Script ein Sensorwert geändert wird (das Ändern von Sensorwerten sollte nach Möglichkeit grundsätzlich vermieden werden, besserer Stil ist es einen geänderten Sensorwert in einem separaten Objekt oder Variablen zu speichern), kann nur die Option "Ausführung bei Empfang" des Sensors aktiviert sein. Da es sich in einem solchen Fall aber nicht um einen Empfang handelt, erfolgt auch keine Ausführung. Soll bei Änderung eines Sensorwertes eine Ausführung erfolgen, so muss diese explizit mit "Starte(Objektname)" durchgeführt werden.
Somit gelten bei Änderung von Werten durch PHP-Scripts die gleichen Bedingungen wie bei Änderung von Werten bei normaler Makroausführung, daher dürfte diese Lösung auch unter Berücksichtigung für das Verständnisses der Problematik bei Neueinsteigern die richtige sein. Wir hoffen damit sind alle zufrieden.
Das modifizierte Programm steht auf unserer normalen Downloadseite:
http://www.contronics.de/html/download.html
Mit freundlichem Gruss
CL-control - Ralph Krapoth
http://www.cl-control.de
Bei Fragen bitte keine PMs, sondern mail an technik@cl-control.de
PMs werden nicht regelmässig kontrolliert und und können unbeantwortet bleiben.
CL-control - Ralph Krapoth
http://www.cl-control.de
Bei Fragen bitte keine PMs, sondern mail an technik@cl-control.de
PMs werden nicht regelmässig kontrolliert und und können unbeantwortet bleiben.
Re: Timeout bei PHP-Scripts und Anweisung Schreibedatei
Danke für die rasche Reaktion, ich werde die Version morgen ausprobieren.
Re: Timeout bei PHP-Scripts und Anweisung Schreibedatei
Ich habe die letzte Version ausprobiert, die Änderung ändert leider an meinem Problem nichts.
Zur Erklärung vielleicht der Hintergrund des Ganzen: Bei Verwendung eines "echten" Temperatursensors wie z.B. HMS 100 T wird ca. alle 321 Sekunden ein Temperaturwert geliefert und kann, sofern "Ausführen bei EMPFANG" aktiviert ist, im zugehörigen Makro verarbeitet werden. Da ich für meine Anwendung Temperaturwerte in viel kürzeren Zeitabständen verarbeiten können muss, verwende ich systemfremde Sensoren, lese per PHP die gelieferten Werte von einer COM-Schnittstelle ein, weise diese dann einem virtuellen Temperatursensor mit aktiviertem "Ausführen bei ÄNDERUNG" zu und konnte dort bisher genauso wie mit einem "echten" Temperatursensor je nach empfangenem Wert programmgesteuert Aktionen setzen. Genau das geht jetzt nicht mehr, auch nicht mit der letzten Version.
Um Begriffsverwirrungen zu vermeiden hier in stark verkürzter Form ein Projekt, vielleicht wird dann einiges klarer:
Das Projekt besteht aus 3 Objekten.
Objekt 1: "LesenCOM" (Typ "Makro", aufgerufen z.B. 1 Mal je Sekunde):
Objekt 2: "vTemperatur" (Typ TempSensor, "Ausführung bei Änderung" aktiviert)
Objekt 3: "zMsg" (Typ Zeichen)
Mit den älteren Versionen wurde der Text jede Sekunde aktualisiert, das passiert jetzt überhaupt nicht mehr.
Natürlich könnte man im Modul "LesenCOM" den Wert einer lokalen Variable zuweisen und dann nach dem PHP-Teil mit "normalem" Code dem virtuellen Sensor zuweisen, das funktioniert auch tadellos. Das bedeutet aber einen unnötigen Zwischenschritt und somit eine unnötige Fehlerquelle, noch dazu, wo ich nicht einen derartigen Sensor in Verwendung habe, sondern viele davon.
Ich hoffe, hiermit mein Problem etwas deutlicher dargestellt zu haben.
MfG copros
Zur Erklärung vielleicht der Hintergrund des Ganzen: Bei Verwendung eines "echten" Temperatursensors wie z.B. HMS 100 T wird ca. alle 321 Sekunden ein Temperaturwert geliefert und kann, sofern "Ausführen bei EMPFANG" aktiviert ist, im zugehörigen Makro verarbeitet werden. Da ich für meine Anwendung Temperaturwerte in viel kürzeren Zeitabständen verarbeiten können muss, verwende ich systemfremde Sensoren, lese per PHP die gelieferten Werte von einer COM-Schnittstelle ein, weise diese dann einem virtuellen Temperatursensor mit aktiviertem "Ausführen bei ÄNDERUNG" zu und konnte dort bisher genauso wie mit einem "echten" Temperatursensor je nach empfangenem Wert programmgesteuert Aktionen setzen. Genau das geht jetzt nicht mehr, auch nicht mit der letzten Version.
Um Begriffsverwirrungen zu vermeiden hier in stark verkürzter Form ein Projekt, vielleicht wird dann einiges klarer:
Das Projekt besteht aus 3 Objekten.
Objekt 1: "LesenCOM" (Typ "Makro", aufgerufen z.B. 1 Mal je Sekunde):
Code: Alles auswählen
<?
//* Einlesen eines Wertes von einer COM-Schnittstelle,
//* hier simuliert durch eine Zufallszahl, zuweisen
//* dieses Wertes an einen virtuellen Temperatursensor
$V_vTemperatur = rand( 18, 22 );
?>
Code: Alles auswählen
** Verarbeitung je nach Temperaturwert, hier nur einfache Textausgabe
wenn vTemperatur > 20,0 dann
zMsg := "T ist über 20°"
sonst
zMsg := "T ist kleiner gleich 20°"
endewenn
Code: Alles auswählen
** Kein Code, dient nur der Zeichenausgabe
Natürlich könnte man im Modul "LesenCOM" den Wert einer lokalen Variable zuweisen und dann nach dem PHP-Teil mit "normalem" Code dem virtuellen Sensor zuweisen, das funktioniert auch tadellos. Das bedeutet aber einen unnötigen Zwischenschritt und somit eine unnötige Fehlerquelle, noch dazu, wo ich nicht einen derartigen Sensor in Verwendung habe, sondern viele davon.
Ich hoffe, hiermit mein Problem etwas deutlicher dargestellt zu haben.
MfG copros
-
- Beiträge: 954
- Registriert: 18.07.2006, 15:58
Re: Timeout bei PHP-Scripts und Anweisung Schreibedatei
ok, es war auch noch nicht korrekt in der letzten Version, bei virtuellen Objekten wurde die "Ausführungs bei Änderung"-Option nicht berücksichtigt - das war so nicht beabsichtigt. Wir haben das nun berichtigt.
Nur bei Hardware-Objekten vom Typ Sensor wird die "Ausführung bei Empfang"-Option durch Änderungen von PHP-Scripten nicht aktiviert.
Wenn Sie virtuelle Sensoren haben, sollte Ihre Anwendung mit dieser Änderung wieder in gewohnter Form laufen.
Die aktualisierte Version Release 80325 steht schon im Internet.
Nur bei Hardware-Objekten vom Typ Sensor wird die "Ausführung bei Empfang"-Option durch Änderungen von PHP-Scripten nicht aktiviert.
Wenn Sie virtuelle Sensoren haben, sollte Ihre Anwendung mit dieser Änderung wieder in gewohnter Form laufen.
Die aktualisierte Version Release 80325 steht schon im Internet.
Mit freundlichem Gruss
CL-control - Ralph Krapoth
http://www.cl-control.de
Bei Fragen bitte keine PMs, sondern mail an technik@cl-control.de
PMs werden nicht regelmässig kontrolliert und und können unbeantwortet bleiben.
CL-control - Ralph Krapoth
http://www.cl-control.de
Bei Fragen bitte keine PMs, sondern mail an technik@cl-control.de
PMs werden nicht regelmässig kontrolliert und und können unbeantwortet bleiben.