Moin Moin,
ich habe mir ein Skript aus zwei anderen zusammen gebaut zum erstellen der Modbus Instanzen aus einer Datei.
Danke an die Skript erstellen @wibo050447 und @axelroro .
Nun will ich aber auch direkt das Variablen Profil setzen und den Namen gleich der Instanz.
<?php
// Change this to where you stored the sunspec definitions from above approach
$Mapping = "./16613.ips.php";
$id_Gateway = 38182;
$Ausgabe = CreateModbusInstanz();
print_r($Ausgabe);
function CreateModbusInstanz()
{
global $parentID ,$id_Gateway,
$Mapping;
$row = 0;
if (($handle = fopen($Mapping, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
$sunspec_def[$row++]=$data;
$address = $data[0];
$name = trim($data[1]);
$t = trim($data[2]);
$Skal = $data[3];
$info = $data[4];
$Schreiben = $data[5];
$parentID = IPS_GetParent($_IPS['SELF']);
$address_1 = ((int)$address - 1);
$Datentyp = $t ;
echo "$address";
echo "$Schreiben";
CreateVariableByName($parentID,$address_1,$Datentyp,$name,$Skal,5000,$id_Gateway,$info,$Schreiben);
}
}
fclose($handle);
//print_r($sunspec_def);
return $sunspec_def;
}
function CreateVariableByName($id_Kategorie,$adresse,$datenTyp,$name,$Skal,$time,$id_Gateway,$info,$Schreiben) {
/*
$id_Kategorie
$adresse // Modbus Adresse
$datenTyp = 0; // 0=Bit, 1=Byte, 2=Word, 3=DWord, 4=Char(8Bit), 5=ShortInt(16Bit/Vorzeichenbehaftet), 6=Integer, 7=Real
$name = "ADR_"; // 1.Bezeichnung der Variable
$time = 500; // Aktualisierungzeit in ms
$id_Gateway = 38182;
$info = SOLL_TEMP // Beschreibung
$Schreiben = True // Variable wird geschrieben
*/
$num1adresse = zerofill($adresse);
$neueInstanz = IPS_CreateInstance("{CB197E50-273D-4535-8C91-BB35273E3CA5}"); //http://www.symcon.de/service/dokumentation/befehlsreferenz/modulverwaltung/ips-getmodulelist/
IPS_SetName($neueInstanz, $name);
IPS_SetInfo($neueInstanz, $info);
# ModBus_SetType($neueInstanz, $datenTyp);
IPS_SetProperty($neueInstanz, 'DataType', $datenTyp);
IPS_SetProperty($neueInstanz, 'EmulateStatus', 1); // hierzu noch eine Variable anlegen
IPS_SetProperty($neueInstanz, 'Factor', $Skal); // hierzu noch eine Variable anlegen
# ModBus_SetPoller($neueInstanz, $time);
IPS_SetProperty($neueInstanz, 'Poller', $time);
# ModBus_SetReadAddress($neueInstanz, $adresse_1);
IPS_SetProperty($neueInstanz, 'ReadAddress', $adresse);
IF ($datenTyp=0)
{
IPS_SetProperty($neueInstanz, 'ReadFunctionCode', 1); // hierzu noch eine Variable anlegen
}
else
{
IF ($Schreiben == "True")
{
IPS_SetProperty($neueInstanz, 'ReadFunctionCode', 3);
}
else
{
IPS_SetProperty($neueInstanz, 'ReadFunctionCode', 4);
}
}
IF ($Schreiben == "True")
{
# ModBus_SetWriteAddress($neueInstanz, $adresse_1);
IPS_SetProperty($neueInstanz, 'WriteAddress', $adresse);
IPS_SetProperty($neueInstanz, 'WriteFunctionCode', 16); // hierzu noch eine Variable anlegen
}
else
{
IPS_SetProperty($neueInstanz, 'WriteFunctionCode', 0); // hierzu noch eine Variable anlegen
}
IPS_ApplyChanges($neueInstanz);
IPS_SetParent($neueInstanz, $id_Kategorie);
// IPS_DisconnectInstance($neueInstanz);
// IPS_ConnectInstance($neueInstanz, $id_Gateway);
IPS_ApplyChanges($neueInstanz);
IPS_SetPosition($neueInstanz, floatval($adresse) );
$adresse++;
usleep(50000);
// ============================================================================
}
function zerofill ($num, $zerofill = 2) {
return str_pad($num, $zerofill, '0', STR_PAD_LEFT);
}
Danke im Vorraus