Variablen mit Rückschreibung

Hallo Leute,

folgendes beschäftigt mich zur Zeit:
Wenn man hier Programme postet oder der Struktur von Programmen versucht zu folgen, dann wäre es manchmal schöner, wenn alle wichtigen Variablen (und Objekte) im Kopf bestimmt werden, damit der Programmcode lesbarer wird und Leute die das bei sich umsetzen wollen dann nur im Programmkopf die Werte anpassen müssten.

Hierzu ein Beispiel:
Wenn ich den Wert aus einer IPS-Variablen herauslesen möchte, dann könnte ich im Programmkopf folgendes schreiben:
$SollTemperatur = GetValueFloat(28056 /[Raum-Temperaturen\Büro Joachim\Soll Temperatur]/ )
Nutzer die das nachvollziehen wollen, brauchen dann nur den entsprechenden Wert anpassen, da im weiteren Programmcode dann $SollTemperatur verwendet wird.

Nach langen Vortext nur zur Frage: Geht das auch mit Variablen die innerhalb des Programs zurückgeschrieben werden sollen? Also ich definiere eine Art „Alias“ im Programmcode?
z.B.
Im Programmkopf:
$Regelabweichung = (43568 /[Raum-Temperaturen\Büro Joachim\Summe Regelabweichungen]/ )
Im Programm dann:
SetValueFloat($Regelabweichung, 15)
oder
$Irgendwas = GetValueFloat($Regelabweichung)

Kann man also einer Variablen ein „Objekt“ zuweisen?

Ich hoffe es ist verständlich geworden was ich meine…

Joachim

Hallo Joachim,

sicher geht das. Du kannst auch die Variablen mit Namen deklarieren so dass Du gar keine IDs mehr verwenden musst.
Das ist aber jedem selber überlassen.

Hallo Rainer,

vielen Dank für Deine Antwort und ich hoffe, dass ich Dich nicht falsch verstanden habe.
Die Möglichkeit der Umbenennung hatte ich in der Dokumentation gesehen. Ich glaube aber, das es mit meiner Frage keine Verbindung hat (kann auch sein dass ich jetzt falsch liege), weil es eigentlich für den Programm-Ablauf ziemlich egal, ob ich jetzt schreibe „SetValueFloat(Regelabweichung, 15)“ oder „SetValueFloat(12345, 15)“, da ich im gesamten Programmcode dieses bei Änderungen des Variablen auch anpassen müsste.
(Angenommen ich habe 30 Lese- und Schreibzugriffe auf „Regelabweichung“ oder alternativ „12345“ im Programmcode und nun soll der Verweis auf auf die Variable „54321“ gelegt werden, dann hätte ich 30 Anpassungen zu machen. Wenn es im Programmkopf als Verweis definiert ist nur eine - die im Programmkopf…)

Mir geht es jedoch darum, dass man bei Änderung nur den Verweis auf die richtige bzw. andere IPS Variable setzt, und später im Programmcode alle Get und Set mit diesem Alias arbeiten, so dass ich dieses nur bei der Definition im Programmkopf machen müsste.

Joachim

Hallo Joachim,

ohne ID meinte ich so.

$pegelID = IPS_GetVariableIDByName("Pegelabweichung", $parentID); // ID der Variable
$pegelValue = GetValue(IPS_GetVariableIDByName("Pegelabweichung", $parentID)); // Wert der Variable

welcher Variable Du dann im Endeffekt was zuweist ist egal.

Aber wie schon gesagt kann jeder handhaben wie er am besten zurecht kommt.

Hallo Rainer,

abermals Dank für Deine Antwort. Ich glaube aber wir reden aneinander vorbei oder:

  • ich verstehe nicht wie Deine Anwort mit der Frage zusammenhängt oder
  • ich kann nicht vermitteln, was ich wirkliche meine…:wink:
    Das man statt ID einen Namen verwenden kann, habe ich verstanden, spielt hier habe in der Beziehung keine wichtige Rolle.

Was ich meinte ist folgendes:


// im Programmkopf
$Test = (43568 /*[Raum-Temperaturen\Büro Joachim\Summe Regelabweichungen]*/ );

//oder: $Test = (Regelabweichung) //*[Raum-Temperaturen\Büro Joachim\Summe Regelabweichungen]*/ , wenn umbenannt

// $Test ist jetzt fest mit dieser Variablen verbunden, nicht mit dessen Wert!

// Programm, programm, programm

// Zuweisung an den Wert der Variablen in $Test
 SetValue($Test, 15);

// Programm, programm, programm

// Wert aus der Variablen in $Test auslesen
$irgendetwas = GetValue($Test);


Wenn sich jetzt also den Variablenbezug im Programmkopf verändere, ändern sich auch automatisch die darauf folgenden Operation im Programmcode - nicht im Wert, sondern im Bezug auf die Variable selbst…
Das passiert zum Beispiel dann, wenn Du oder jemand anderes ein Codebeispiel von mir übernehmen möchtest, oder wenn Du einen Programmcode, bei dem aber alles andere Variablen, Sensoren und Aktoren genutzt werden…

Joachim

Ich versteh dich schon, Du aber mich nicht. Den Code den ich oben gepostet hab, ist nichts anderes halt nur mit Namen.

Also nochmal auf Deutsch. :slight_smile:

$pegelID = 12345; // ID der Variable
$pegelValue = GetValue($pegelID); // Wert der Variable
$pegelValue = GetValue(12345); // Wert der Variable ist das selbe

Hast Du es jetzt verstanden?

Hallo Rainer,

ich habe schon vermutet das es daran am Ende liegen könnte…:wink:

Das ist ja klasse!, dann werde ich mal ein bißchen umstricken!

Danke!:slight_smile:

Joachim

Du musst nur aufpassen bei funktionen. Dort musst Du entweder die Variable mit global bekannt machen oder definieren mit define.