network.lib > BECKHOFF

MB_SERVER mit OpenHAB

(1/3) > >>

Seb:
Hallo Zusammen

ich würde gerne Variablenwerte zwischen Beckhoff SPS (TwinCAT V2.11) und OpenHAB austauschen.
Hierfür möchte ich den MB_SERVER verwenden und mich mit dem Modbus Binding von OpenHAB dagegen verbinden.

Als Vorlage habe ich das DEMO Programm aus der Bibliothek verwendet.
Nun ist es so, dass die Verbindung aufgebaut werden kann und das DATA-Array auf Seite TwinCAT grundsätzlich beschrieben und ausgelesen werden kann.
Das funktioniert aber nur wenn ich die Pollzeit auf Seite OpenHAB >10 s einstelle.

Wird die Pollzeit verringert, dann kommt es andauernd zu Verbindungsabbrüchen/Timeouts.
Logmeldung in OpenHAB: Error connecting connection TCPMasterConnection@1ef717f[socket=Socket[unconnected]] for endpoint ModbusTCPSlaveEndpoint@1753aac[address=192.168.178.58,port=502]: Verbindungsaufbau abgelehnt (Connection refused)

Was könnte hier das Problem sein? Ich habe schon mit unterschielichen Taskintervallen und Timeoutzeiten am Programm getestet. Leider ohne Erfolg.
Gibt es eine Möglichkeit die Verbindung zu ´debuggen´?
Danke für Eure Hilfe.
Viele Grüsse

peewit:
hallo

das verhalten ist auf jeden Fall nicht normal und hier läuft etwas grundlegend falsch

wer was genau macht kann man mit einer wireshark Aufzeichnung am besten auswerten


beim mb_server kann immer nur eine aktive verbindung abgehandlet werden
was aber auch im normalfall kein problem ist !

durch irgendeinen grund (vermutlich) lässt obenhub die zuletzt verwendete verbindung bestehen während für die folgende abfrage über eine neue zusätzliche verbindung abgehalndelt wird.

richtig wäre wenn obenhub die verbindung offen lässt und immer diese weiter verwendet oder nach der abfrage dieser wieder schliesst und erst dann eine neue verbindung aufbaut



Seb:
Hallo, danke für die Antwort.
Theoretisch sollte sich OpenHAB als Client (im Screenshot 192.168.100.5) gegen den Server (im Screenshot 192.168.100.2) verbinden.
Sobald die Verbindung erfolgreich abgehandelt wurde (Lesen/poll der holding register) wird die Verbindung wieder geschlossen.

Habe nun das Polling mit unterschiedlichen Intervallen über WireShark mitprotokolliert.
Ein ´normaler´ Aufruf erzeugt 10 Einträge. (siehe Screenshot mit Pollingintervall 10 s). Aus meiner Sicht sieht das erstmal gut aus. Die Verbung ist in ca. 75 ms durch.
Doch: Nach dem Aufruf kommt es am MB_SERVER Funktionsbaustein zum Fehler: FD xx xx xx Verbindungsaufbau Wert 253 – Verbindung von Remote beendet (durch IP_CONTROL).

Wenn ich dann denn Pollingintervall verkleinere. Dann werden die Verbindungversuche vom Server erst verzögert angenommen. Siehe Screenshot Pollingintervall 5s.
Oder gar abgewiesen. Siehe Screenshot Pollingintervall 1 s.

Was könnte hier das Problem sein? Wie müsste eine korrekte Verbindung aussehen?
Irgendeine Idee?
Danke, Viele Grüsse
Seb

Was könnte hier das Problem sein?
___________________________
Ich habe die Screenshots nochmals aktualisiert, da ursprünglich der nur eine Richtung (von Client zu Server) dargestellt wurde.

peewit:
es wird nach jeder einzelnen abfrage die verbindung wieder abgebaut
dann wieder aufgebaut und so weiter

wenn du aber zylisch etwas abfragen möchtest ist das nicht besonders intelligent

effektiver wäre es wenn die verbindung stehen bleiben würde


opebhab beendet die tcp verbindung und baut sofort wieder eine neue verbindung auf

ressourcen technisch hast du aber mit dem ip_control nur eine mögliche verbindung konfiguriert
die sps benötigt aber etwas zeit um diesen verbindungsabbruch ihrerseits zu verarbeiten
es sieht aber so aus als ob openhab mit einer neuen verbindungsanfrage daher kommt obwohl die sps die alte noch nicht ihrerseits technisch abgebaut hat.

lösungwege:
1. openhub baut nicht ständig die verbinung auf/ab
2. du betriebst openhub im udp mode (sollte er das können)
3. du schaust das openhub nach einer abfrage eine gewisse ruhezeit einhält

die wireshark aufzeichnung schaue ich mir dann noch an, aber es hört sich nach genau dem problem an

Seb:
Die Verbingung stehen zu lassen ist nach meinem aktuellen Wissenstand aktuell leider nicht möglich.
Mit jedem Poll wird eine neue Portverbindung geöffnet. Dies entspricht wohl auch der ´Norm´: http://www.simplymodbus.ca/TCP.htm

Für mich sieht es eher so aus als würde IP_Control die Portverbindung nicht sauber schliessen und eine Zombie-Session zurücklassen.
Irgendwann greift dann der Session-Timeout (vom Betriebssystem) und killt den Port.
Möglicherweise stimmt bei meinen Einstellungen noch etwas nicht. Taskintervall von der SPS und einstellbare Werte in OpenHAB passen nicht zusammen. Wobei ich hier aber schon mit ettlichen unterschielichen Konfigurationen getestet habe. Leider ohne Erfolg. 

Zu deinen vorgeschlagenen Lösungswegen:
#1 Müsste ich prüfen. Ist mir aber zu unsicher. Ein zusätlicher wäre nötig um die Verbindung zu überwachen um dann ggf. neu aufzubauen.
#2 Leider sind aktuell nur TCP/IP Verbindungen möglich.
#3 Die Werte sollen zeitnah übertragen werden (< 1s) daher ist dies momentan keine Option.

Ich noch den ganzen Aufbau mit dem TS6250 | TwinCAT Modbus TCP Server getestet.
Hierbei sind Pollzeiten von < 100 ms ohne Probleme realisierbar. Ich habe noch einen WireShark Mitschnitt hiervon angehängt.
Es scheint wohl, dass ich auf das Supplement Produkt von Bekchoff von zurückgeifen muss um meine Anforderungen umzusetzen.

Vielen Dank für deine Hilfe.
Viele Grüsse

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln