Bin neu hier, wer kann mir helfen.

Hallo khge,

$IPS_VALUE wird nur gesetzt, wenn das Skript durch eine Variable getriggert (zur Ausführung gebracht) wurde. $IPS_VALUE nimmt dann den Wert der triggernden Variablen an. Das Skript ist auf diese Betriebsart ausgelegt.

Das heißt, das Skript lässt sich nicht testen, indem man auf „Ausführen“ klickt, da in diesem Fall die Systemvariable $IPS_VALUE nicht gesetzt wird.

Du musst also abwarten, bis die Sensoren ihre Werte „freiwillig“ abliefern.

Da Du die Version V2 von IP-Symcon verwendest, kannst Du die aktuelle Version der Zugriffsfunktionen verwenden: SetValue()
SetValueFloat() ist eine veraltete Funktion und sollte nicht mehr eingesetzt werden.

Gruß
HJH

Hallo Hans-Joerg,

das sehe ich so nach einem Gespraech mit paresy nicht. Die von Dir als „alt“ bezeichneten Funktionen bleiben sehr wohl erhalten und koennen auch weiter benutzt werden. Damit ist der Zugriff schneller, weil die Typfreie Version natuerlich einfacher, aber auch langsamer ist.

In manchen Faellen ist die neue Version angebracht, wenn man naemlich nicht weiss, welchen Typ von Variable man vorliegen hat.

Hallo Uwe,

in „meinen“ Gesprächen mit paresy wurden die typbehafteten Funktionen als veraltet bezeichnet, die nur noch aus Gründen der Abwärtskompatibilität beibehalten werden. In zukünftigen Versionen von IP-Symcon sollen sie nicht mehr vorhanden sein.

Nun liegen wahrscheinlich „meine“ Gespräche mit paresy weiter zurück als Deine. Die Führungsspitze von IP-Symcon spricht (leider) schon lange nicht mehr mit mir. Von einer Abkehr von dieser Vorgehensweise ist mir daher nichts bekannt.

Aus meiner Sicht gesehen ist der angebliche Geschwindigkeitsvorteil der Funktionen nach alter Syntax kein stichhaltiges Argument. Wennn überhaupt dürfte der Unterschied im Mikrosekundenbereich liegen. Du weißt, dass ich der letzte bin, der ineffizienter Programmierung das Wort redet. Aber hier sehe ich angesichts der einfacheren Handhabung keine Veranlassung für das Mitschleppen von Altlasten.

Gruß
HJH

Hallo zusammen,

anbei etwas weiteren Diskussionsstoff. Wenn ich folgendes mache läuft das Script nicht.

SetValue($snc, $tempwert);

Habe das Script zu Testzwecken so abgeändert:

// die Sensornummer steht ab Position 1 mit der Länge 2 zur Verfügung
$snw = substr($IPS_VALUE, 1, 2);                          // liefert die Sensornummer z.B. "02" für Sensor 2
//setvalueString("10404", $snw);

$snc      = constant("ID_S". $snw);       // Sensornummer in den Namen der Konstanten für die ID einbauen, z.B. "ID_S02"
setvalueString("25713", $snc);

// der Wert steht ab Position 3 mit der Länge 4 zur Verfügung
$tempwert = (float) hexdec(substr ($IPS_VALUE, 3, 4))/100;     // die 4 HEX-Stellen werden extrahier und dezimal gewandelt und danach durch 100 geteilt und als Float-Zahlenwert zugewiesen
SetValueFloat ("53366",$tempwert);

// Export Variable nach IPSYMCON
SetValue($snc, $tempwert);          // abspeichern des Zahlenwertes in die zugehörige Variable

Anbei eine Bildschirmkopie. Schaut mal die Variable mit der Nummer 58336 an und dann unten die Variablen die ich zu Testzwecken habe mitlaufen lassen.

IPS läuft bei mir exklusive auf einem PC mit WinXP und neuestem SP. Der PC dient nur zur Messwerterfassung und Auswertung. (im Aufbau :slight_smile: ).

Das Script läuft ja jetzt. Also genießt erstmal den Sonntag bzw. Fasching. Nochmals vielen Dank, die nächsten Fragen kommen bestimmt.

Gruß
khge

Hallo khge,

das war mein Fehler.

Die neue Zugriffsfunktion SetValue() erwartet als ID einen Integer. In den Definitionen am Beginn des Skripts werden die IDs aber als String definiert. Eine korrekte Definition muss also so aussehen:

define("ID_S01", 123456);                                      // ID der Variablen für Sensor 1

Die Anführungszeichen um die ID müssen also entfernt werden.

Übrigens: Aussagen wie „Das Skript läuft nicht“ sind nicht sehr hilfreich. Es wäre sinnvoll anzugeben, woran Du erkannt hast, dass es nicht läuft und ob Du Fehlermeldungen bekommen hast und wie diese lauten. :wink:

Gruß
HJH

Da Du die Version V2 von IP-Symcon verwendest, kannst Du die aktuelle Version der Zugriffsfunktionen verwenden: SetValue()
SetValueFloat() ist eine veraltete Funktion und sollte nicht mehr eingesetzt werden.

Um das noch einmal aufzugreifen:

Die SetValue(Boolean|Integer|Float|String) Funktionen sind nicht veraltet.

Sie erlauben nur die veraltete Variante des Variablenzugriffs über den Namen. Die Funktionen ansich werden nicht entfernt, da sie Typensicher sind - Im Kontrast du der SetValue Funktion. Die SetValue Funktion konvertiert alles was sie bekommt und interpretiert es irgendwie passend auf den Zieltypen. Die SetValue(…) Funktionen dagegen prüfen, ob der Typ stimmt, was unter Umständen Fehler vermeiden kann/schneller erkennbar macht.

Was irgendwann wegfallen kann/wird, ist die Möglichkeit bei den SetValue* Funktionen auf die Variablen mit dem Namen zuzugreifen. Diese Möglichkeit ist nur als Abwärtskompatibilität vorhanden. Zur Zeit sehe ich da aber keinen Bedarf diese Möglichkeit zu entfernen - ich will es für die Zukunft aber nicht ausschließen.

paresy