Neues Modul für Geräte mit Modbus Schnittstelle über RS232 bzw. RS485

Begonnen von StefanStrobel, 12 Juli 2014, 14:50:22

Vorheriges Thema - Nächstes Thema

StefanStrobel

#45
Hallo,

Modbus-TCP wäre eine offensichtlich sinnvolle Erweiterung. Die Unterschiede sind nicht groß. Leider habe ich kein Gerät mit Modbus-TCP Schnittstelle zum Testen. Hat von Eich jemand so etwas und würde das Testen übernehmen?

Anbei eine neue Version für Euch zum Testen.

Ich habe das Debug-Log noch ein wenig verschönert, es gibt ein paar neue Keys für logische Module und ein paar Änderungen an der Bedeutung alter Keys:

in deviceInfo gibt es nun defPoll, defShowGet (Bedeutung sollte klar sein, Beispiele wie immer im ModbusSET Modul)

defaultpoll in parseInfo, defPoll in deviceInfo und das entsprechende Attribut für den Benutzer können ausser 0 und 1 auch "once" enthalten.

defaultpolldelay und die entsprechenden Attribute können neben Zahlen für absolute Sekunden auch x[0-9]+ (z.B. x3) enthalten. Dann wird als Delay das Dreifache des Intervalls verwendet.
Der Delay ist so zu verstehen, dass die Zeit seit dem letzten erfolgreichen Read verwendet wird. Wenn mal ein Timeout dazwischen kommt, wird es auf jeden Fall in der nächsten Runde nochmal versucht.

Gruss
   Stefan

Edit: removed old attached versions.

golem

Hallo Stefan,

TCP kann ich testen. Habe zwar nicht immer Zugriff auf die Geräte, aber das sollte schon gehen.

Gruß Denis
Pi - Max-Lan - 8x max Ht -3x Max WT - Max Fk -modbus umg103- 2x Arduino mit Firmata Ethernet- ws300 - 433Mhz Sender Empfänger - 7x 1wire ds1820

Roger

Hallo Stefan,
prima  :D. Habe mich schon den ganzen Tag auf das Testen gefreut. Es sind ja so viele Änderungen drin:
defPoll, defShowGet Standards --> habe parseInfo ganz schön aufräumen können  :)
defaultpoll="once" --> Klasse, klappt prima (habe ich für die holding Register verwendet)  :)
x[0-9] Format für defaultpolldelay --> Mensch, Mensch, super Spitzenklasse, bin begeistert  :)

Modbus über TCP/IT kann ich nicht testen, da nicht vorhanden, aber da gibt es schon Umsetzungen
http://forum.fhem.de/index.php/topic,12655.msg261840.html#msg261840
Da hat sogar einer den gleichen SDM630 Stromzähler wie ich, nur will er ihn über TCP/IT anbinden.

Also ich bin schwer begeistert. Alles sieht gut aus und ich kämpfe gerade mit den Statistik-Modul,
da will noch nicht so richtig  >:(
Roger
Zotac & RPIs mit 10*FHEM
2*HM-LAN, 2*JeeLink, 2*RS485, SignalESP
HomeMatic, PCA301 Komponenten, ModBus: Stromzähler, Fronius WR, Shelly, Victron

StefanStrobel

#48
Hallo Denis,

anbei eine neue Version, die jetzt auch Modbus TCP oder auch RTU über TCP unterstützt.
Damit das elegant geht, habe ich die restlichen Funktionen bis auf _initialize der Client-Module auch noch ins Basis-Modul integriert. Ihr könnt also aus Euren Modulen die Define- und Undefine-Funktionen löschen und statt dessen auf die ModbusLD-Define etc. verweisen. (Beispiel angehängt).

Für Modbus TCP übergibt man dann beim Define des Client-Moduls nach der ID und dem Intervall die Adresse mit Port und das Protokoll. Wenn man die neuen Sachen weglässt, ist es Modbus RTU über ein bereits definiertes serielles Modbus-Gerät. Wenn man eine Adresse angibt, dann benötigt man kein physisches Gerät.

Beispiel:

define test ModbusTCPTest 1 30 192.168.7.11:502 TCP


Gruss
   Stefan

Edit: removed old versions

golem

Hallo Stefan,
dann fange ich Morgen mal mit dem Testen an.

Gruß Denis
Pi - Max-Lan - 8x max Ht -3x Max WT - Max Fk -modbus umg103- 2x Arduino mit Firmata Ethernet- ws300 - 433Mhz Sender Empfänger - 7x 1wire ds1820

golem

Hallo Stefan,

funktioniert nicht, ich erhaltebei einem Define
define umg604 ModbusUMG604 1 10 10.136.6.95:502 TCP
im Logfile die Meldung

2015.02.23 08:24:16 0: Undefined subroutine &main::ModbusLD_Initialize called at ./FHEM/98_ModbusUMG604.pm line 1072

Gruß Denis
Pi - Max-Lan - 8x max Ht -3x Max WT - Max Fk -modbus umg103- 2x Arduino mit Firmata Ethernet- ws300 - 433Mhz Sender Empfänger - 7x 1wire ds1820

Roger

Hallo zusammen,
so habe die neue Version getestet --> bei mir über seriell scheint alles zu gehen  :D
Hier der Überblick über meine bisherigen Fragen:

zu 1. Format --> erledigt
zu 2. Einheiten: OK, habe verstanden, dass hier FHEM noch keine Lösung hat (geht ja auch mit format) --> vertagt
zu 3. verschiedene Poll-Zeiten: --> hervorragend gelöst  :)
zu 4. timeout bei manuellen gets --> gelöst
zu 5. timeout bei mehreren gets --> gelöst
zu 6. viele gleiche len-Angaben in parseInfo --> mit defaults in deviceInfo gelöst
zu 7. mehrere Modbus-Geräten an einem Bus: keine Ahnung? zumindest keine Anpassung clients in 98_Modbus.pm mehr nötig  :)
zu 8. Fehlermeldungen beim Schreiben --> gelöst
zu 9. sehr oft showget --> mit defaults in deviceInfo gelöst
zu 10. Standard für defaultpoll in deviceInfo --> gelöst
zu 11. einmaliges einlesen bei Start --> gelöst

Wie kann man den 7. testen? Habe derzeit nur ein Modbus-Gerät.

Also vom meiner Seite (derzeit :) ) volle Zufriedenheit und ein großes Log an Dich Stefan.
Roger

PS: Anbei noch meine aktuelle Datei für den SDM630M
Zotac & RPIs mit 10*FHEM
2*HM-LAN, 2*JeeLink, 2*RS485, SignalESP
HomeMatic, PCA301 Komponenten, ModBus: Stromzähler, Fronius WR, Shelly, Victron

StefanStrobel

Hallo Denis,

da fehlt noch ein

require "$attr{global}{modpath}/FHEM/98_Modbus.pm";

in der Initialize-Funktion deines Moduls wenn 98_Modbus.pm nicht ohnehin geladen ist (ist mir nicht aufgefallen, da ich parallel noch ein Gerät per RS485 auslese und das Modul daher geladen ist)

Gruss
   Stefan

golem

Hallo Stefan,

damit klapt es schon besser, es fehlt in der 98_Mosbus.pm noch

require "$attr{global}{modpath}/FHEM/DevIo.pm";

Habe ein UMG604 zur Zeit als einziges Device in FHEM.
Zum testen hänge ich noch ein UMG103 an das 604 als ModbusGateway, um zu sehen was mit Punkt 7 aus der Liste ist.

Gruß Denis

PS: Habe das 103 hinter das 604 angeschlossen. Frage: mus das 103 jetz das 604 ais IO Dev bekommen oder geht das über TCP nicht?

PPS: habe es auch mal so Probiert:

define ModbusGW Modbus 10.136.6.95:502 TCP

define umg604 ModbusUMG604 1 10
attr umg604 IODev ModbusGW
attr umg604 poll-Voltage_L1 1
attr umg604 poll-Voltage_L2 1
attr umg604 poll-Voltage_L3 1

