Modbus Leuchten und Taster

Telefisch

New member
Hallo Forum,
vor rund 20 Jahren habe ich in mein Haus eine SPS-Steuerung eingebaut, die u.a. das gesamte Licht steuert.
Sie hat digitale Eingänge, die mittels Tastern gesteuert werden und digitale Ausgänge, die mittels Relais einige Steckdosen und alle Leuchten steuern.
Auf diese beiden „Signale“ habe ich Zugriff mittels Modbus (TCP).
Die SPS übernimmt also bei einem kurzen Impuls auf einem Eingang das Umschalten des Ausgangs, im Prinzip wie ein „Eltako“.
Jetzt möchte ich von ioBroker auf HA umsteigen und beschäftige mich grade mit der Modbus Integration.
Da ich keinen direkten Datenpunkt habe, mit dem ich direkt einen SPS-Ausgang ansteuern kann habe ich das in meinem ioBroker wie folgt gelöst:

Es gibt einen Datenpunkt im ioBroker der Quasi die Leuchte darstellt.
Ändert sich ein Ausgang wird der Datenpunkt ebenfalls geändert.
Wird der Datenpunkt über eine Visualisierung (oder Sprachassistenten) geändert, vergleicht ein Script den Datenpunkt mit dem Ausgang und wenn beides nicht gleich ist, wird ein kurzer Impuls an den Digitaleingang gesendet (als ob jemand einen Taster drückt).

Jetzt habe ich mich mit der Modbus-Integration vom HA mal auseinandergesetzt und finde da Entitäten wie Light.
Können diese Entitäten das ganze gescripte obsolet machen?
Hat jemand eine ähnliche Konstellation mal umgesetzt und kann mir etwas Starthilfe geben?

Danke Euch
Gruß
Carsten
 
Nun ja, nach meinem Verständnis ist der Ausgang, der das Relais ansteuert für den Modbus ein Signal, wie ein Sensor. Den kann man aber meines Erachtens nur lesen und nicht schreiben, oder sehe ich das falsch?
Der Ausgang wird ja von der SPS gesteuert nicht vom Modbus…?

Die Eingänge der SPS (Taster) werden vom ioBroker-Modbus als Coils und die Ausgänge (Lampen) als Discrete Input interpretiert.
 
Zuletzt bearbeitet:
Kommt auf das Modbus Register an. Es gibt Eingangs- und Ausgangsbits (Coils und Discrete Inputs) alles andere sind 16-Bit Register.
Aus welchem Register die SPS Ihr Signal holt weis nur der Programmierer. Für Modbus bekommst Du auch Programme mit denen man die einzelnen Register beeinflussen kann.
Um das Ganze zu nutzen brauchst Du erst einmal die Information welches Gerät welchem Register zugeornet ist. Von daher gibt es schon einen festen Datenpunkt der dann auch direkt auf den SPS-Ausgang wirkt. Das wäre der "Normalfall".
Man kann natürlich auch nur irgendwelche Daten übertragen und die in der SPS interpretieren. Beispiel: Wenn eine 14 im Register steht wird Lampe 3 eingeschaltet und bei 27 wird sie ausgeschaltet.
Das findest Du alles im SPS-Programm. Was ist denn das für eine SPS und hast Du das Programm?
 
Wenn der Modbus nur verwendet wird um den Signalzustand anzuzeigen dann kannst Du darüber nichts steuern - das ist richtig.
Aber Programme kann man ja ändern.:cool:
 
Jeder DI und jeder DO hat seine eigene Adresse, soweit alles bekannt. Läuft im iobroker ja mit dem oben geschriebenen „Umweg“
Die DI sind als coil und die DO als Discrete Input definiert.
Ich muss mal schauen, ob ich da rein komme und das umprogrammieren kann.

Machen Register eigentlich Sinn, wenn es immer nur um einen einzelnen Status/Befehl geht?
Das ist doch mit einzelnen Adressen viel übersichtlicher…
 
Ja genau.
Nur wer schaltet 16 Lampen auf einmal.
Ganz im Gegenteil, ich muss mir für jede neue Aktion den aktuellen Zustand der 15 anderen Lampen holen um die nicht zu überschreiben.
Wie auch immer, ich versuche mal in die SPS zu kommen.
Danke erstmal
 
