Modbus Variablen per Script erstellen

Hallo zusammen,

ich habe vor mir ein Script zu erstellen, mit dem ich mir das ganze Geklickere beim Erstellen einer ModbusVariable ersparen will.

Mit der Zeile


$New_ModBus_Device = IPS_CreateInstance("{CB197E50-273D-4535-8C91-BB35273E3CA5}");

wird das ja eigentliche Device und ein Bool-Value als Child angelegt.

Nun, wie weiter?
Mit welchen IPS-Befehlen kann ich die Modbus-Adresse (lesen/schreiben) und evtl. ReadOnly, Timer aktivieren und einrichten?

Weiterhin:
Wie schaffe ich es, dass ich die bool’sche Variable z.B. als Float ändern kann?

In dem Befehlssatz in der Doku hab ich nichts gefunden…

Vielen Merci

Gruß
Palela

Sieh mal im Script mit Mod STRG+Leertaste nach. Da findest Du alles was Du brauchst.

Hallo Rainer,

danke für den Tip. :slight_smile: Den Trick kannte ich schon…

Ich melde mich dann in einem Jahr wieder, wenn ich alle ausprobiert hab :smiley:

Nee im Ernst… Wenn ich z.B. ips_set vorwähle, finde ich nichts brauchbares womit ich gezielt ein Modbus-Device (um)konfigurieren kann…

Kann auch sein, dass mir dafür noch etwas knoff-hoff fehlt… :confused:

Gruß
Palela

Ich hab vor längeren auch gehofft, das jemand mal so etwas baut. Aber bis jetzt hat es noch keiner hinbekommen, ich finde es auch eine Mega Arbeit wenn man mehrere Adressen anlegen will.

Also, falls jemand soetwas bauen kann, bitteeeeee :wink:

Da waren es schon zwei, die das gerne realisieren würden…

Bei mir wäre das schon sehr hilfreich, da ein Kunde Interesse zeigt mehrere alte Visualisierungen mit IPS zu migrieren. Und da wird eben Modbus gesprochen…
Mit Klickibunti wäre mir das echt zu mühsam… :confused:

Das Erstellen des Modbus-Devices ist ja bekannt.
Muss ich der boolschen default-Variable die Parent-Verbindung kappen, ein float einrichten und mit seinem Parent verbinden???

Wie kann ich (per Script) die Modbus-Adresse zuweisen, Timer setzen, Timerzeiten einstellen, Read Only / ReadWrite etc etc…

Hat jemand einen Tip?
Wo muss ich da reinschauen? Im PHP-Befehlsatz oder via soap?

Gruß
Palela

Ich zitiere mich mal selber. :confused:

Sieh mal im Script mit Mod STRG+Leertaste nach. Da findest Du alles was Du brauchst.

Den Trick kannte ich schon…

Anscheinend kennst Du den Trick doch nicht.

ModBus_SetPoller…
ModBus_SetWriteAdress…
usw…usw…

Scheisse, Rainer Du hast recht… :eek:

oh mann… ich habe in der onlinedoku nachgeschaut…
Beim nächsten Treff geb ich einen aus :slight_smile:

„STRG + SPACE“
ich schreibs mir hinter die Öhrchen :smiley:
Mit EDDING

Merci

Hallo Patrick,

dachte ja, Du würdest dein Ergebniss hier mal posten, ist aber nicht so. Alles muss man selber machen. :wink:

Hier mal zum erstellen einer x beliebigen Anzahl von Instanzen mit fortlaufenden Adressen.

$katID = IPS_GetCategoryIDByName("Wago Modbus Instanzen", 0); // Kategorie 

$anzahl = 1; // Anzahl der zu erstellenden Instanzen
$datenTyp = 0; // 0=Bit, 1=Byte, 2=Word, 3=DWord, 4=ShortInt, 5=SmallInt, 6=Integer, 7=Real
$modulName = "Ausgang ";
$adresse = 514; // ab Adresse
$time = 1000; // Aktualisierungzeit in ms
$nurLesen = false; // true oder false