define umg103 ModbusUMG103 4 10
attr umg103 IODev ModbusGW
attr umg103 poll-Voltage_L1 1
attr umg103 poll-Voltage_L2 1
attr umg103 poll-Voltage_L3 1
Pi - Max-Lan - 8x max Ht -3x Max WT - Max Fk -modbus umg103- 2x Arduino mit Firmata Ethernet- ws300 - 433Mhz Sender Empfänger - 7x 1wire ds1820

StefanStrobel

Hallo Denis,

Bei Modbus TCP hast Du ja keinen RS485 Bus und Du kannst in jedem Fall mehrere Geräte über ihre IP Adresse im Netz ansprechen. Auch bei RS485 kannst Du mehrere Geräte über ihre Modbus ID ansprechen, auch wenn sie direkt am gleichen Kabel angeschlossen sind.

Dein Gateway kenne ich leider nicht. Generell war aber meine Idee, dass Du bei Modbus TCP den ersten Define weglassen kannst und statt dessen beim Define für z.B ein Umg604 die IP-Adresse und den Port angibst, so wie ich das am 22.2. gepostet hatte.

Klappt das denn so weit bei dir?

Wenn ein Gateway zu fhem Modbus TCP spricht und dahinter ein weiteres Gerät per RS484 am Gateway hängt, dann müsstest Du eigentlich das dahinterliegende Gerät genauso definieren wie wenn es selbst TCP sprechen würde und ggf. nur die UnitID als Modbus ID angeben.
Leider kenne ich aber Deine Geräte ebensowenig wie deine Verkabelung und kann es deshalb nicht genauer sagen.

Gruß
    Stefan


golem

Hallo Stefan,

das UMG604 (ID = 1) hat einen RS485 Bus an dem im meinem Fall ein UMG103 (ID =4) angeschlossen ist.
Wenn ich das ganze mit meinem Modbus OPC Server ansteuer, dann gebe ich einfach die ID mit an und erhalte die Daten des entsprechenden Gerätes.
Das ganze funktioniert auf Port 502 als Modbus TCP und auf Port 8000 als Modbus RTU über TCP.
Wenn ich nur das Umg604 anlege mit
define UMG604 ModbusUMG604 1 10 192.168.1.11:502 TCP
oder mit
define UMG604 ModbusUMG604 1 10 192.168.1.11:8000 RTU
funktioniert das ohne Probleme.
Wenn nur das Umg103 mit
define UMG103 ModbusUMG103 4 10 192.168.1.11:502 TCP
oder
define UMG103 ModbusUMG103 4 10 192.168.1.11:8000 RTU
anlege funktioniert das nicht.
die Fehlermeldungen sind in dem Fall gleich
dann steht im Log z.B.:

2015.03.02 14:22:53 3: Opening umg103 device 192.168.1.11:8000
2015.03.02 14:22:53 3: umg103 device opened
2015.03.02 14:22:53 3: umg103: defined with id 4, interval 10, destination 192.168.1.11:8000, protocol RTU

und auf der konsole:

Use of uninitialized value in concatenation (.) or string at ./FHEM/98_Modbus.pm line 447.


ein anlegen von zwei Geräten
define UMG604 ModbusUMG604 1 10 192.168.1.11:502 TCP
define UMG103 ModbusUMG103 4 10 192.168.1.11:502 TCP

log Einträge wie oben.
Log mit verbose 5
2015.03.02 14:42:58 5: umg103: GetUpdate called
2015.03.02 14:42:58 5: umg103: GetUpdate check h3024 => Max_value_P_L3, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h1038 => Reactive_power_L2, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5018 => Real_energy_L2_Consumption_NT, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5014 => Real_energy_sum_Consumption_HT, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5040 => Apparent_energy_L1_Consumption_NT, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5008 => Real_energy_L1_Consumption_HT, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5032 => Apparent_energy_L1_Consumption_HT, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h4012 => Min_value_CosPhi_L1, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h1044 => CosPhi_L1, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h4004 => Min_value_U_L3, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5060 => Reactive_energy_L3_Consumption_HT, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h1014 => Current_L2, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3032 => Max_value_Q_L3, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5036 => Apparent_energy_L3_Consumption_HT, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3044 => Max_value_CosPhi_L1, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5062 => Reactive_energy_sum_Consumption_HT, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2002 => Mean_value_U_L2, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2026 => Mean_value_P_sum, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h1036 => Reactive_power_L1, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2046 => Mean_value_CosPhi_L2, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5064 => Reactive_energy_L1_Consumption_NT, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5030 => Apparent_energy_sum_Consumption, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2014 => Mean_value_I_L2, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5000 => Real_energy_L1_Consumption, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3050 => Max_value_CosPhi_sum, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3042 => Max_value_S_sum, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h1012 => Current_L1, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3028 => Max_value_Q_L1, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h1226 => Frequency, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2226 => Mean_value_Frequency, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h4006 => Min_value_U_L1-L2, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5046 => Apparent_energy_sum_Consumption_NT, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5006 => Real_energy_sum_Consumption, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5016 => Real_energy_L1_Consumption_NT, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2004 => Mean_value_U_L3, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5054 => Reactive_energy_sum_Consumption, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2034 => Mean_value_Q_sum, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5020 => Real_energy_L3_Consumption_NT, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h1020 => Real_power_L1, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h1028 => Apparent_power_L1, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5070 => Reactive_energy_sum_Consumption_NT, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3038 => Max_value_S_L2, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h9 => Delete_Work, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2050 => Mean_value_CosPhi_sum, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3040 => Max_value_S_L3, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5068 => Reactive_energy_L3_Consumption_NT, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3048 => Max_value_CosPhi_L3, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h4010 => Min_value_U_L3-L1, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5026 => Apparent_energy_L2_Consumption, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2048 => Mean_value_CosPhi_L3, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2030 => Mean_value_Q_L2, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2040 => Mean_value_S_L3, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5074 => Real_energy_L2_Supply, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3000 => Max_value_U_L1, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2020 => Mean_value_P_L1, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2044 => Mean_value_CosPhi_L1, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5024 => Apparent_energy_L1_Consumption, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5050 => Reactive_energy_L2_Consumption, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5002 => Real_energy_L2_Consumption, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3022 => Max_value_P_L2, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3010 => Max_value_U_L3-L1, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3020 => Max_value_P_L1, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h600 => Stromwandler_Primär, poll = once, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate will request Stromwandler_Primär
2015.03.02 14:42:58 5: umg103: GetUpdate check h1008 => Voltage_L2-L3, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2010 => Mean_value_U_L3-L1, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5078 => Real_energy_L2_Supply, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h1004 => Voltage_L3, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2022 => Mean_value_P_L2, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h4018 => Min_value_CosPhi_sum, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h4016 => Min_value_CosPhi_L3, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5076 => Real_energy_L2_Supply, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h1022 => Real_power_L2, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2038 => Mean_value_S_L2, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h1046 => CosPhi_L2, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h911 => Serial_Nr, poll = once, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate will request Serial_Nr
2015.03.02 14:42:58 5: umg103: GetUpdate check h1024 => Real_power_L3, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5022 => Real_energy_sum_Consumption_NT, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h4104 => Min_value_Frequency, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h4008 => Min_value_U_L2-L3, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5072 => Real_energy_L1_Supply, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5012 => Real_energy_L3_Consumption_HT, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h1050 => CosPhi_sum, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5028 => Apparent_energy_L3_Consumption, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2032 => Mean_value_Q_L3, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2042 => Mean_value_S_sum, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2024 => Mean_value_P_L3, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3016 => Max_value_I_L3, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3030 => Max_value_Q_L2, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h1026 => Real_power_sum, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3008 => Max_value_U_L2-L3, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5004 => Real_energy_L3_Consumption, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h1000 => Voltage_L1, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3026 => Max_value_P_sum, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h8 => Delete_MinMax, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2016 => Mean_value_I_L3, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h1032 => Apparent_power_L3, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h1048 => CosPhi_L3, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5066 => Reactive_energy_L2_Consumption_NT, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2012 => Mean_value_I_L1, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5042 => Apparent_energy_L2_Consumption_NT, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5052 => Reactive_energy_L3_Consumption, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5044 => Apparent_energy_L3_Consumption_NT, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h1010 => Voltage_L3-L1, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3018 => Max_value_I_sum, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5010 => Real_energy_L2_Consumption_HT, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3036 => Max_value_S_L1, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3004 => Max_value_U_L3, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5034 => Apparent_energy_L2_Consumption_HT, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2036 => Mean_value_S_L1, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h1006 => Voltage_L1-L2, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5038 => Apparent_energy_sum_Consumption_HT, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3046 => Max_value_CosPhi_L2, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3006 => Max_value_U_L1-L2, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2018 => Mean_value_I_sum, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2006 => Mean_value_U_L1-L2, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h913 => Firmware, poll = once, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate will request Firmware
2015.03.02 14:42:58 5: umg103: GetUpdate check h4000 => Min_value_U_L1, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3034 => Max_value_Q_sum, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h1002 => Voltage_L2, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h1040 => Reactive_power_L3, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h602 => Spannungswandler_Primär, poll = once, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate will request Spannungswandler_Primär
2015.03.02 14:42:58 5: umg103: GetUpdate check h5048 => Reactive_energy_L1_Consumption, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2028 => Mean_value_Q_L1, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h4014 => Min_value_CosPhi_L2, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3226 => Max_value_Frequency, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5058 => Reactive_energy_L2_Consumption_HT, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h1042 => Reactive_power_sum, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h603 => Spannungswandler_Sekundär, poll = once, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate will request Spannungswandler_Sekundär
2015.03.02 14:42:58 5: umg103: GetUpdate check h1034 => Apparent_power_sum, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3012 => Max_value_I_L1, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h4002 => Min_value_U_L2, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3002 => Max_value_U_L2, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2008 => Mean_value_U_L2-L3, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h5056 => Reactive_energy_L1_Consumption_HT, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h601 => Stromwandler_Sekundär, poll = once, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate will request Stromwandler_Sekundär
2015.03.02 14:42:58 5: umg103: GetUpdate check h1016 => Current_L3, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h1030 => Apparent_power_L2, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h3014 => Max_value_I_L2, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate check h2000 => Mean_value_U_L1, poll = 0, last = 0
2015.03.02 14:42:58 5: umg103: GetUpdate combines Stromwandler_Primär (600) with Stromwandler_Sekundär (601), Span = 2, dropping read for 601
2015.03.02 14:42:58 5: umg103: GetUpdate combines Stromwandler_Primär (600) with Spannungswandler_Primär (602), Span = 3, dropping read for 602
2015.03.02 14:42:58 5: umg103: GetUpdate combines Stromwandler_Primär (600) with Spannungswandler_Sekundär (603), Span = 4, dropping read for 603
2015.03.02 14:42:58 5: umg103: GetUpdate combines Serial_Nr (911) with Firmware (913), Span = 3, dropping read for 913
2015.03.02 14:42:58 5: umg103: GetUpdate now requests adr 600 (Stromwandler_Primär) with span 4
2015.03.02 14:42:58 5: umg103: pdu : 0302580004
2015.03.02 14:42:58 5: umg103: TCP frame tid=54, dlen=6, devId=4, pdu=0302580004
2015.03.02 14:42:58 5: umg103: Add frame to queue: 003600000006040302580004
2015.03.02 14:42:58 5: umg103: _Send: creating new queue
2015.03.02 14:42:58 5: umg103: handle queue
2015.03.02 14:42:58 4: umg103: handle queue sends 003600000006040302580004 (fcode 3 to 4 for Stromwandler_Primär len 4)
2015.03.02 14:42:58 5: SW:


