Hallo Zusammen,
ich muss für diverse Heizungsanlagen entsprechende Modbus-Instanzen erstellen.
Da es wohl leider keinen Im- und Export gibt, und das alte Script von Raketenschnecke nicht mehr richtig funktioniert, wollte ich die Erstellung mit einem Script automatisieren.
Für Modbus habe ich bei der Suche das hier gefunden
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 i…
Das scheint aber alt zu sein, da sich die Befehle entsprechend geändert haben.
In der Modulübersicht Modbus RTU/TCP — IP-Symcon :: Automatisierungssoftware
ist beschrieben, welche Parameter vorhanden sind und händisch eingetragen werden können.
Ich habe aber keine Liste gefunden, wie diese Parameter in einem Script-Aufruf heißen würden.
Auch das STRG-Space half mir hier nicht weiter.
Könnte mir da vielleicht jemand einen Code-Schnipsel zur Verfügung stellen und mir ggf. zeigen, wo ich zukünftig die Parameter für die einzelnem Module finden kann ?
Vielen Dank vorab
bastelfrosch
In der Dokumentation gibt es einen Abschnitt welcher alle Befehle zum konfiguieren von Instanzen enthält:
https://www.symcon.de/service/dokumentation/befehlsreferenz/instanzenverwaltung/konfiguration/
Hier sind auch für alle* Module die Parameter für die Konfiguration beschrieben.
Michael
*Nicht für PHP-Module der Community
Bitteschön
<?php
$id_Kategorie = 42199;
$adresse_1 = 44640; // erste Adressen Nummer ab Adresse
$anzahl = 16; // Anzahl der zu erstellenden Instanzen
$datenTyp = 0; // 0=Bit, 1=Byte, 2=Word, 3=DWord, 4=ShortInt, 5=SmallInt, 6=Integer, 7=Real
$modulName1 = "ADR_"; // 1.Bezeichnung der Variable
$modulName2 = "_MX2022."; // 2. Bezeichnung der Variable
$adresse_2 = 00; // Ein / Aus Nr.
$time = 200; // Aktualisierungzeit in ms
$id_Gateway = 51977;
for($i=0; $i<$anzahl; $i++) {
$num1adresse = zerofill($adresse_1);
$num2adresse = zerofill($adresse_2);
$neueInstanz = IPS_CreateInstance("{CB197E50-273D-4535-8C91-BB35273E3CA5}");
IPS_SetName($neueInstanz, $modulName1.$num1adresse.$modulName2.$num2adresse."_");
// IPS_SetName($neueInstanz, $modulName1.$num1adresse.$modulName2."_");
# ModBus_SetType($neueInstanz, $datenTyp);
IPS_SetProperty($neueInstanz, 'DataType', $datenTyp);
IPS_SetProperty($neueInstanz, 'EmulateStatus', 1); // hierzu noch eine Variable anlegen
IPS_SetProperty($neueInstanz, 'Factor', 0); // hierzu noch eine Variable anlegen
# ModBus_SetPoller($neueInstanz, $time);
IPS_SetProperty($neueInstanz, 'Poller', $time);
# ModBus_SetReadAddress($neueInstanz, $adresse_1);
IPS_SetProperty($neueInstanz, 'ReadAddress', $adresse_1);
IPS_SetProperty($neueInstanz, 'ReadFunctionCode', 1); // hierzu noch eine Variable anlegen
# ModBus_SetWriteAddress($neueInstanz, $adresse_1);
IPS_SetProperty($neueInstanz, 'WriteAddress', $adresse_1);
IPS_SetProperty($neueInstanz, 'WriteFunctionCode', 5); // hierzu noch eine Variable anlegen
IPS_ApplyChanges($neueInstanz);
IPS_SetParent($neueInstanz, $id_Kategorie);
IPS_DisconnectInstance($neueInstanz);
IPS_ConnectInstance($neueInstanz, $id_Gateway);
IPS_SetPosition($neueInstanz, floatval($adresse_1) );
$adresse_1++;
$adresse_2++;
IPS_Sleep(1500);
}
// ============================================================================
function zerofill ($num, $zerofill = 2) {
return str_pad($num, $zerofill, '0', STR_PAD_LEFT);
}
1 „Gefällt mir“