Modbus TCP Instanz auf ein Wachendorff Gateway Modbus TCP / Modbus RTU (HD67507), die Intervalle stehen zw. 1000 und 5000 ms
Am Modbus RTU hängen 2 Geräte, eine Lüftungsanlage und die Heizungssteuerung. Das Gateway steht auf Routing-Mode, d.h. RTU wird 1zu1 auf TCP umgesetzt.
Dazu wurde 2 Splitterinstanzen erstellt und dem ClientSocket des Gateway zugeordnet.
Die Adressen, hier 2 und 8, sind in der Splitter Instanz eingetragen und stehen auf Modbus TCP, wurden testweise auch schon auf RTU over TCP gestellt, jedoch ohne Erfolg.
Versuche ich nun ein WriteRegisterSmallInt auf eine Adresse, bekomme ich nach einiger Zeit ein Timeout, wobei die Werte trotzdem teilweise geschrieben werden. Die RequestRead Befehle funktionieren teilweise auch aber sehr langsam.
Der LOG wirft permant folgenden Fehler aus:
14.03.2016 12:46:50*| FlowHandler*| Kann Daten nicht zur Instanz #48736 weiterleiten: TransactionID stimmt nicht überein
14.03.2016 12:49:21*| FlowHandler*| Kann Daten nicht zur Instanz #35951 weiterleiten: TransactionID stimmt nicht überein
Das sind jeweils die IDs der Splitter Instanzen.
Schalte ich eine dieser beiden Splitter Instanzen weg, funktioniert die Andere problemlos.
Wenn ich diese Konstellation in ModScan abbilde, funktioniert alles parallel und ohne Timeouts.
Das ist zur Zeit leider nicht „sauber“ möglich. Wir synchronisieren bisher seit IP-Symcon 4.0 die RTU Gateways. Bei ModBus TCP bist du mit mehreren Geräten über einen Socket bisher der erste der in 10 Jahren nachfragt. Es ist somit ein missing Feature, welches ich dir aber gerne in Zukunft realisieren wollen würde.
Kann dein Gateway Gerät vielleicht die Modbus RTU Geräte auf einzelne ModBus TCP Ports legen?
Wie lange wird denn diese Realisierung in etwas dauern?
Ich möchte nur abwägen, ob es sich lohnt die ganzen Datenpunkte erst noch manuell im Gateway umzusetzen.
ich bin seit gestern dabei den Test-Aufbau eines Kunden in unser IP-Symcon zu integrieren. Habe vorher noch nie mit ModBus gearbeitet und komme damit nicht so gut zurecht.
Der Raumregler ist per 2-adrigem ModBus an das Gateway angeschlossen und bekommt noch 24VDC Versorgungsspannung über ein Netzteil, genauso wie der Gateway. Der Gateway hängt über Switches in unserem normalen internen Ethernet, wie auch die Symbox.
Habe in IP-Symcon…
ModBus Device Instanz erstellt (laut PDF ist Temperatur Protokoll-Adresse 0x0102, also 258?)
ModBus Gateway „Modbus RTU over TCP“, ID per Dip-Schalter auf 3
ModBus Socket mit IP des Gateway, Schnittstelle geöffnet
Nur irgendwie scheint das nicht zu funktionieren. Beim ModBus Socket bekomme ich über Debug „TRANSMIT“ und „RECEIVED“. Beim ModBus Gateway jedoch nur „WAITING“, „TRANSMIT“, „BUFFER IN“ und schließlich „WAIT_ERROR“. Beim ModBus Device kommt dann garnichts. Ich werde auch aus der vorhandenen Dokumentation nicht so schlau, habe aber darauf geachtet dass Parity (Even) and Serial Speed (9600) bei Gerät und Gateway gleich eingestellt sind. Offensichtlich mache ich aber etwas falsch, oder ist das die angesprochene Funktionalität die nicht vorhanden ist?
auch ich habe das Problem über Modbus TCP.
> Advantech 4572
Hier ist ein „Host Idle Timeout“ fix eingetragen.
Nach dieser Zeit löst der Modbus-Slave zwangsweise die TCP-Verbindung.
Liegt das Intervall (IPS) unter der Zeit ist alles OK. Liegt das Intervall höher gibt es dauernd Fehler.
Nebenbei:
IPS öffnet nach Änderung die Verbindung, wartet die Intervallzeit und liest erst dann den Wert.
Eine komfortable Lösung wäre, wenn man in IPS einstellen könnte, ob die Verbindung dauernd offen ist, oder fallweise geöffnet wird !
Einzelverbindung:
1.) TCP-Verbindung öffnen
2.) Wert lesen
3.) TCP-Verbindung schließen
4.) Intervallzeit
usw.
Vorteile: bei großen Intervallen - keine Probleme mit Timeout
Nachteile: langsameres Lesen der Werte, Prozessorlast?
Alternativ wäre es günstig, ein Timeout in IPS zu setzen, nach der die TCP-Verbindung in Ruhezustand geht, d.h. geschlossen wird. Bei neuer Anfrage wird die Verbindung geöffnet.
Das Problem ist für mich wichtig, da das Time-Out fest unter 3 Sekunden eingestellt ist und somit viel Last kommt.
wir haben mit Modbus via TCP das selbe Problem. An einem Gateway (Expert DAQ EX-9132C-2-MTCP) hängen drei Thanos Raumbediengeräte.
z.Zt muss ich mit IPS_SetConfiguration in der Spliter-Instanz die Modbus-Adresse ändern, die Register lesen/schreiben, die Adresse auf das nächste Gerät ändern, usw…
wir haben umgestellt auf 4.1 (Testing).
Leider kommt immer noch der selbe Fehler: „07.10.2016 18:26:55*| FlowHandler*| Could not forward data to instance #48760: TransactionID does not match“