Ich möchte von einer SPS-Steuerung Daten in meine lokale SQL-Datenbank schreiben. Dazu melde ich mich via OpenVPN am Firmennetz an, um auf die Datenbank zuzugreifen.
Dies möchte ich über ein Client/Server Skript mit Sockets realisieren (mit PyModBus z.B.).
Ich frage mich nun, wie ich das Routing konfigurieren muss für die TCP / IP-Kommunikation (Client Server / Connect Client-Traffic), um Echtzeitdaten vom Server über eine OpenVPN-Verbindung an meinen externen Client zu übertragen?
Was ist zu beachten? Besonders in Bezug auf Portweiterleitung und Hosting.
Muss die Firma dazu im Router/Firewall etwas freigeben oder reicht es, wenn ich bei meiner FritzBox eine statische IP-Adresse hinterlege und die Portweiterleitung (z.B. 443) aktiviere.
Kann mich jetzt von der Netzwerkkonfiguration nicht so ganz hineinversetzen in das ganze.
Prinzipiell habe ich über VPN Zugang zu der Datenbank, die über eine statische IP-Adresse (http-tunneling) verfügbar ist in jedem Browser; allerdings kann ich diese eben nicht pingen und lässt sich somit nicht verwenden.
Vielen Dank!
HTTPS-Tunneling über OpenVPN zum Abrufen von SPS-Daten (Speicherprogrammierbare Steuerung) mittels PyModBus
Das ist kein Python-Problem.
Grundsätzlich solltest du die Fragen der IT-Abteilung deines Arbeitgebers stellen. In der Regel bedeutet "VPN" aber, dass auf deinem Gerät ein Netzwerkgerät angelegt wird, das sich so verhält, als wäre es im Zielnetzwerk. Das ist ja der Sinn dahinter. Also muss auch kein Port weitergeleitet werden, etc. Du verhälst dich so, als wärst du im Firmennetzwerk und fertig.
Grundsätzlich solltest du die Fragen der IT-Abteilung deines Arbeitgebers stellen. In der Regel bedeutet "VPN" aber, dass auf deinem Gerät ein Netzwerkgerät angelegt wird, das sich so verhält, als wäre es im Zielnetzwerk. Das ist ja der Sinn dahinter. Also muss auch kein Port weitergeleitet werden, etc. Du verhälst dich so, als wärst du im Firmennetzwerk und fertig.
Hallo sparrow,
ja, das weiß ich ja!
Aber wie ich bereits geschrieben habe, ist das System im Webbrowser über eine statische IP erreichbar.
Diese ist allerdings nicht pingbar und ich weiß dementsprechend nicht, wie ich dann über ein Skript oder ähnliches
direkt darauf zugreifen kann!
ja, das weiß ich ja!
Aber wie ich bereits geschrieben habe, ist das System im Webbrowser über eine statische IP erreichbar.
Diese ist allerdings nicht pingbar und ich weiß dementsprechend nicht, wie ich dann über ein Skript oder ähnliches
direkt darauf zugreifen kann!
Was hat denn das eine mit dem anderen zu tun? Wenn du da mit HTTP per Browser drauf zugreifen kannst, kannst du auch per Python per HTTP drauf zugreifen. Was das BRINGT steht auf einem anderen Blatt, Datenbanken sind ja nicht per HTTP erreichbar unter normalen Umstaenden.
Ping nutzt einfach nur ICMP, ob das die Firewall durchlaesst hat erstmal nichts mit der Funktionalitaet von Sockets zu tun.
Ping nutzt einfach nur ICMP, ob das die Firewall durchlaesst hat erstmal nichts mit der Funktionalitaet von Sockets zu tun.
Ich weiß nicht, ob ich die Rolle von Client und Server richtig verstanden habe. Dein Rechner ist der Client und fragt den Server im VPN ab?
Wenn Du eingeloggt bist, spielt Deine lokale statische IP-Adresse keine Rolle mehr, sondern Du bekommst immer eine neue IP-Addresse im Firmennetz.
Wenn Du eingeloggt bist, spielt Deine lokale statische IP-Adresse keine Rolle mehr, sondern Du bekommst immer eine neue IP-Addresse im Firmennetz.
Ja, aber das ist doch das Problem!Sirius3 hat geschrieben: ↑Sonntag 2. Februar 2020, 13:46 Ich weiß nicht, ob ich die Rolle von Client und Server richtig verstanden habe. Dein Rechner ist der Client und fragt den Server im VPN ab?
Exakt!
Dann greife ich über den Webbrowser auf die externe SPS-Datenbank zu!
Ich will dies aber auf meine lokale SQL-Datenbank umleiten, da ich die Daten in Echtzeit abrufen möchte!
Wenn Du eingeloggt bist, spielt Deine lokale statische IP-Adresse keine Rolle mehr, sondern Du bekommst immer eine neue IP-Addresse im Firmennetz.
Wie soll dann das Hosting stattfinden bzw. wie kann ich dann ein Skript schreiben, dass mir den Request/Response liefert?
Ich brauche dazu doch eine fixe IP sowie Port? Oder sehe ich das etwa falsch?
Wie macht ihr das so bzw. hattet ihr schon mal einen ähnlichen Fall dsbzgl.?,-)
Doch! Ich habe ja schon eine SQL-Datenbank eingerichtet, die sich dann mit dem Enterprise System synchronisiert.__deets__ hat geschrieben: ↑Sonntag 2. Februar 2020, 13:41 Was hat denn das eine mit dem anderen zu tun? Wenn du da mit HTTP per Browser drauf zugreifen kannst, kannst du auch per Python per HTTP drauf zugreifen. Was das BRINGT steht auf einem anderen Blatt, Datenbanken sind ja nicht per HTTP erreichbar unter normalen Umstaenden.
Ping nutzt einfach nur ICMP, ob das die Firewall durchlaesst hat erstmal nichts mit der Funktionalitaet von Sockets zu tun.
Allerdings kann ich dabei nichts in die Datenbank zurückschreiben.
Dies müsste ich aber bzgl. einer Aufgabe machen (Testfallerzeugung etc....).
Es gibt ja PyModBus - das Protokoll sollte genau das Richtige hierfür sein!
Allerdings benötige ich eben hierzu einen Host/Port.
Oder gibt es andere Möglichkeiten?
Es gibt einen Enterprise SQL Server, der die Daten einer Schneider SPS bereitstellt und ich habe mir auch eine SQL-Datenbank eingerichtet, über die sich die Schematas synchronisieren lassen.
Dazu wird eine eigene Software bereitgestellt und darüberhinaus ist das System eben über ein Webinterface durch Authentifizierung via VPN-Tunnel erreichbar.
Ich möchte aber, dass die Realdaten in meine Datenbank geschrieben werden und ich diese auch modifizieren kann, da ich diverse Tests,Berichte, etc... erstellen möchte, was das Standardsystem eben nicht zulässt!
Deshalb der Umweg über ggf. das Modbus Protokoll.
Dazu wird eine eigene Software bereitgestellt und darüberhinaus ist das System eben über ein Webinterface durch Authentifizierung via VPN-Tunnel erreichbar.
Ich möchte aber, dass die Realdaten in meine Datenbank geschrieben werden und ich diese auch modifizieren kann, da ich diverse Tests,Berichte, etc... erstellen möchte, was das Standardsystem eben nicht zulässt!
Deshalb der Umweg über ggf. das Modbus Protokoll.
Das mag ja alles sein, nur hilft uns das 0 weiter. Wir koennen dir nicht verraten, ob du an die SPS per Modbus rankommst. Denn wenn die schon an einem System angebunden ist, dann ist die aller Wahrscheinlichkeit nicht mehrfach-client-faehig. Und selbst *wenn* sie mehrere Clients beherrschen wuerde, kennt hier doch keiner die Zugangsdaten zu der SPS, und ob die ueberhaupt erreichbar ist aus deinem VPN (ich persoenlich faende das fatal, wenn du von Zuhause mal eben der SPS irgendwelche Instruktionen ueberhelfen kannst). Und auch dein "Enterprise SQL Server" und was auch immer da drumrum gestrickt ist mit "eigene Software" kennt hier keiner.
Darum war der erste Kommentar schon der richtige: besprich das mit deinen Projektverantwortlichen, ob und was da ueberhaupt geht.
Darum war der erste Kommentar schon der richtige: besprich das mit deinen Projektverantwortlichen, ob und was da ueberhaupt geht.
- __blackjack__
- User
- Beiträge: 13006
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Oder die Realdaten vom dem vorhandenen Server lesen und was Du zusätzlich noch so brauchst in einer anderen, lokalen Datenbank speichern.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Wie bereits schon geschrieben, tue ich das ja bereits.
Das funktioniert ja auch!
Aber diese Software unterstützt eben nicht das modifizieren der Daten; nur das reine auslesen!
Ich kann sie nicht bearbeiten und zurückschreiben auf das System, weil das die Software leider nicht unterstüzt.
Wäre natürlich das einfachste, klar! Geht aber nicht!:D
Wie bereits erwähnt, will/muss ich dazu Testfälle erzeugen und nicht nur Daten auslesen, sondern auch zurückschreiben!__blackjack__ hat geschrieben: ↑Sonntag 2. Februar 2020, 17:28 Oder die Realdaten vom dem vorhandenen Server lesen und was Du zusätzlich noch so brauchst in einer anderen, lokalen Datenbank speichern.
Wie auch bereits erwaehnt kennt keiner hier dein System. Du scheinst zu glauben das Setup das du da hast waere in irgendeiner Form ueblich und allgemein bekannt. Wie oft soll man noch sagen, das es das nicht ist? Keiner hier kann wissen, wie deine irgendwie per HTTP erreichbare Datenbank beschrieben werden kann. Fang mal an weit auszuholen, was das alles ist, und wie das zusammen haengt, oder rede mit wem in deiner Firma.
Deshalb war ja meine Frage, ob jmd. schon mal was vergleichbares gemacht hat.
Also unabhängig vom Gesamtsystem jetzt.
Abstrakt meine ich damit:
Nutzen eines Skripts/Sockets wie PyModBus oder ähnliches zum auslesen von Daten einer SPS-Steuerung aus unterschiedlichen Netzwerken (via VPN).
Also unabhängig vom Gesamtsystem jetzt.
Abstrakt meine ich damit:
Nutzen eines Skripts/Sockets wie PyModBus oder ähnliches zum auslesen von Daten einer SPS-Steuerung aus unterschiedlichen Netzwerken (via VPN).
- __blackjack__
- User
- Beiträge: 13006
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Baron89: Welche unterschiedlichen Netzwerke? Du hast da ein VPN, das ist ja *ein* Netzwerk. Darum macht man ja VPNs — um Geräte die in verschiedenen Netzwerken stecken in *ein* Netzwerk zu bekommen.
So allgemein wird das sicher schon mal jemand gemacht haben, was Dir konkret aber nicht weiterhelfen wird.
So allgemein wird das sicher schon mal jemand gemacht haben, was Dir konkret aber nicht weiterhelfen wird.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Für mich sieht das eher so aus, dass die SPS-Systeme(so wie es sein soll) vom eigentlichen Netz getrennt sind. In dem "Enterprise SQL Server" dürfen dann wahrscheinlich auch nur (so sollte es auch sein) ganz wenige Leute / Systeme reinschreiben...zu denen du scheinbar bis jetzt noch nicht gehörst . Bevor du jetzt da versuchst irgendwie was zu "basteln" um diese Vorkehrungen zu umgehen würde ich, wie schon ein paar mal hier erwähnt, erstmal mit der IT/Technik/... reden ob das überhaupt so gewünscht ist. Ansonsten kann das ganz schön nach hinten losgehen.
Ich kenn mich jetzt nicht wirklich mit SPS und den genauen Abläufen aus, aber ich kann mir auch vorstellen, dass nur ganz bestimmte Systeme in die DB schreiben dürfen...und auf diesen Systeme auch vorher die Daten überprüft werden. Hier wäre es dann noch ...schlechter... wenn da "jeder" reinschreiben könnte..
Der "Enterprise SQL Server" hat im internen Netz eine feste IP über die er erreichbar ist...da du mit deinem externen Rechner per VPN am Firmennetz hängst, solltest du den Server über die interne IP oder auch den FQDN erreichen können... Ob dein Client jetzt eine statische oder dynamische IP hat ist da doch total egal.
Oder soll dann von intern auf die Daten auf DEINEM "externen" Rechner zugegriffen werden? DANN..wären wir wieder bei dem Hinweis weiter oben...Rede mit IT/Technik , dass du eine statische IP bekommst ...
Gruß
Paddie
Ich kenn mich jetzt nicht wirklich mit SPS und den genauen Abläufen aus, aber ich kann mir auch vorstellen, dass nur ganz bestimmte Systeme in die DB schreiben dürfen...und auf diesen Systeme auch vorher die Daten überprüft werden. Hier wäre es dann noch ...schlechter... wenn da "jeder" reinschreiben könnte..
Irgendwie ist es wohl noch zu früh...und/oder 2 Kaffee sind einfach noch zu wenig...Ja, aber das ist doch das Problem!
Wie soll dann das Hosting stattfinden bzw. wie kann ich dann ein Skript schreiben, dass mir den Request/Response liefert?
Ich brauche dazu doch eine fixe IP sowie Port? Oder sehe ich das etwa falsch?
Wie macht ihr das so bzw. hattet ihr schon mal einen ähnlichen Fall dsbzgl.?,-)
Der "Enterprise SQL Server" hat im internen Netz eine feste IP über die er erreichbar ist...da du mit deinem externen Rechner per VPN am Firmennetz hängst, solltest du den Server über die interne IP oder auch den FQDN erreichen können... Ob dein Client jetzt eine statische oder dynamische IP hat ist da doch total egal.
Oder soll dann von intern auf die Daten auf DEINEM "externen" Rechner zugegriffen werden? DANN..wären wir wieder bei dem Hinweis weiter oben...Rede mit IT/Technik , dass du eine statische IP bekommst ...
Gruß
Paddie
Hallo zusammen,
ich kenne das Problem von @Baron89. Denn ich habe genau das gleiche Problem.
Und zwar geht es tatsächlich um eine Modbus TCP Kommunikation. Der Modbus TCP Server ist in einem externen Netzwerk. Der Client PC wählt sich über VPN auf den Server PC ein.
Und nun geht es darum, dass man im Python Script ja nicht einfach die durch den VPN-Router vergebene virtuelle IP-Adresse ansprechen kann.
Würde mich schon auch interessieren ob man hier auf der Clientseite etwas programmieren kann. Klar, auf der Serverseite muss natürlich der Client bekannt sein und der Port geöffnet.
Beste Grüße
JB
ich kenne das Problem von @Baron89. Denn ich habe genau das gleiche Problem.
Und zwar geht es tatsächlich um eine Modbus TCP Kommunikation. Der Modbus TCP Server ist in einem externen Netzwerk. Der Client PC wählt sich über VPN auf den Server PC ein.
Und nun geht es darum, dass man im Python Script ja nicht einfach die durch den VPN-Router vergebene virtuelle IP-Adresse ansprechen kann.
Würde mich schon auch interessieren ob man hier auf der Clientseite etwas programmieren kann. Klar, auf der Serverseite muss natürlich der Client bekannt sein und der Port geöffnet.
Beste Grüße
JB