Hallo Leute, Habe folgende Situation: Eine Kleinsteuerung welche über eine Modbus RTU Schnittstelle wird aktuell über einen USB/Modbus RTU Adapter über ein Windows Programm programmiert. Nun soll der Adapter an einem Raspberry PI dran und das COM Port irgendwie über das Internet "getunnelt" werden, um einen Remotezugriff zu haben. Probleme daran: Das Windows Programm kann nur Com Ports öffnen. Also fällt ein Modbus RTU auf Modbus TCP/IP Converter flach. Hat da jemand eine Idee?
Zwar kann man auch serielle Schnittstellen über tcp umleiten (z.B. mit dem frei verfügbaren com2tcp, Bestandteil von com0com), aber das Timing dürfte, wenn man das übers Internet abwickelt, so stark verändert werden, daß die Software damit nicht glücklich wird. Ausprobieren aber kannst Du es natürlich, zunächst mal im lokalen Netzwerk. http://com0com.sourceforge.net/ (Hier wird unten Reklame von Eltima eingeblendet, ignorieren!) http://com0com.sourceforge.net/com2tcp/ReadMe.txt Für Deinen Raspberry Pi musst Du dann halt ein Programm schreiben, das das verwendete Protokoll auf dessen serielle Schnittstelle umsetzt. Ein alternativer und erfolgversprechenderer Lösungsansatz wäre die Verwendung von Modbus/IP, und das Entwickeln eines lokal auf dem Windows-Rechner laufenden Programmes, das Modbus RTU auf Modbus TCP umsetzt. Die RTU-Seite verhält sich wie ein Modbus-Device und kann über eine serielle Schnittstelle angesprochen werden. Dieses Programm kannst Du auf einem PC mit zwei seriellen Schnittstellen parallel zum bestehenden Modbus-Server laufen lassen, die beiden Schnittstellen verbindest Du mit einem Nullmodemkabel. Oder Du verwendest com0com, und kannst damit auf die physischen seriellen Schnittstellen verzichten, der vorhandene Modbus-Server und der RTU-zu-IP-Umsetzer sind dann mit einem virtuellen Nullmodemkabel verbunden. Da alles timingkritische auf dem PC selbst geschieht, dürfte der Ansatz besser funktionieren, und vor allem ließe er sich auch mit beliebigen anderen, real existierenden Modbus-IP-Geräten zusammen verwenden. So etwas kann man natürlich auch als fertiges Gerät kaufen: https://www.anybus.com/de/produkte/gateway-index/anybus-xgateway/detail/anybus-x-gateway-ethernet-ip-scanner---modbus-rtu-slave aber wo bleibt da die Entwicklerfreude?
Karlo K. schrieb: > Das Problem ist die Raspberry PI Seite Wieso? Der wird dann halt ein Modbus-IP-Device und Modbus-RTU-Master. Das ist nur Software, besonders kompliziert ist das nicht. Oder Du lässt den Pi weg und verwendest ein Fertiggerät, das das erledigt.
Zwischenteitlich habe ich erkannt, dass das Programm noch ein anderes Protokoll ausser Modbus RTU fährt. Also muss ich das komplette Serialport "mappen". Es sind 9600kbaud. Also so schnell wäre es nicht. Weis nicht, ob ich in irgend ein Timeout gerate. Jemand eine Idee, wie ich das komplette Com Port "mappe"?
Karlo K. schrieb: > Also muss ich das komplette Serialport "mappen". > Es sind 9600kbaud. Also so schnell wäre es nicht. Du meinst vermutlich ein Tausendstel der Baudrate. 9.6 kBauf oder 9600 Baud. Das kannst Du mit den von mir genannten Mitteln erledigen, mit com0com und com2tcp kannst Du das "Mappen" hinbekommen, und Dein Raspberry Pi muss nur das Gegenstück davon wiederum auf seine serielle Schnittstelle abbilden. https://www.raspberrypi.org/forums/viewtopic.php?t=54794
Nimm doch einen stinknormalen serial port server, der RS485 kann, das sollte dann zu Modbus RTU passen - ist am Ende ja auch nur RS485; das mit den 1.5/3.5-Zeichentimeouts klappt zwar nur eingeschränkt über so ein Teil, aber das gilt für einen seriellen Port im PC unter Windows auch und stört normalerweise nicht (wenn nur ein Modbus-Master da ist). Die serial port/device server haben normalerweise einen Treiber dabei, der serielle Schnittstellen am PC emuliert. Ob die zusätzlichen Latenzen stören, musst du wohl ausprobieren. Wenn es über Internet geht, ggf. noch ein VPN dazwischenpacken, damit nicht jeder den port server hacken kann.
Nimm einen RPI, socat sowie socat for windows auf dem PC und dann kannst du die Timeouts testen ob alles so funktioniert. Für die Tests solltest du tc verwenden um speziell das Delay eines Internet-Tunnels zu testen, https://linux.die.net/man/8/tc .
OK. Probier gerade was aus. Vielleicht kann mir da wer helfen. Habe auf der RPI Seite ser2net installiert,konfiguriert und gestartet: sudo apt-get install ser2net sudo nano /etc/ser2net.conf 7000:telnet:0:/dev/ttyUSB0:9600 8DATABITS NONE 1STOPBIT remctl ser2net Weil ich nur per SSH Zugriff auf den RPI habe, habe ich mittels Putty einen SSH Tunnel auf 127.0.0.1:7000 erstellt. Sollte da nicht schon per "telnet 127.0.0.1 7000" auf der Windows Seite was kommen? Kann ich dann per Socat für Windows mich mit ser2net verbinden, oder "verstehen" die sich nicht?
Moin, auf dem RPi ist nicht wirklich ein 100% zuverlässiges Modbus-Timing hinzukriegen, weil dessen UART keinen sauberen RS485-Mode kann. Aber für Basteln @home kein grosses Problem. Für Industrial ist eh vom RPi abzuraten. Modbus RTU auf TCP zu mappen geht recht elegant mit netpp, da kannst du auch die Register als 'Properties' abbilden. Rohe UART-Protokolle gehen per Buffer-Protokoll. Lohnt den Aufwand aber nur, wenn du viele Geräte anbindest, sonst ist ein Standard-TCP-to-UART-Wandler (oder Terminal-Server) die weniger arbeitsintensive Variante.
Zustand: Es ist ein USB/Modbus RTU Wandler am RPI drann. Wird als /dev/ttyUSB0 gefunden. Auf den RPI kann ich nur per SSH drauf. Wird der USB/Modbus RTU Wandler am Windwos PC angesteckt, wird er als COM Port enummeriert. Ziel: Es soll unter Windows ein virtuelles COM Port geben, das sich 1:1 (abgesehen von der Latenz) wie der USB/Modbus RTU Wandler am RPI verhält. Wie würde das mit socat aussehen (RPI Seite und Windows Seite) ?
:
Bearbeitet durch User
Weiß da jemand über socat Bescheid? Würde mich auch interessieren. Btw: Für Modbus würde "musd" funktionieren. Das ist ein Modbus Gateway für den RPI.
Karlo K. schrieb: > Sollte da nicht schon per "telnet 127.0.0.1 7000" auf der Windows Seite > was kommen? Nicht mit der IP-Adresse. Das ist localhost, d.h. wenn Du das auf dem Windows-Rechner aufrufst, versuchst Du mit dem Windows-Rechner zu reden. Und solange auf dem nichts läuft, was auf Port 7000 lauscht, gibt's keine Reaktion.
https://www.acmesystems.it/socat /dev/ttyS2 => com3 on Win für Win version von socat ttyS0 ist Com1 usw ...
Schon ein richtiges Beispiel. Google kenn ich auch. Also wirklich mit virtuellen Port am Win Rechner.
Sooo. Vielleicht kann mir da jetzt jemand helfen: ser2net auf dem Raspberry PI installiert und gestartet. Die Konfig ist wie folgt: sudo nano /etc/ser2net.conf 7000:raw:0:/dev/ttyUSB0:9600,8DATABITS,NONE,1STOPBIT Es wird also ttyUSB0 mit Port 7000 verbunden. Auf der Windowsseite: Über Putty das Port 7000 gemappt (Siehe Screenshots) Danach Com2Com eingerichtet (Siehe Screenshots) Nun mit "C:\hub4com\com2tcp-rfc2217 \\.\CNCB0 127.0.0.1 7000" als Administrator verbunden. Da kommt dann immer der angehangene Fehler. Habe das ganze Log auch mal angehangenn. Stehe da jetzt auf der Leitung. Was habe ich falsch gemacht???? @Admin: com2net_2.jpg bitte löschen. Falsches Bild.
:
Bearbeitet durch User
So nächste Erfahrung: habe mir am RPI eine Bash angelegt: #!/bin/bash while [ true ] ; do sudo ser2net sudo socat /dev/ttyUSB0,b9600,raw,echo=0 TCP:127.0.0.1:7000 done Ich muss beide starten (????), dann kann ich mich mit dem Programm über Serial/IP über eine "Rohe Verbindung" erfolgreich verbinden. Nun möchte ich das über com2tcp realisieren. Also per: C:\hub4com\com2tcp \\.\CNCB0 127.0.0.1 7000 Leider klappt das noch nicht sooo gut. (Im Anhang mal die Ausgabe)
Karlo K. schrieb: > Auf der Windowsseite: > Über Putty das Port 7000 gemappt (Siehe Screenshots) Wozu soll das gut sein? > Danach Com2Com eingerichtet (Siehe Screenshots) > > Nun mit "C:\hub4com\com2tcp-rfc2217 \\.\CNCB0 127.0.0.1 7000" als > Administrator verbunden. Statt localhost (127.0.0.1) würde ich hier die IP-Adresse Deines Raspberry Pi angeben.
So wie ich das lese, will er über einen SSH Tunnel raus. Wenn er das benötigte auf 127.0.0.1 mapt, hat er schon recht. Muss mal suchen. So was ähnliches habe ich schon mal gemacht.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.