die Aktuellen Versionen habe ich mit angehängt.
Pi - Max-Lan - 8x max Ht -3x Max WT - Max Fk -modbus umg103- 2x Arduino mit Firmata Ethernet- ws300 - 433Mhz Sender Empfänger - 7x 1wire ds1820

StefanStrobel

Hallo Denis,

Erst mal vielen Dank für's Testen!
wenn das UMG604 sowohl per Modbus TCP als auch per Modbus RTU über TCP funktioniert, ist das schon mal eine sehr gute Nachricht.
Damit funktioniert die Implementation von Modbus-TCP prinzipiell für direkt angeschlossene Geräte.

Die Frage ist nun, warum es bei der Kommunikation per TCP über das UMG604 als Gateway auf das dort per RS485 angeschlossene UMG103 noch nicht funktioniert.
Wenn ich das Protokoll richtig verstanden habe, müsste das eigentlich genauso funktionieren. Definiert würde ein Gerät für das UMG103 mit der ID 4 und der IP-Adresse des Gateways. Ein zusätzlicher Define für das Gateways selbst sollte nicht nötig sein.

Die Warnung auf der Konsole sollte auch nicht das Problem sein. Die kommt nur von einem Debug-Log.
Leider endet Dein Log-Auszug dort wo es interessant wird. Die ganzen Meldungen zu GetUpdate am Anfang zeigen nur die Zusammenfassung der Read-Requests. Am Ende kommt dann das Queueing der ersten Anfrage. Ich vermute danach kommt ein Timeout oder?

