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

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

Vorheriges Thema - Nächstes Thema

PEPITO82

Ich habe gerade noch versucht die Modbus Adresse meiner Waterkotte Wärmepumpe als ModbusCoil zu definieren.
Dort erhalte ich dann aber folgende Meldungen:

2015.03.16 19:34:55 3: wp_WW_Handabschaltung_Test: I/O device is myWaterkotte
2015.03.16 19:34:57 1: ModbusTCPServer_Parse: bad frame, sent: SimpleWrite [13 A7 00 00 00 06] 00 01 13 A7 00 08
2015.03.16 19:34:57 1: ModbusTCPServer_Parse: bad frame, received:  [13 A7 00 00 00 03] 00 81 02


Ansich wäre das über einen Coil schöner gelöst, weil es dann ja direkt ein Schalter wäre...

ChrisD

Hallo,

Die Rückmeldung 81 02 bedeutet dass die Adresse ungültig ist. Aus der Dokumentation ist nur schwer ersichtlich welche Adressen wie angesprochen werden sollen. Die Adressen scheinen bei 1 zu beginnen, dies könnte darauf hinweisen dass es nicht Adressen sondern Registernummern sind. Du könntest versuchen ob mit
define wp_WW_Handabschaltung_Test ModbusRegister 0 40158ein Zugriff möglich ist (ohne irgendwelche anderen Attribute außer IODev).

Über das Attribut eventMap kannst du das Register in einen Schalter umfunktionieren:
attr wp_WW_Handabschaltung_Test eventMap 0:off 1:on

Grüße,

ChrisD

oniT

Zitat von: PEPITO82 am 16 März 2015, 08:13:03
Das Register ist aber scheinbar Nr. 5030 (Heizung) bzw. 5032.

Vermutlich gehen die analogen Variablen von Register 1 - 1000 und die Integer Variablen von 5000 - 7000.

Ist es korrekt eingestellt?
Seitdem ich Register 5030 nochmal neu definiert habe, gab es keine Logeinträge mehr.
Zuvor hatte ich es wahrscheinlich zuerst mit Register 158 probiert (lt. der beigefügten Doku) und anschließend auf 5030 geändert.

Hallo,

ja das ist korrekt. Register welche Analogwerte enthalten werden 1 zu 1 umgesetzt, zum Lesen oder Schreiben eines Integer muss ein Offset von 5000 oder ich meine sogar je nach Firmware auf der pCOWeb 5001 gesetzt werden.

Gruß
Tino
BBB - debian weezy - FHEM 5.7
HMLAN - HM-LC-Bl1-FM, HM-ES-PMSw1-PI, HM-LC-Sw1-FM, HM-TC-IT-WM-W-EU, HM-WDS40-TH-I, HM-Sen-Wa-Od, HM-Sec-RHS
Dimplex Wärmepumpe / Dimplex ZL 300 - Modbus TCP
SDM630M - Modbus TCP
SolarLog 200 / SMA SonnyBoy 1.5/2.5 - Modbus TCP

oniT

Zitat von: ChrisD am 14 März 2015, 21:14:54
Zum Installieren kannst du in FHEM dies eingeben:
update 36_ModbusRTU https://raw.githubusercontent.com/ChrisD70/FHEM-Modules/master/autoupdate/mb/controls_modbus.txt

Hallo ChrisD,

verstehe ich das richtig, dass man diesen Befehl nicht nur für ein Update sondern wie Du schreibst auch zum Installieren des Moduls nutzen kann? Wenn dies so ist, dann erweitere ich den Wiki-Artikel. Dann tut man sich schon wieder leichter und muss die Dateie nicht erst downloaden und mittels FTP übertragen.

Gruß
Tino
BBB - debian weezy - FHEM 5.7
HMLAN - HM-LC-Bl1-FM, HM-ES-PMSw1-PI, HM-LC-Sw1-FM, HM-TC-IT-WM-W-EU, HM-WDS40-TH-I, HM-Sen-Wa-Od, HM-Sec-RHS
Dimplex Wärmepumpe / Dimplex ZL 300 - Modbus TCP
SDM630M - Modbus TCP
SolarLog 200 / SMA SonnyBoy 1.5/2.5 - Modbus TCP

ChrisD

Hallo,