@amiko richtig! Man kann alles einzeln lesen/schreiben und es wird dann alles auf einmal aktualisiert. Und die Kommunikation hat weniger Overhead, Aber das nur am Rande. Zunächst muss es überhaupt funktionieren. Optimieren kann man es immer noch.
 
Genau, erstmal muss es funktionieren.
Also, ich bin im Programm.
Da hab ich vor 20 Jahren einen Funktionsbaustein „gebastelt“, der einen Trigger Eingang, einen Master ON-Eingang und einen Master OFF-Eingang hat.
Als Ausgang ist dann einmal der physische Ausgang verknüpft und die Modbus Input Coil (für den Modbus ist es ja ein Input).
Auf den Trigger Eingang habe ich jeweils einen Modbus Output Coil gelegt, parallel zu den physichen Tastern (Oder-Verknüpft).

Also der FB erwartet einen Triger-Impuls und schaltet dann einen Ausgang.
Wenn ich versuche am Ausgang auch ein mb_Output_Coil anzulegen bekomme ich in der HA-Automation zu sehen, dass die Entität nicht bereitgestellt ist.

Für HA ist es ja im Prinzip gleichzeitig sowohl ein Ein- als auch ein Ausgang
Jetzt die Masterfrage… wat nu?
Wie gesagt, im ioBroker habe ich es mittels Script hinbekommen, aber das scheint mir irgendwie nicht richtig.
 
Zuletzt bearbeitet:
Hallo @Telefisch,
ok noch einmal von vorne: Es gibt eine SPS mit Modbus. Die Ausgänge der SPS schalten Geräte. Hierfür gibt es einen FB dessen Eingänge über Modbus betätigt werden. Steuerungsaufgabe ist wenn in HA die Taste gedrückt wird das entsprechende Modbus Register zu setzen damit das Gerät geschaltet wird. Richtig?
Mit der Modbus Integration habe ich noch nichts gemacht aber das könnte ich mal mit einer Steuerung testen. Ich hätte hier eine Siemens Logo oder eine S7-1200. Beide können Modbus.
 
Also den Weg, wie ich Modbus ansteuere kenne ich, das ist nicht mein Problem.

Das eigentliche Problem ist, dass in einer Visualisierung ein Schalter eingesetzt wird um eine Lampe einzuschalten.
Ich muss also bei Einschalten und Ausschalten jeweils einen Impuls senden. Der Status des Schalter ist aber die Lampe, also das, was von der SPS geschaltet wird.

Ich hatte gehofft, dass man das evtl. mit dem Modbus doch anders hinbekommt.

So funktioniert es seit Jahren im ioBroker:

//Büro-Licht
//Reaktion auf Softtaster
on({id: 'Beckhoff.0.EG.Büro-Licht.state'}, function (obj) {
if (getState("Beckhoff.0.EG.Büro-Licht.state").val != getState("modbus.0.discreteInputs.32769_Licht_Buero_unten").val)
{
setState("modbus.0.coils.32769_Taster_Buero_unten", true);
setState("modbus.0.coils.32769_Taster_Buero_unten", false);
}
});
//Reaktion auf Steuerung
on({id: 'modbus.0.discreteInputs.32769_Licht_Buero_unten'}, function (obj){
setState("Beckhoff.0.EG.Büro-Licht.state", getState("modbus.0.discreteInputs.32769_Licht_Buero_unten").val);
});

Im Einzelnen:
Beckhoff.0.EG.Büro-Licht ist eine binäre Variable, die als Schalter in die Visu eingesetzt wird.
modbus.0.discreteInputs.32769_Licht_Buero_unten ist der Ausgang, den die SPS setzt.
Ich vergleiche Also, Ist Variable ungleich Ausgang SPS, schalte den SPS Eingang einmal ein und wieder aus.
unten setze ich dann bei Änderung des SPS-Ausgang nochmal die Variable für den Schalter auf den gleichen Status, damit der echte Zustand angezegt wird, wenn mal jemand den normalen Taster verwendet.

Mittlerweile glaube ich, dass ich auch hier den Weg gehen muss, muss also das Script als Template-Switch realisieren.
Damit komme ich allerdings noch gar nicht klar.

HTH
Carsten
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
6.746
Beiträge
64.847
Mitglieder
7.033
Neuestes Mitglied
mr..speed
Zurück
Oben