Skript zum erstellen und einbinden einer Wago SPS

Hallo Leute ich habe seit einiger Zeit mein Skript zum erstellen einer Instanz mit Variablen und Actionscript sowie eines Soket für die Wago SPS 750-8xx . Ich möchte Euch dieses nicht vorenthalten.

Ich hoffe durch die Kommentare in der .php ist alles verständlich. Wenn Fragen offen sein sollten einfach Fragen.

Nach dem Erstellen könnt Ihr einfach das Value der Variable beschreiben und das Script wird ausgeführt.
Das Skript soll die manuelle anlegerei von den ganzen Variablen erleichtern. Ich arbeite gerade daran das ganze Variable zu machen damit mann nicht für jede Variable ein Script braucht, klappt auch schon kommt dann die Tage auch noch hier rein.

<?
$anzDI=8;              		//Anzahl Digitalereingängenge
$anzDO=8;              		//Anzahl Digitalerausgänge
$anzMFX=8;             		//Anzahl MFXer
$doWriteReg = 8192;    		//PFCIN Reg Start
$doReadReg = 512;      		//DO Reg Start
$hostIP = '192.168.0.230';  //PLC IPAdresse
$hostPort = 502; 		    //PLC Port

/********************************************************
Ab hier nichts mehr Ändern
********************************************************/
$parentID = IPS_GetObject($IPS_SELF);
$parentID = $parentID['ParentID'];

// ID des ArchiveHandler ermitteln
$instances = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}');
$id_archive_handler = $instances[0];

//Soket anlegen anlegen
$clientSoketID = @IPS_GetInstanceIDByName("WagoClientSoket", 0);
if(!IPS_InstanceExists($clientSoketID)){
$clientSoketID = IPS_CreateInstance("{3CFF0FD9-E306-41DB-9B5A-9D06D38576C3}"); // Comport anlegen
            IPS_SetName($clientSoketID, "WagoClientSoket");
            IPS_SetProperty($clientSoketID, "Host", $hostIP);
            IPS_SetProperty($clientSoketID, "Port", $hostPort);
            IPS_SetProperty($clientSoketID, "Open", false); //I/O Instanz soll aktiviert sein.
            IPS_ApplyChanges($clientSoketID); //Neue Konfiguration übernehmen
}
$mudbusGatewayID = @IPS_GetInstanceIDByName("WagoModbusGateway", 0);

// ModBus Gateway anlegen
if(!IPS_InstanceExists($mudbusGatewayID)){
$mudbusGatewayID = IPS_CreateInstance("{A5F663AB-C400-4FE5-B207-4D67CC030564}"); 
            IPS_SetName($mudbusGatewayID, "WagoModbusGateway");
            IPS_SetProperty($mudbusGatewayID, "GatewayMode", 0);
            IPS_SetProperty($mudbusGatewayID, "DeviceID", 1);
            IPS_ApplyChanges($mudbusGatewayID); //Neue Konfiguration übernehmen
}
IPS_DisconnectInstance($mudbusGatewayID);
IPS_ConnectInstance($mudbusGatewayID, $clientSoketID); // Soket mit Gateway verbinden

//Anlegen eines Profils für Boolean-Variablen
if (!IPS_VariableProfileExists("zToggle")){
            $pvid = IPS_CreateVariableProfile("zToggle", 0);
 //boolean IPS_SetVariableProfileAssociation ( string $ProfilName, float $Wert, string $Name, string $Icon, integer $Farbe )
            IPS_SetVariableProfileAssociation("zToggle", 1, "An", "Sun", 0x00FF00);
            IPS_SetVariableProfileAssociation("zToggle", 0, "Aus", "Power", 0xFFFFFF);
}
for($i=0; $i < $anzDO; $i++)
    {
        $var1 = CreateInstanzByNumber($parentID, $i);
    }

// Instanz erstellen falls nicht vorhanden und ID entsprechend zuordnen
function CreateInstanzByNumber($id, $no)
{
    global $doWriteReg;
    global $doReadReg;
    global $IPS_SELF;
    global $ScriptID;
    global $parentID;
    global $skript_writeModbus;
    $ObjektID = @IPS_GetObjectIDByName("PFCIN ".($doWriteReg + $no), $ParentID); //Prüfen ob das Objekt vorhanden ist
    if ($ObjektID === false)
    {
    $vid = @IPS_GetVariableIDByName($name, $id);
    if($vid === false) {
       		$vid = IPS_CreateInstance("{CB197E50-273D-4535-8C91-BB35273E3CA5}"); // ModBus Instanz anlegen
            IPS_SetName($vid,"PFCIN ".($doWriteReg + $no));
            IPS_SetProperty($vid, "WriteAddress", $doWriteReg + $no);
            IPS_SetProperty($vid, "EmulateStatus", 1);
            IPS_SetProperty($vid, "ReadAddress", $doReadReg + $no);
            IPS_SetProperty($vid, "DataType", 0);  // 0=Bit, 1=Byte, 2=Word, 3=DWord, 4=ShortInt, 5=SmallInt, 6=Integer, 7=Real
            IPS_SetProperty($vid, "Poller", 1000);
            IPS_SetProperty($vid, "ReadOnly", false);
			
			IPS_ApplyChanges($vid); //Neue Konfiguration übernehmen
            IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
           // print_r(IPS_GetChildrenIDs($vid));
            $cvid = IPS_GetChildrenIDs($vid);
            $covid = IPS_SetVariableCustomProfile($cvid[0], "zToggle");
    
           // echo"Die Skript-ID lautet: ". $varID;
				$scriptName = "writeReg" . ($doWriteReg + $no);
				//echo "SkriptName:" . $scriptName;
				$skript_writeModbus = "<?
     			ModBus_WriteCoil($vid, true);
   			IPS_Sleep(100);
    			ModBus_WriteCoil($vid, false);
    			ModBus_RequestRead($vid);
 ?>";
            $scriptID = CreateScriptByName("writeReg ". $scriptName, $cvid[0], $skript_writeModbus);
}
        return $vid;
		  }
}
// Inhalt für Skript "Modbus" erzeugen
//********************************************

function CreateScriptByName($ScriptNAME, $ParentID, $ScriptTEXT)
    {
    global $IPS_SELF;
    //echo($ScriptNAME . $ParentID);
    $ScriptID = @IPS_GetScriptIDByName($ScriptNAME, $ParentID);
    if ($ScriptID == 0){
        $ScriptID = IPS_CreateScript(0);
        IPS_SetName($ScriptID, $ScriptNAME);
        IPS_SetParent($ScriptID, $ParentID);
        IPS_SetInfo($ScriptID, "This script was created by: #$IPS_SELF#");
        $fh = fopen(IPS_GetKernelDir()."scripts\\".$ScriptID.".ips.php", 'w') or die("can't open file");
        fwrite($fh, $ScriptTEXT);
        fclose($fh);
        $ScriptPath = $ScriptID.".ips.php";
        IPS_SetScriptFile($ScriptID, $ScriptPath);
        IPS_SetHidden($ScriptID, true);
        IPS_SetPosition($ScriptID, 80);
         }
    return $ScriptID;
    }

?>

Hat jemand sowas für ne S7 Steuerung :confused:
Das wäre wiklich ne erleichterung das anlegen ist so aufwendig von Hand.

Gruß Daniel