Ich habe die Möglichkeit die Module über 'update' herunterzuladen hinzugefügt da es umständlich und fehleranfällig ist sie manuell zu installieren.

Du kannst mit
update all https://raw.githubusercontent.com/ChrisD70/FHEM-Modules/master/autoupdate/mb/controls_modbus.txtalle Module herunterladen resp. updaten. Es werden dabei nur die Module heruntergeladen die aktualisiert werden müssen.

Die Module können auch einzeln installiert werden:
update 36_ModbusRTU https://raw.githubusercontent.com/ChrisD70/FHEM-Modules/master/autoupdate/mb/controls_modbus.txt
update 36_ModbusTCPServer https://raw.githubusercontent.com/ChrisD70/FHEM-Modules/master/autoupdate/mb/controls_modbus.txt
update 37_ModbusCoil https://raw.githubusercontent.com/ChrisD70/FHEM-Modules/master/autoupdate/mb/controls_modbus.txt
update 37_ModbusRegister https://raw.githubusercontent.com/ChrisD70/FHEM-Modules/master/autoupdate/mb/controls_modbus.txt

In dem Fall wird aber nicht überprüft ob eine neuere Version vorliegt, die bestehende wird immer mit der Serverversion überschrieben.

Wenn nach den Aufrufen ein Update von FHEM gemacht wird, wird die Dokumentation der Modbus-Module automatisch in die Commandref mit übernommen.

Grüße,

ChrisD

PEPITO82

Zitat von: oniT am 16 März 2015, 21:41:11
Hallo,

ja das ist korrekt. Register welche Analogwerte enthalten werden 1 zu 1 umgesetzt, zum Lesen oder Schreiben eines Integer muss ein Offset von 5000 oder ich meine sogar je nach Firmware auf der pCOWeb 5001 gesetzt werden.

Gruß
Tino

Im Handbuch von Carel steht zu pCOWeb noch das Folgende:

The ranges of variables for version 1.4.2 (when pCO communicates using Modbus extended protocol) have been extended as explained here below:

Digital variables: coils from 1 up to 2048
Analogue variables: registers from 1 up to 5000
Integer variables: registers from 5001 to 10000

Variable types: Signed Integers
(mandatory in some software to
correctly read/write the variables)

Danke für die Hilfe.  :)

@ChrisD: Danke für den Tipp mit dem Attribut eventMap. Jetzt habe ich endlich einen Schalter. Es fehlt mir dann nur noch die Zeitsteuerung.

der-Lolo

Hallo ChrisD,
ich habe heute morgen endlich das letzte von Dir empfohlene Update eingespielt
( set_on - set on )
die Wago SPS war und ist zur Zeit ausgeschaltet, es kommen ein paar Perl Meldungen im Log an...

Zitat2015.03.30 10:14:59 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/36_ModbusTCPServer.pm line 740.
2015.03.30 10:14:59 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/36_ModbusTCPServer.pm line 722.
Vielleicht schaust Du bei Gelegenheit mal danach...

BTW - was muss eigentlich noch getan werden um das Modul Offiziell einzuchecken?
Wäre toll wenn es irgendwann über den FHEM Mechanismus seine updates bekommt.

ChrisD

Hallo,

Ich habe den Fehler behoben, kannst du die aktuelle Version (nach einem FHEM-Neustart) testen ?

ZitatBTW - was muss eigentlich noch getan werden um das Modul Offiziell einzuchecken?
Wäre toll wenn es irgendwann über den FHEM Mechanismus seine updates bekommt.
Die Module sind eigentlich fertig um eingecheckt zu werden. Da Stefan Strobel aber kürzlich seine Modbus-Module eingecheckt hat und ich es nicht gut finde wenn es 2 unterschiedliche offizielle Modulfamilien für den gleichen Anwendungszweck gibt werde ich meine Module im Moment weiterhin über Github bereitstellen.

Grüße,

ChrisD

der-Lolo

Stefan hat aber doch kein TCP Modbus, oder?

ChrisD

Doch, die aktuelle Version kann TCP und RTU, TCP hat er erst vor Kurzem hinzugefügt.

der-Lolo

Mir war noch gar nicht klar das es weitere Module gibt... Ich schaue mir das mal an - du hast ja nun noch eine handvoll sonder sachen für Wago eingebaut, vielleicht ist eine Idee ein eigenes Wago_modbus modul daraus zu machen...