for($i=0; $i<$anzahl; $i++)
{
   $neueInstanz = IPS_CreateInstance("{CB197E50-273D-4535-8C91-BB35273E3CA5}");
   IPS_SetName($neueInstanz, $modulName.$adresse);
   ModBus_SetType($neueInstanz, $datenTyp);
   ModBus_SetWriteAddress($neueInstanz, $adresse);
   ModBus_SetReadAddress($neueInstanz, $adresse);
   ModBus_SetPoller($neueInstanz, $time);
   ModBus_SetReadOnly($neueInstanz, $nurLesen);
   IPS_ApplyChanges($neueInstanz);
   IPS_SetParent($neueInstanz, $katID);
   $adresse++;
}

und mal als Funktion z.B als Aufruf in einem Script.

createModbusDevice(0, "Ausgang ", 514, 1000, false); // Instanz erstellen

function createModbusDevice($datenTyp, $modulName, $adresse, $time, $nurLesen)
{
   global $IPS_SELF;
   $neueInstanz = IPS_CreateInstance("{CB197E50-273D-4535-8C91-BB35273E3CA5}");
   IPS_SetName($neueInstanz, $modulName.$adresse);
   ModBus_SetType($neueInstanz, $datenTyp);
   ModBus_SetWriteAddress($neueInstanz, $adresse);
   ModBus_SetReadAddress($neueInstanz, $adresse);
   ModBus_SetPoller($neueInstanz, $time);
   ModBus_SetReadOnly($neueInstanz, $nurLesen);
   IPS_SetParent($neueInstanz, $IPS_SELF);
   IPS_ApplyChanges($neueInstanz);
}

Hallo Rainer,

bin momentan Land ziemlich busy, und hab noch keine Gelegenheit gehabt mich an die Scripte dranzusetzen…

Ich bin noch nicht einmal dazu gekommen mir V2.4 intensiv anzuschauen.

Hallo,

gibt es eine Möglichkeit die Übergeordnete Instanz in dem Skript aus zu wählen?
Da ich mehrere Modbus Instanzen habe würde ich diese beim Erstellen gerne gleich mit auswählen.

Gruß

Frank

Tausch doch die erst Zeile gegen Instanz aus und trag als Parent die Kat ein.

Hi,

habe mit folgendem Code mein Problem gelöst

   IPS_ConnectInstance($neueInstanz,14217 /*[ModBus RTU/TCP KG]*/);

Gruß

Frank

[QUOTE=RWN;127416]

$katID = IPS_GetCategoryIDByName("Wago Modbus Instanzen", 0); // Kategorie 

$anzahl = 1; // Anzahl der zu erstellenden Instanzen
$datenTyp = 0; // 0=Bit, 1=Byte, 2=Word, 3=DWord, 4=ShortInt, 5=SmallInt, 6=Integer, 7=Real
$modulName = "Ausgang ";
$adresse = 514; // ab Adresse
$time = 1000; // Aktualisierungzeit in ms
$nurLesen = false; // true oder false

for($i=0; $i<$anzahl; $i++)
{
   $neueInstanz = IPS_CreateInstance("{CB197E50-273D-4535-8C91-BB35273E3CA5}");
   IPS_SetName($neueInstanz, $modulName.$adresse);
   ModBus_SetType($neueInstanz, $datenTyp);
   ModBus_SetWriteAddress($neueInstanz, $adresse);
   ModBus_SetReadAddress($neueInstanz, $adresse);
   ModBus_SetPoller($neueInstanz, $time);
   ModBus_SetReadOnly($neueInstanz, $nurLesen);
   IPS_ApplyChanges($neueInstanz);
   IPS_SetParent($neueInstanz, $katID);
   $adresse++;
}

Hallo,

gibt es auch eine Möglichkeit Splitter / Gateway mit einzutragen.
Gesucht und nichts gefunden.

Siehe hier in der Doku.
http://www.ip-symcon.de/service/dokumentation/befehlsreferenz/instanzenverwaltung/verbindungen/ips-connectinstance/
Eventuell ist vorher noch ein Disconnect nötig, da sich neue Instanzen gerne einfach (irgend)ein Daten-Parent schnappen.
Michael

Danke,

so funkt es

      IPS_DisconnectInstance($neueInstanz);
      IPS_ConnectInstance($neueInstanz, $id_Gateway);

Hier von einem netten IPS’ler ein Installationsscript, Voraussetzung sind schon gemachte Einstellungen per Pokey-Soft.

Den LInk ist hier, ab „[i]Nun kommt IPS ins Spiel[/i]“ in der IPS-Wiki.

Gruß Helmut