Indirekte Variablen mit Fernverweisen verwenden
- Last UpdatedSep 24, 2024
- 2 minute read
Wenn indirekte Variablen auf Fernvariablen verweisen sollen, sind einige Besonderheiten zu beachten. Die Syntax für Fernverweise ist wie folgt:
Zugriffsname:Item
Dabei gilt:
-
Zugriffsname ist ein beliebiger Zugriffsname, der in InTouch definiert ist.
-
Item ist ein beliebiger Item-Name, der von dem betreffenden E/A-Server unterstützt wird.
Wenn Sie Fernverweise verwenden, sendet der Server einen Wert und nicht eine Variablenstruktur an den Client zurück. Der Wert enthält einen Zeit- und Qualitätsstempel. Wenn einer indirekten Variablen ein Fernverweis zugeordnet wird, kann über die indirekte Variable daher lediglich auf diejenigen Variablen-Punktfelder zugegriffen werden, die sich auf den Wert, die Zeit und die Qualität beziehen. So kann z. B. eine indirekte Variable nicht über einen Fernverweis auf Alarmgrenzen zugreifen.
Um dieses Problem zu lösen, können Sie ein Anzeigefeld mit verschiedenen indirekten Variablen erstellen. Die folgende Abbildung zeigt ein solches Bedienfeld, mit dem Sie die Alarmgrenzen für eine Pumpe ändern können.

In diesem Beispiel verwendet das Anzeigefeld zehn indirekte Variablen. Es verweist nicht auf Punktfelder dieser Variablen, sondern jeweils auf ihren Wert.Value (Punktfeld) Dem Anzeigefeld soll nun die Fernvariable "Pumpe001" auf einem InTouch-Rechner namens "TagServer1" zugewiesen werden. Hierzu wurde wie folgt ein InTouch-Zugriffsname konfiguriert:
|
Zugriffsname: |
TagSource1 |
|
Knotenname: |
TagServer1 |
|
Projektname: |
Ansicht |
|
Topic-Name: |
Tag-Name |
Um das Anzeigefeld mit der gewünschten Fernvariablen zu verknüpfen, führen Sie nun ein Skript wie das folgende aus:
IndPumpeUPMName.Name = "VarQuelle1:Pumpe001.Name";
IndPumpeUPMValue.Name = "VarQuelle1:Pumpe001";
IndPumpeUPMHiHiLimit.Name = "VarQuelle1:Pumpe001.HiHiLimit";
IndPumpeUPMHiLimit.Name = "VarQuelle1:Pumpe001.HiLimit";
IndPumpeUPMLoLimit.Name = "VarQuelle1:Pumpe001.LoLimit";
IndPumpeUPMLoLoLimit.Name = "VarQuelle1:Pumpe001.LoLoLimit";
IndPumpeUPMHiHiStatus.Name = "VarQuelle1:Pumpe001.HiHiStatus";
IndPumpeUPMHiStatus.Name = "VarQuelle1:Pumpe001.HiStatus";
IndPumpeUPMLoStatus.Name = "VarQuelle1:Pumpe001.LoStatus";
IndPumpeUPMLoLoStatus.Name = "VarQuelle1:Pumpe001.LoLoStatus";
Ein solches Skript muss jedes Mal ausgeführt werden, wenn der Verweis des Anzeigefelds geändert werden soll. Eine bessere Lösung ist daher die Erstellung einer InTouch-QuickFunction, mit der Sie einmalig ein Skript schreiben, dem Sie den Namen des gewünschten Fernverweises übergeben. Wenn Sie mehrere identische Anzeigefelder verwenden, können diese außerdem alle dieselbe QuickFunction aufrufen.
Sie können z. B. unter Verwendung der obigen Skriptbefehle eine QuickFunction mit dem Namen RedirectAlarmFacePlate() erstellen:

Sie müssen nun lediglich die QuickFunction RedirectAlarmFacePlate() aufrufen, damit alle Verweise geändert werden. Dazu muss die QuickFunction von einem anderen InTouch-Skript aufgerufen werden. Zum Beispiel:
CALL RedirectAlarmFacePlate ("VarQuelle1:Pumpe001");