Hauptmenü

MB_SERVER mit OpenHAB

Begonnen von Seb, 27. Juli 2019, 20:14:16

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 2 Gäste betrachten dieses Thema.

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

#2
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

#4
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


mattsches

Ohne beurteilen zu können, ob der IP_CONTROL den Port nicht sauber schließt (was grundsätzlich ja nicht ausgeschlossen ist) möchte ich dir bzgl. des Verbindungsmanagements widersprechen. Es ist keinesfalls so, dass mit jedem Lese- oder Schreibzugriff eine Verbindung auf- und danach gleich wieder abgebaut werden soll. Die von dir verlinkte Seite sagt das so auch nicht. Und wenn man in den (tatsächlich offiziellen) Implementierungsguide schaut, dann liest man genau das Gegenteil:

Zitat
Implementation Rules:
1)   Without explicit user requirement, it is recommended to implement the automatic TCP connection management
2)   It is recommended to keep the TCP connection opened with a remote device and not to open and close  it for each MODBUS/TCP transaction. Remark:  However  the  MODBUS  client  must  be  capable  of  accepting  a  close  request  from  the  server  and  closing  the  connection.  The  connection  can  be  reopened  when  required.

Quelle: http://www.modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0b.pdf

Insofern ist die Implementierung in OpenHAB zumindest fragwürdig.

Das Verhalten des IP_CONTROL scheint mir allerdings ebenfalls untersuchenswert. Den Socket zu schließen, sollte keine 10 Sekunden dauern; das sieht auch mir nach einem Timeout aus.

peewit

ich sagte ja auch das die verbindung klassisch aufrecht erhalten werden sollte

aber in deiner eigenen wireshark aufzeichnung kann man ja klar sehen das openhub nach der abfrage die verbindung gezielt abbaut !

beispiel:
in der grafik in zeile 89 sieht man das openhub die empfangenen daten bestätigt [ACK] und gleichtzeitig ein [FIN] mitsendet
was bedeutet das verbindung abgebaut werden soll !


mattsches

peewit,

die der vorherige Eintrag (von dem ich annehme, dass du dich auf ihn beziehst) kam von mir, nicht vom TO.

Gruß,
m.


peewit

deine SPS ist ein MB_SERVER
Dann muss das andere Gerät der Client sein und das ist auch jener der mal die verbindung aufbauen muss

die verbindung wird von ip 192.168.0.5 aufgebaut !
das ist jener der daten abfragt und von 192.168.0.2 erhält
aber in zeile 89 ist es auch 192.168.0.5 der ein [FIN] aufgibt und die verbidung beenden möchte !

warum baut openhub die verbindung ständig auf und ab !


dokumentiert doch mal welcher gerät welche ip ansonsten diskutieren wir noch lange im kreis !


mattsches

Seb beteiligt sich ja schon gar nicht mehr an der Diskussion. Und dass der OpenHAB Modbus Client die Verbindung für jede Abfrage auf- und wieder abbaut, ist völlig unstrittig, Seb hatte das ja explizit bestätigt. Ich hatte dann lediglich klargestellt, dass das - entgegen Sebs These - kein regelkonformes Verhalten ist. Also gibt es aus meiner Sicht keine Unklarheiten.

Offen ist allerdings, ob der IP_CONTROL nach einem FIN evtl. den Port tatsächlich nicht sofort schließt, sondern das dann über einen Timeout geschieht.

Aber wie gesagt, Seb scheint hier raus zu sein, ich sehe ehrlich gesagt keine Notwendigkeit für weitere Nachforschungen. Wenn man nicht aus Liebhaberei nach obigem Punkt schauen möchte. Ich empfinde die gerade nicht. ;-)

Seb

#10
Hallo Zusammen,
Danke für Eure Antworten.
Sorry ich war die letzten Tage im Urlaub und konnte mich daher hier nicht zurückmelden.

Dass das Aufrechterhalten der IP Verbindung ein gangbarer Weg ist wusste ich nicht.
Ich werde dies nächste Woche mal in der OpenHAB Community erfragen ob dies möglich ist/wäre.

Zur Thematik mit der Portverbindung:
Welches Gerät welche IP hat hatte ich bereits beschrieben:
Zitat von: Seb in 29. Juli 2019, 23:18:27
Theoretisch sollte sich OpenHAB als Client (im Screenshot 192.168.100.5) gegen den Server (im Screenshot 192.168.100.2) verbinden.

Für mich stellt sich Allgemein noch die Frage: Müsste man nicht auch im WireShark nachvollziehen können, dass die Portverbindung erst nach mehreren Sekunden geschlossen/abgeschossen wird? In den Screenshots ist hier nichts ersichtlich.
Kennt ihr noch eine andere Möglichkeit zu prüfen ob der Port wirklich belegt ist oder nicht? Evtl. mit PPing oder Telnet Client?
Das scheint für mich noch nicht ganz stimmtig zu sein..

Ganz Allgemein:
Ich bin auf dem Gebiet nicht ganz Sattelfest und sehr für Eure Hilfe dankbar.




Seb

Hallo Zusammen
es gibt eine Kofiguration in OpenHab um die IP Verbindung aufrecht zu erhalten.
Das funktioniert aus meiner aktuellern Sicht gut.
Danke für eure Hilfe.
Viele Grüsse

peewit

so einfach kann es sein

jetzt benutzt du es so wie man es eigneltich immer notmalerweise macht....

vicky

Hallo Seb,
ist es eigentlich notwendig, den"TS6250 | TwinCAT Modbus TCP Server" auf der Beckhoff SPS (TwinCAT V2.11) zu installieren?
oder
Wird nur der "MB_SERVER-Baustein" auf der SPS benötigt?

Danke im Voraus
vicky

peewit

TwinCAT Modbus TCP Server"  --> das benötigst du dafür nicht


aber das schon

BECKHOFF:
Erfordert die Installation des„TwinCAT TCP/IP Connection Server“
Benötigt somit die Bibliothek „TcpIp.Lib“
(Standard.Lib; TcBase.Lib; TcSystem.Lib werden danach automatisch
eingebunden )