Hallo Zusammen,
falls jemand beispielsweise die Relais über Modbus schalten möchte, kann ich hier kurz etwas Hilfestellung geben:
Möchte man nur die Beleuchtung (Relais 3) einschalten:
$MBF_SET_MANUAL_CTRL = <ID von der Instanz des Modbus Device für MBF_SET_MANUAL_CTRL>
$MBF_RELAY_STATE = <ID von der Instanz des Modbus Device für MBF_RELAY_STATE>
$MBF_EXEC = <ID von der Instanz des Modbus Device für MBF_EXEC>
ModBus_WriteRegisterWord($MBF_SET_MANUAL_CTRL, 1); // versetzt die Anlage in den manuellen Modus um Befehle per Modbus zu akzeptieren
ModBus_WriteRegister($MBF_RELAY_STATE, 4); // schaltet Relais
ModBus_WriteRegisterWord($MBF_EXEC, 1); // zwingt die Anlage die Eingabe zu übernehmen
Zum ausschalten der Beleuchtung einfach die Zeile
ModBus_WriteRegister($MBF_RELAY_STATE, 4);
gegen folgende austauschen:
ModBus_WriteRegister($MBF_RELAY_STATE, 0);
Hinweis: Die übergebene 0 schaltet alle Relais aus. Ebenso schaltet die übergebene 4 beim einschalten nur das Relais 3 ein und alle anderen aus.
Warum ist das so ?
In der Übergabe muss immer der Status aller Relais übergeben werden welche eingeschaltet werden oder bleiben sollen. Im Hintergrund wird eine Bitmaskierung gemacht. Somit wird nur das Bit beim schalten berücksichtigt, welches auf 1 gesetzt / übergeben wurde.
Ein weiteres Beispiel dazu:
Möchte man nun die Pumpe, welche auf Relais 2 angeschlossen ist, beim Einschalten von der Beleuchtung ebenfalls weiter laufen lassen, übergibt man als Parameter anstelle der 4 eine 6.
Wo kommt denn die 6 aufeinmal her ?
Generell gelten folgende Wertigkeiten für die jeweiligen Bits welche die Relais repräsentieren:
Relais 1 ist Bit 1 Wertigkeit 1
Relais 2 ist Bit 2 Wertigkeit 2
Relais 3 ist Bit 3 Wertigkeit 4
Relais 4 ist Bit 4 Wertigkeit 8
Relais 5 ist Bit 5 Wertigkeit 16
… usw.
Somit ergibt sich für Relais 2 und Relais 3 als Wertigkeit 2+4=6, welches als Parameter übergeben werden muss um diese beiden Relais eingeschaltet zu lassen. Alle anderen Relais wurden nicht mitgegeben (nicht maskiert) und werden ausgeschaltet.
Bleiben wir noch kurz beim Beispiel der Pumpe
Was muss übergeben werden, wenn man nur die Beleuchtung aber nicht die Pumpe ausschalten möchte ? Ihr habt richtig geraten, eine 2.
Wer etwas C lesen und verstehen kann, findet in diesem Projekt viele Infos zu den Multiregistern und dessen Auflösung. Außerdem auch eine kurze Beschreibung der einzelnen Register auf Englisch:
Ebenfalls lesenswert wenn es um Probleme / Details bei dem Anschluss der Anlage (von Bayrol, Sugar Valley und wie sie alle heißen) an Modbus geht:
An dieser Stelle geht ein dicker Dank an @Christian79 und @Helmut für die Hilfestellung per PN zur Lösung dieses Problems raus.
Ich hoffe, ich konnte dieses Thema etwas beleuchten und dem Einen oder dem Anderen für die Zukunft weiterhelfen!
Bitte macht euch, bevor ihr irgendetwas ausprobiert, gut mit eurer Anlage vertraut! Nicht damit ihr ausversehen irgendetwas schaltet was ihr gar nicht möchtet, und im Worst-Case irgendetwas kaputt macht. Ich übernehme selbstverständlich keine Haftung 
P.S. das ganze Skript drum rum, müsst ihr euch natürlich selbst bauen. Eventuell hat auch jemand Lust und Zeit das mal in ein Modul für alle zu kippen. Mir fehlt leider beides aktuell, sonst hätte ich es gemacht.
Grüße
Daniel