Timeout bei PHP-Scripts und Anweisung Schreibedatei

Bugreports und Updatewünsche an die Firma contronics
Keine allgemeinen Fragen!

Moderator: Co-Administratoren

contronics-RK
Beiträge: 954
Registriert: 18.07.2006, 15:58

Re: Timeout bei PHP-Scripts und Anweisung Schreibedatei

Beitrag von contronics-RK » 18.03.2008, 10:29

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
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.

copros
Beiträge: 9
Registriert: 13.09.2007, 17:10

Re: Timeout bei PHP-Scripts und Anweisung Schreibedatei

Beitrag von copros » 24.03.2008, 01:10

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

tsa
Beiträge: 725
Registriert: 03.01.2008, 17:42
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

Re: Timeout bei PHP-Scripts und Anweisung Schreibedatei

Beitrag von tsa » 25.03.2008, 11:00

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

contronics-RK
Beiträge: 954
Registriert: 18.07.2006, 15:58

Re: Timeout bei PHP-Scripts und Anweisung Schreibedatei

Beitrag von contronics-RK » 25.03.2008, 11:42

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
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.

tsa
Beiträge: 725
Registriert: 03.01.2008, 17:42
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

Re: Timeout bei PHP-Scripts und Anweisung Schreibedatei

Beitrag von tsa » 25.03.2008, 13:01

...wie immer, super schnell und super unkompliziert. Vielen herzlichen Dank!!!


Gruss
Thomas

copros
Beiträge: 9
Registriert: 13.09.2007, 17:10

Re: Timeout bei PHP-Scripts und Anweisung Schreibedatei

Beitrag von copros » 25.03.2008, 23:58

Danke für die rasche Reaktion, ich werde die Version morgen ausprobieren.

copros
Beiträge: 9
Registriert: 13.09.2007, 17:10

Re: Timeout bei PHP-Scripts und Anweisung Schreibedatei

Beitrag von copros » 26.03.2008, 19:30

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):

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 );

?>
Objekt 2: "vTemperatur" (Typ TempSensor, "Ausführung bei Änderung" aktiviert)

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
Objekt 3: "zMsg" (Typ Zeichen)

Code: Alles auswählen

** Kein Code, dient nur der Zeichenausgabe
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

contronics-RK
Beiträge: 954
Registriert: 18.07.2006, 15:58

Re: Timeout bei PHP-Scripts und Anweisung Schreibedatei

Beitrag von contronics-RK » 27.03.2008, 10:47

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.
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.

copros
Beiträge: 9
Registriert: 13.09.2007, 17:10

Re: Timeout bei PHP-Scripts und Anweisung Schreibedatei

Beitrag von copros » 27.03.2008, 23:56

Herzlichen Dank, jetzt funktioniert es!

Antworten

Zurück zu „homeputer Studio / Standard: Bugs & Updatewünsche“