Wago /SPS über Modbus(TCP/IP) in FHEM steuern

Begonnen von lechez, 05 Mai 2013, 10:50:13

Vorheriges Thema - Nächstes Thema

bitvilla

Hallo ChrisD,

habe die angehängte Datei eingespielt und FHEM neu gestartet.
Anbei die Ausgaben im Logfile mit verbose 4:


2018.11.08 18:15:32 3: WagoMD216: I/O device is wago
2018.11.08 18:15:32 3: WagoMD217: I/O device is wago
2018.11.08 18:15:32 3: WagoMW206: I/O device is wago
2018.11.08 18:15:32 3: WagoMW207: I/O device is wago
2018.11.08 18:15:32 1: Including FHEM/fhem_myConfig_allgemein.cfg
2018.11.08 18:15:33 3: SUSV: using I2C Address 15
2018.11.08 18:15:34 3: SUSV: Found firmware 2.61 - Basic
2018.11.08 18:15:34 1: Including ./log/fhem.save
2018.11.08 18:15:34 3: Opening wago device 192.168.13.240:502
2018.11.08 18:15:34 4: AddRQueue [20 10 00 00 00 06] 00 03 20 10 00 01
2018.11.08 18:15:34 4: AddRQueue [20 11 00 00 00 06] 00 03 20 11 00 01
2018.11.08 18:15:34 4: AddRQueue [20 12 00 00 00 06] 00 03 20 12 00 01
2018.11.08 18:15:34 4: AddRQueue [20 13 00 00 00 06] 00 03 20 13 00 01
2018.11.08 18:15:34 4: AddRQueue [20 14 00 00 00 06] 00 03 20 14 00 01
2018.11.08 18:15:34 4: AddRQueue [10 22 00 00 00 06] 00 03 10 22 00 04
2018.11.08 18:15:34 3: wago device opened
2018.11.08 18:15:34 0: Featurelevel: 5.9
2018.11.08 18:15:34 0: Server started with 176 defined entities (fhem.pl:17652/2018-10-31 perl:5.020002 os:linux user:fhem pid:3546)
2018.11.08 18:15:35 3: telnetForBlockingFn_1541697335: port 32961 opened
2018.11.08 18:15:37 4: RQUEUE: 5
2018.11.08 18:15:37 4: RQUEUE: 4
2018.11.08 18:15:37 4: RQUEUE: 3
2018.11.08 18:15:37 4: RQUEUE: 2
2018.11.08 18:15:38 4: RQUEUE: 1
2018.11.08 18:15:42 4: AddRQueue [FD E8 00 00 00 06] 00 03 30 C8 00 08
2018.11.08 18:15:42 4: AddRQueue [FD E9 00 00 00 06] 00 03 31 90 00 26
2018.11.08 18:15:42 4: AddRQueue [FA 00 00 00 00 06] 00 01 00 20 00 20
2018.11.08 18:15:42 4: AddRQueue [FA 01 00 00 00 06] 00 01 02 28 00 18
2018.11.08 18:15:42 4: AddRQueue [FA 02 00 00 00 06] 00 01 10 00 00 50
2018.11.08 18:15:42 4: AddRQueue [FA 03 00 00 00 06] 00 01 36 40 00 30
2018.11.08 18:15:42 4: RQUEUE: 5
2018.11.08 18:15:42 4: RQUEUE: 4
2018.11.08 18:15:42 4: RQUEUE: 3
2018.11.08 18:15:44 4: RQUEUE: 2
2018.11.08 18:15:44 4: RQUEUE: 1


Die Meldung "ModbusTCPServer_Parse: except (code 2)" erscheint jetzt nicht mehr.
Ein Funktionstest der aktuellen Konfiguration war ebenfalls erfolgreich.

Habe aktuell leider keinen Zugriff bzw. keinen Bedarf für eine analoge Schnittstellenkarte.
Sonst könnte ich anbieten den kompletten Datenaustausch zwischen FHEM und WAGO über analoge Werte zu testen.