Eventuell fehlt in meiner Implementation noch irgend eine Kleinigkeit, damit es auch über Gateways funktioniert.

Könntest Du zum Testen aus Deinem Modul mal alle Objekte bis auf eines rauswerfen (damit das Log nicht zu voll wird) und dann ein komplettes Log vom Define bis zu den Timeouts schicken?

Hast Du vielleicht sogar die Möglichkeit funktionierende Requests vom OPC Server per Sniffer mitzuschneiden, damit ich sehe wo der Unterschied ist?
(mit der Methode könnten wir auch gleich sehen warum das Schreiben bei Dir nicht funktioniert)

Gruss
   Stefan

golem

Hallo Stefan,

an den OPC Server gehe ich nicht ran, der läuft im Produktiveinsatz mit sehr vielen Geräten.

ich habe aber mal einen Logauszug mit Verbose 5 als Datei angehängt.
In der fhem.cfg steht

define UMG604 ModbusUMG604 1 10 10.136.6.104:502 TCP
attr UMG604 poll-Voltage_L1 1
attr UMG604 poll-Voltage_L2 1
attr UMG604 poll-Voltage_L3 1
attr UMG604 verbose 5

define UMG103 ModbusUMG604 4 10 10.136.6.104:502 TCP
attr UMG103 poll-Voltage_L1 1
attr UMG103 poll-Voltage_L2 1
attr UMG103 poll-Voltage_L3 1
attr UMG103 verbose 5


Gruß Denis
Pi - Max-Lan - 8x max Ht -3x Max WT - Max Fk -modbus umg103- 2x Arduino mit Firmata Ethernet- ws300 - 433Mhz Sender Empfänger - 7x 1wire ds1820

StefanStrobel

Hallo Denis,

Du versuchst das umg103 mit Deinem Modul für das 603 abzufragen. Da passen die Register aber nicht:

define UMG103 ModbusUMG604 4 10 10.136.6.104:502 TCP


Probier es mal mit


define UMG103 ModbusUMG103 4 10 10.136.6.104:502 TCP


Und dann fällt mir noch auf, dass Deine Fhem-Installation ein altes DevIO verwendet. Da solltest du vor dem weiteren Testen mal ein Fhem Update machen. Dann wäre es für das weitere Testen hilfreich wenn Du temporär alle Register bis auf 2 oder 3 aus parseInfo entfernst.

Ich hoffe, das macht einen Unterschied.

Gruß
    Stefan

golem

Hallo Stefan,

habe das Update gemacht, die Module Verkleinert und das Define angepasst. Hier der Ausschnitt aus der Konfig.

define UMG604 ModbusUMG604a 1 10 10.136.6.104:502 TCP
attr UMG604 poll-Voltage_L1 1
attr UMG604 poll-Voltage_L2 1
attr UMG604 poll-Voltage_L3 1
attr UMG604 verbose 5

define UMG103 ModbusUMG103a 4 10 10.136.6.104:502 TCP
attr UMG103 poll-Voltage_L1 1
attr UMG103 poll-Voltage_L2 1
attr UMG103 poll-Voltage_L3 1
attr UMG103 verbose 5


Gruß Denis
Pi - Max-Lan - 8x max Ht -3x Max WT - Max Fk -modbus umg103- 2x Arduino mit Firmata Ethernet- ws300 - 433Mhz Sender Empfänger - 7x 1wire ds1820