oniT

Hallo,

ich habe das Modul von Stefan Strobel auch gesehen. Ich muss jedoch sagen ich komme damit nicht zurecht. Dies von Dir ist für bestimmte Anwendungen, zumindest aus meiner Sicht, besser geeignet.

Gruß
Tino
BBB - debian weezy - FHEM 5.7
HMLAN - HM-LC-Bl1-FM, HM-ES-PMSw1-PI, HM-LC-Sw1-FM, HM-TC-IT-WM-W-EU, HM-WDS40-TH-I, HM-Sen-Wa-Od, HM-Sec-RHS
Dimplex Wärmepumpe / Dimplex ZL 300 - Modbus TCP
SDM630M - Modbus TCP
SolarLog 200 / SMA SonnyBoy 1.5/2.5 - Modbus TCP

oniT

Zitat von: Dieter1 am 15 Februar 2015, 10:36:25
Ich habe einen Stromzähler SDM630 mit RS485/Modbus Anschluss.
Da ich noch weitere RS485 Messstellen plane, meine seriellen Anchlüsse begrenzt sind und neue serielle Leitungen mir ein Greuel sind  :-) wollte ich auf das setzen, was ich überall verfügbar habe: TCPIP over LAN, WLAN oder dLAN.
Lösung: Modbus über TCPIP schicken und vorort in RS485 wandeln. TCPIP<->RS485 Wandler (TCP232-24, ca. 20,- € bei ebay)

Halllo Dieter,

würdest Du hierüber noch ein wenig genauere Ausführungen machen. Da ich leider nicht an die Messungen vom Haushaltstromzählers komme, finde ich die Lösung ziemlich elegant. Muss bei dem TCP IP<->RS485 Converter noch etwas beachtet werden? Welches 5V Netzteil setzt Du für die Spannungsversorgung ein? ... ect. pp. ...

Danke,

Gruß
Tino
BBB - debian weezy - FHEM 5.7
HMLAN - HM-LC-Bl1-FM, HM-ES-PMSw1-PI, HM-LC-Sw1-FM, HM-TC-IT-WM-W-EU, HM-WDS40-TH-I, HM-Sen-Wa-Od, HM-Sec-RHS
Dimplex Wärmepumpe / Dimplex ZL 300 - Modbus TCP
SDM630M - Modbus TCP
SolarLog 200 / SMA SonnyBoy 1.5/2.5 - Modbus TCP

lixilian

Hallo zusammen,

ich hab ein kleines Verständnisproblem. Ich habe eine Wago SPS, welche ich über
define Wago ModbusTCPServer 192.168.x.x:502
auch wunderbar bekanntmachen kann. Nun möchte ich auf bestimmte Merkeradressen in der Wago zugreifen (Bit und Byte-Format). Also gebe ich z.B.
define SPS_Bit1 ModbusRegister 0 12297
ein und hoffe, das in der Wago gesetzte Bit zu sehen. Geht aber nicht. Das Attribut plcDataType lässt ja auch kein Bit zu. Ok. Aber selbst beim Zugriff auf Byte-Werte bekomme ich komische Ergebnisse (z.B. 3200 statt 50). Was mache ich falsch?

Danke schon mal für die Hilfe!

pc1246

Hallo lixilian

3200 ist doch 50! Zumindest wenn Du nur den linken Teil betrachtest und das als Hexwert nimmst! (3*16 + 2)
Ich habe das Modbus- Projekt aufgegeben, da ich Speicherplatzprobleme in der SPS hatte, deswegen kann ich Dir nicht so richtig weiterhelfen! Da war, wenn ich mich recht erinnere was mit den Registern!
Aber ChrisD wird dir bestimmt weiterhelfen!

Gruss und viel Spass noch mit fhem
Christoph
HP T610
Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; HM-USB mit 15 HM-CC-RT-DN, 3 HM_WDS10_TH_O, 6 HM-Sec-SCo, 4 HM-Sec-MDIR-2, 1 HM-Sen-MDIR-O-2, 8 Ferion 5000 OW ; PhilipsTV; 4 harmony hub; Jeelink mit 9 PCA301; Somfy; S7-300; 3 LGW; HUE; HM-IP auf Charly