Vielen Dank für Deine Entwicklungsarbeit!

Freundliche Grüße
bitvilla

bitvilla

Hallo ChrisD,

habe die letzte Version von Modbus_TCPServer (#479) nun seit ca. 5 Wochen erfolgreich im Einsatz.
Wollte mal Fragen ob die Version offiziell eingecheckt wird?
Aktuell überschreibt FHEM die angepasste Datei bei jedem Update.

Freundliche Grüße
bitvilla

der-Lolo

Die Meldung

2018.12.15 15:01:13 2: ModbusTCPServer_Parse: except (code 2)

hab ich auch bei jedem neustart, wäre natürlich schön wenn die weg wäre.

ChrisD

Hallo,

Ich hatte leider vergessen die Module auf Github zu aktualisieren. Ich habe dies jetzt nachgeholt so dass bei einem Update die aktuelle Version heruntergeladen werden sollte.

Grüße,

ChrisD

WagoAndreas

Hallo Leute,

DANKE für diesen tollen Beitrag hier. Ohne den ich es nicht geschafft hätte eine Kommunikation zwischen FHEM und meiner 750-841 zu erstellen.
Ich hänge gerade leider ein bisschen. Vielleicht hat jemand einen Tipp für mich? Wahrscheinlich habe ich es mindestens 5x überlesen. Aber ich bekomm es nicht hin.

ich habe ein FHZ1300 über den ich Werte von meinen FS20 Temperaturreglern bekomme. Dies funktioniert einwandfrei. Kommunikation zur WAGO SPS steht auch, wie hier beschrieben. Jedoch schaffe ich es nicht EINEN Temperaturwert in das MW21 z.b. zu schreiben.

Bad ist z.b. so deklariert:
-------
FHT_DachBad
   
19.3 °C
   
FHT_DachBad
Internals
CODE
   
4409
DEF    
4409
FHZ_0_MSGCNT
   
150
FHZ_0_RAWMSG
   
810c04f00909a00144090000b63a
FHZ_0_TIME
   
2018-12-27 21:16:15
IODev
   
FHZ_0
LASTInputDev
   
FHZ_0
MSGCNT
   
150
NAME
   
FHT_DachBad
NR
   
30
STATE
   
measured-temp: 19.3
TYPE
   
FHT
Readings
ack
   
30
   
2018-12-27 21:10:32
actuator
   
8%
   
2018-12-27 21:25:53
battery
   
ok
   
2018-12-27 21:10:31
desired-temp
   
19.0
   
2018-12-27 19:09:13
end-xmit
   
30
   
2018-12-27 20:58:58
lowtemp
   
ok
   
2018-12-27 21:10:31
measured-temp
   
19.3
   
2018-12-27 21:10:31
state
   
measured-temp: 19.3
   
2018-12-27 21:10:31
temperature
   
19.3
   
2018-12-27 21:10:31
warnings
   
none
   
2018-12-27 21:10:31
window
   
closed
   
2018-12-27 21:10:31
windowsensor
   
ok
   
2018-12-27 21:10:31
----------------------------------------------------------

Dann ein Wort als INT was zur zeit ein Slider ist um es halt testen zu können ob werte in die SPS übertragen werden mit folgenden
Attributes

Internals
CFGFN
   
CHANGED
   
DEF    
wago MW21
IODev
   
SPS
LASTInputDev
   
SPS
MSGCNT
   
8641
ModbusRegister_lastRcv
   
2018-12-27 21:28:55
NAME
   
MB_T_RolloAuf
NOTIFYDEV
   
global
NR
   
220
NTFY_ORDER
   
50-MB_T_RolloAuf

IODev
   
SPS
   
deleteattr
event-on-change-reading
   
.*
   
deleteattr
plcDataType
   
INT
   
deleteattr
setList
   
state:slider,10,2,30
   
deleteattr
webCmd
   
state
   
deleteattr

-----------------------------------------------

Derzeit schreibt er brav ins MW21 wenn ich etwas an dem slider spiele. So wie kann ich nun diese zwei Variabeln verbinden???

VIELEN DANK FÜR EURE HILFE!!!!!!!!!!!!!!!!!!!!!!

ChrisD

Hallo,

Du kannst den Wert vom FHT mit Hilfe von 'notify' weitersenden. Informationen zu 'notify' findest du hier.

Zum Übertragen der Ist-Temperatur sollte dies funktionieren:
define n_FHT_DachBad_MW21 notify FHT_DachBad:measured-temp.* set MB_T_RolloAuf $EVTPART1
Hiermit wird die Temperatur ohne Nachkommastelle übertragen.

Wenn die Nachkommastelle auch übertragen werden soll gibt es 2 Möglichkeiten:

- die Temperatur wird vor dem Senden mit 10 multipliziert, im SPS-Programm wird dann aus 19.3 der Wert 193:
attr MB_T_RolloAuf conversion 0.1:0

- der Wert wird als Gleitkommazahl übertragen, dazu muss die Definition von MB_T_RolloAuf geändert werden, z.B.:
defmod MB_T_RolloAuf wago MF200
im SPS-Programm muss die Deklaration der Variable auch angepasst werden:
MB_T_RolloAuf AT %MD200 : REAL;

Grüße,

ChrisD

WagoAndreas

VIELEN VIELEN DANK funktioniert wunderbar. So jetzt werd ich noch bissl basteln. DANKE!

peter.oehlmann@web.de

Hallo ,
ich habe meine Wago an FHEM angebunden , um Werte von Sensoren in die Wago einzulesen und FHEM als Gateway für die Wago zu verwenden. Die Kopplung von einzelnen Bits und Messwerten funktioniert eigentlich tadellos.
Problem : das zyklische Schreiben von dem Reading "brightness" auf das Modbus Register wago MF100. In der Komandozeile kann ich eingeben:

set MF100 1234

und der Wert wird wunderbar in die SPS geschrieben.Dafür habe ich nun das Notify mit folgendem Inhalt angelegt:

Motion_Kota:brightness:.* set MF100 $EVENT

Fehlermeldung im Logfile ist :

MF100_NF return value: Unknown argument brightness:, choose one of off on  on-till-overnight on-for-timer off-till-overnight blink off-till off-for-timer on-till toggle intervals

Das Format des Wertes in Reading passt aus meiner Sicht und da ich ja mit der Kommandozeile den Wert schreiben kann,
beweist , dass es geht.
Ich probiere seit Tagen verschiedene Varianten aus und lese Anleitungen , aber das Notify will nicht funktionieren.
Ich hoffe, ihr seid so nett und könnt mir helfen. Der Zeitaufwand vom ersten Gedanken das Gateway FHEM zu nutzen
und alles durch Anlesen zu erlernen ist schon recht hoch. Das hätte ich nicht gedacht. Eine Beschreibung über Modbus
und die Definitionen , die sich aus "wago" ergeben kann ich auch nicht finden. Man muss immer das ganze Forum durchstöbern.
Gibt es da etwas?

Gruß

Peter

ChrisD

Hallo,

Dies ist kein Modbus oder Wago-Problem sondern ein Problem mit deinem notify. $EVENT enthält das gesamte Ereignis, in deinem Fall z.B.
brightness: 160

Damit führt das notify folgenden Befehl aus
set MF100 brightness: 160
was natürlich nicht funktioniert.

In deinem Fall dürfte dies dagegen funktionieren:
Motion_Kota:brightness:.* set MF100 $EVTPART1

Weitere Details zum notify findest du sowohl in der Commandref als auch im Wiki.

ZitatEine Beschreibung über Modbus und die Definitionen , die sich aus "wago" ergeben kann ich auch nicht finden.
Wenn du 'wago' verwendest kannst du die gleichen Adressen wie im Koppler verwenden. Das Modul sorgt intern dafür dass die richtigen Parameter für Modbus-Adresse, Datenlänge und Datentyp gesetzt werden.

Grüße,

ChrisD

peter.oehlmann@web.de

Erstmal vielen Dank,
ich habe $EVTPART1 gerade eingetragen und es kam ein Wert vom Sensor , dann hat es funktioniert.
$EVTPART1 hatte ich vorher schon ohne Erfolg getestet , da kam aber kein echter Wert vom Sensor,
sondern ich habe mit "trigger MF100_NF" das Notify getriggert. Wenn ich das jetzt wieder mache,
passiert wieder nichts. Ist ja eine nützliche Funktion das Triggern , aber wie macht man es richtig?
Jetzt muss ich bis morgen warten , bis der Sensor wieder hell sieht , um sicher zu gehen , dass es
geht.

Gruß

Peter

ChrisD

Hallo,

Du solltest nicht das notify triggern sondern den Auslöser, also z.B.
trigger Motion_Kota brightness: 160

Grüße,

ChrisD

der-Lolo

Hallo ChrisD,
lange war es wieder still - das liegt daran, dass Dein Modbus/Wago Modul absolut störungsfrei arbeitet und keinerlei Probleme auftreten.
Nochmal ein Dickes Lob von mir..!

Ich versuche gerade meine FB_Dim zu erweitern, ich hoffe Du erinnerst Dich das Du mir hiermit so toll geholfen hast.
Weil der Dimmer ja grundsätzlich zu schnell war haben wir noch einen "DimTakt" eingebaut um den Dimmer so zu verlangsamen.

Auch das funktioniert ausgezeichnet. Nun bin ich aber endlich soweit das per Taster die Lautstärke meiner Sonos Speaker angepasst werden soll. Auch hierzu benutze ich den FB_Dim - es funktioniert auch alles wie es soll, nur bei der Lautstärke regelbar von 0-65 fällt auf das der Baustein immernoch zu schnell ist.

Nun habe ich gedacht ich füge den DimTakt als Eingangsvariable hinzu um den Dimmer bei den Sonos Speakern weeiter zu entschleuningen. Wenn ich aber in der Baustein deklaration bei VAR Input Date Time hinzuschreibe wird kein weiterer Eingang des Bausteines erzeugt, ein anderer Eingang des FBs - (VAR_IN_OUT) Lightlevel verschwindet dann. Ich kann es mir nicht erklären...

Den Dimtakt und die Limits würde ich nun gerne noch als Eingänge haben um den Baustein so auch für Sonos nutzen zu können..

Kannst Du helfen? Hab den Baustein an diesen Post angehangen...

Danke im vorraus!




ChrisD

Hallo,

Wenn ich die Deklaration von DimTakt nach VAR_INPUT verschiebe werden im Kontaktplan alle Instanzen von FB_Dim um einen zusätzlichen Eingang erweitert.

Was passiert wenn du eine neue Instanz hinzufügst, fehlen dann auch die Eingänge ?

Lässt sich das Projekt noch kompilieren ?

Grüße,

ChrisD

der-Lolo

Danke ChrisD,
keine ahnung was das war - wahrscheinlich hatte sich Codesys irgendwie aufgehangen...
Jetzt hat es funktioniert...

WagoAndreas

Hallo Leute, Hallo ChrisD,
ich mach mal wieder mit meiner WAGO FHEM Geschichte weiter und hänge nun an den Fensterkontakte. Diese werden, wie man ja in meinem oberen Beitrag sehen kann, nur als open oder closed übergeben. (1 oder 0 wäre wahrscheinlich einfacher)
wie kann ich denn das open oder closed übertragen? Wie wäre mir egal. Entweder ich übertrage open und closed an die SPS und ändere mir das dort in 1 oder 0
oder ich Konvertiere das in FHEM in 1 oder 0 und übertrage es dann an die SPS. Wie es halt einfacher geht.

VIELEN VIELEN DANK FÜR DIE HILFE!!