Physikalisch übergeordnete Instanz finden

Hallo allerseits,

was muss ich machen, um zu einer Instanz die physikalisch übergeordnete Instanz finden? Hintergrund der Frage: Beim Erzeugen einer Instanz vom Typ „ModBus RTU TCP“ entsteht automatisch eine übergeordnete „Client Socket“-Instanz, aber ich kann letztere nicht finden, um die Properties zu setzen. Sowohl IPS_GetParent() als auch IPS_GetInstanceParentID() liefern 0 zurück. In der physikalischen Baumansicht sind die Instanzen aber korrekt verknüpft.

Schöne Grüße
Ingo

Beispielcode:


$modbus = IPS_CreateInstance('{A5F663AB-C400-4FE5-B207-4D67CC030564}'); # ModBus RTU TCP

print("Instanz: $modbus
");
print("Logisch: " . IPS_GetParent($modbus) . "
");
print("Physikalisch: " . IPS_GetInstanceParentID($modbus) . "
");

$socket = IPS_CreateInstance('{3CFF0FD9-E306-41DB-9B5A-9D06D38576C3}'); # Client Socket
if (IPS_ConnectInstance($modbus, $socket))
    print("Erfolgreich verbunden mit $socket
");

print("Logisch: " . IPS_GetParent($modbus) . "
");
print("Physikalisch: " . IPS_GetInstanceParentID($modbus) . "
");

liefert als Ergebnis:


Instanz: 55579
Logisch: 0
Physikalisch: 0
Erfolgreich verbunden mit 24273
Logisch: 0
Physikalisch: 0


<?
$modbus = IPS_CreateInstance('{A5F663AB-C400-4FE5-B207-4D67CC030564}'); # ModBus RTU TCP
IPS_Sleep(500); //Warten bis die ParentID in IP-Symcon 2.x übertragen würde. Fix ab IP-Symcon 3.0
print("Instanz: $modbus
");print("Logisch: " . IPS_GetParent($modbus) . "
");print("Physikalisch: " . IPS_GetInstanceParentID($modbus) . "
");
?>

Das war intern leider etwas unschön gelöst, was aber im nächsten Beta Update gelöst sein wird.

Hintergrund: Beim Erstellen von der Instanz wurde die Verbindung über IPS_ConnectInstance erstellt, welche aber asynchron verarbeitet wurde. D.h. die Änderung der ConnectionID innerhalb der Instanz wurde erst verzögert gesetzt. Das habe ich korrigiert. Mit einem kleinen Sleep kannst du dein Skript auch 2.7 und älter kompatibel machen.

paresy