Modbus RTU over TCP Protokollkonverter gesucht

OP #7473807
Lesenswert?

Habe hier einen ABB Stromzähler mit RS485 Ausgang und Modbus Protokoll. Diesen Stromzähler kann ich hier über ein USB Kabel mit FTDI Chip am PC anschliessen. Der PC macht nach Enumerierung ein /dev/ttyUSB0 auf, wo eine (fremde) Visualisierung dann auf die Zählerdaten zugreifen kann.

Nun liegt zwischen Stromzähler und PC Anwendung aber leider eine öffentliche Straße wo ich keine RS485 Leitung drüberlegen kann. Stattdesen gibt es aber ein Glasfaserkabel wo ich eine stabile und schnelle TCP/IP Verbindung hätte.

Leider macht ABB die Zähler aber nicht mit Modbus TCP Ausführung weshalb ich auf die Idee gekommen bin, hier eines der wundersamen Konverterkästchen einzusetzen. Allderings muß ich auf der Gegenseite wieder von Modbus TCP auf Modbus RTU zurück um die Daten dann über das USB Kabel wieder auf /dev/ttyUSB0 zu kriegen.

Hierzu irgendwelche Produktvorschläge oder Ideen ?

#7473811
Lesenswert?

Mach's anders und verwende einen Ethernet-Deviceserver. (tcp-to-serial)

Das ist /erheblich/ günstiger und unproblematischer als eine Modbus-Konvertierung, nur siehst Du dann auf Deinem PC statt /dev/ttyUSB0 halt ein anderes serielles Device, mit dem Deine Software reden muss.

https://eckstein-shop.de/WaveShare-Industrial-RS232-RS485-to-Ethernet-Converter-EN

https://www.waveshare.com/rs232-485-to-eth-for-eu.htm

Alternativ kannst Du die Umsetzung auf eine serielle Schnittstelle auch sein lassen, und einfach einen Socket aufmachen, und über den mit dem Umsetzer reden.

OP #7473843
Lesenswert?

Das ist leider nicht meine Software sondern es ist die Venus Oberfläche von Victron die auf einem Cerbo GX (=Raspberry Pi) läuft.

Über SSH hätte ich zwar einen Root Zugang, aber an /dev/ttyUSB0 ist ohne Quellen für die Anwendung vermutlich nichts zu drehen.

Einen WaveShare Converter hätte ich sogar rumliegen, aber eben kein Gegenstück und ich weis auch nicht wie ich das im System anpacken müsste.

#7473848
Lesenswert?

J. V. schrieb:

aber an /dev/ttyUSB0 ist ohne Quellen für die Anwendung vermutlich nichts zu drehen

Kannst Du denn auf dem Raspberry Pi wenigstens noch eigene Software laufen lassen?

Dann kannst Du auch einen USB-Device-Server verwenden, der eine Art "virtuelle Netzwerkkarte" ist.

Das geht z.B. mit https://www.virtualhere.com/

Auf Deinem Gerät installierst Du den Client, und auf einem weiteren Raspberry Pi, der dann am anderen Ende der Netzwerkverbindung hängt, den Server.

Und dann steckst Du Deinen USB-Seriell-Adapter in den anderen Raspberry Pi.

OP #7473967
Lesenswert?

Bitte etwas langsamer für Dummies. Zuerst muß ich das Teil wohl zu 50 Euro kaufen oder die Demo nehmen. Dann installieren. Vermutlich brauche ich dazu ein deb Paket ?

1
jv@JamesWebb:~$ ssh root@10.10.20.157
2
root@10.10.20.157's password: 
3
Last login: Wed Aug  9 08:33:27 2023 from 10.10.20.186
4
root@einstein:~# lsb_release -d
5
-sh: lsb_release: command not found
6
root@einstein:~# cat /etc/*release
7
cat: can't open '/etc/*release': No such file or directory
8
root@einstein:~# cat /etc/issue
9
Victron Energy v3.00 \n \l
10
root@einstein:~#
#7473974
Lesenswert?

J. V. schrieb:

Zuerst muß ich das Teil wohl zu 50 Euro kaufen oder die Demo nehmen.

Die Demo reicht, die kann ein USB-Gerät ansteuern, und mehr brauchst Du ja nicht.

Das ist das hier: "VirtualHere USB Server for Linux (ARM) <-- Raspberry Pi, pi2, pi3,pi4,BeagleBone, Odroid, Angstrom, & any ARM 32-bit based Linux"

Und als Client auf Deinem Victron-Ding installierst Du den "console mode".

https://www.virtualhere.com/usb_client_software (weit nach unten scrollen).

(Firma: Schweigstill IT) Persönliche Seite #7473994
Lesenswert?

Sehr hochwertig aufgebaute Protokollkonverter gibt es bei Wachendorff Prozesstechnik bzw. ADF. Diese haben wir schon für etliche Projekte eingesetzt:

https://www.wachendorff-prozesstechnik.de/produktgruppen/gateways-und-protokollwandler/produkte/modbus/rtu-nach-tcp/

Die EIA-485-Schnittstelle ist hierbei auch von der Stromversorgung galvanisch getrennt. Der Aufbau ist sehr robust und mit einiger Sicherheitsbeschaltung. Technisch sind die Geräte aber nicht der allerneuste Schrei, sondern etwa zehn Jahre alt. Dementsprechend ausgereift sind sie.

Leider haben sie für die Konfiguration keine Webfrontend o.ä., sondern es gibt eine sehr angestaubte PC-Software, die wahlweise per EIA-232 oder Ethernet auf den Protokollkonverter zugreifen kann.

Von Waveshare gibt es deutlich modernere ähnliche Ausführungen, aber eben nicht so hochwertig verarbeitet. Für eine einfache private Anwendung würde ich sie durchaus einsetzen. Ich habe auch einige davon herumliegen, die ich bezüglich ihrer Robustheit für den industriellen Einsatz auch noch evaluieren will.

OP #7474063
Lesenswert?

Von Wachendorf hatte ich schon mal einen RS485 Temperaturregler auf Hutschiene eingesetzt. Teuer aber gut. Trotzdem gefällt mir die Software Lösung besser weil man da auf einer Seite keine zusätzliche Hardware benötigt. Ein Waveshare Teil aus Amazon habe ich hier auch rumliegen, weis aber nicht ob es da eine passende SW auf der Gegenseite gibt.

Um den Virtualhere Ansatz mal mit eigenen Worten zu beschreiben soweit ich das vertanden habe was zu tun ist: Das Paket erlaubt es, ein beliebiges USB Gerät auf einem anderen Rechner einzustecken und tut dann gegenüber der Anwendung so als ob es lokal stecken würde. In meinem Fall ist das USB Gerät das FTDI Kabel und vom Modbus Protokoll braucht die ganze Sache gar nix zu wissen.

Weil das nicht nur auf Linux läuft und ich auch gerade keine Raspi rumliegen habe, kann ich auf der Seite des Stromzählers zum Ausprobieren auch die ganz normale Windows Version auf einem beliebigen PC installieren und schon ist der Zähler im Ethernet mit irgendeinem Protokoll das mich gar nicht zu interessieren braucht. Diese Seite wird bei Virtualhere als Server bezeichnet.

Auf der anderen Seite (Victron) muß ich jetzt den Consol-Client installieren. Eine Version mit GUI ist nicht möglich, weil der Bildschirm exklusiv von der Venus Anwendung belegt wird. Als Download benötige ich Datei vhclientarmhf weil der Raspi eine ARM Prozessor hat. Die lege ich irgendwo in ein Verzeichnis und kann sie dort ausführbar machen und von der Konsole aus aufrufen.

Um erst mal sicher zu gehen, daß die Gegenseite korrekt funktioniert, werde ich auf jeden Fall erst mal die GUI Versionen installieren und ausprobieren.

#7474401
Lesenswert?

Andreas S. schrieb:

sondern vor allem in den Übertragungspausen (3,5 Zeichen) zu finden sind.

Das ist die /mindestens/ einzuhaltende Pause zwischen zwei Telegrammen. An längeren Pausen stört sich kein Modbusgerät. Und wenn die bisherige Lösung mit USB-Seriell-Wandler funktioniert, dann hat auch die Verlagerung des USB-Hosts keine Auswirkung, die das Einhalten dieses Timings beeinträchtigen würde.

(Firma: Schweigstill IT) Persönliche Seite #7474847
Lesenswert?

Harald K. schrieb:

Andreas S. schrieb:

sondern vor allem in den Übertragungspausen (3,5 Zeichen) zu finden sind.

Das ist die /mindestens/ einzuhaltende Pause zwischen zwei Telegrammen. An längeren Pausen stört sich kein Modbusgerät.

Es stört sich aber an solchen Pausen innerhalb eines Telegrams und sieht diese ggf. als Telegrammende an.

Es gibt übrigens auch Geräte, die beim Mitlauschen auf dem Bus knapp bemessene, aber definitiv ausreichende Pausen bei der Kommunikation anderer Geräte mit dem Master nicht korrekt erkennen und dann selbst einen Fehlerstatus generieren. Das hat uns schon tagelange Fehlersuche eingebracht. Glücklicherweise gab es bei den entsprechenden Geräten (BLDC-Steuerungen von Orientalmotor) eine Möglichkeit, diese "Fehlererkennung" zu deaktivieren.

OP #7475109
Lesenswert?

Habe jetzt mal versucht, hier den Server Teil zu installieren. Vielleicht kann mir irgend ein Linuxer sagen was ich falsch gemacht habe bzw. dazu machen muss um vielleicht sogar eine Bedienoberfläche zu sehen ?

1
jv@JamesWebb:~$ curl https://raw.githubusercontent.com/virtualhere/script/main/install_server | sudo sh
2
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
3
                                 Dload  Upload   Total   Spent    Left  Speed
4
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0[s100  1112  100  1112    0     0   3407      0 --:--:-- --:--:-- --:--:--  3411
5

6
Sorry, try again.
7
[sudo] password for jv: 
8
--2023-08-11 07:27:23--  https://www.virtualhere.com/sites/default/files/usbserver/vhusbdx86_64
9
Resolving www.virtualhere.com (www.virtualhere.com)... 143.198.145.150, 2604:a880:4:1d0::63d:5000
10
Connecting to www.virtualhere.com (www.virtualhere.com)|143.198.145.150|:443... connected.
11
HTTP request sent, awaiting response... 200 OK
12
Length: 400612 (391K) [application/octet-stream]
13
Saving to: ‘vhusbdx86_64’
14

15
vhusbdx86_64                                100%[==========================================================================================>] 391,22K   545KB/s    in 0,7s    
16

17
2023-08-11 07:27:24 (545 KB/s) - ‘vhusbdx86_64’ saved [400612/400612]
18

19
Created symlink /etc/systemd/system/multi-user.target.wants/virtualhere.service → /etc/systemd/system/virtualhere.service.
20
jv@JamesWebb:~$ /etc/systemd/system/multi-user.target.wants/virtualhere.service
21
bash: /etc/systemd/system/multi-user.target.wants/virtualhere.service: Permission denied
22
jv@JamesWebb:~$ sudo chmod +x /etc/systemd/system/multi-user.target.wants/virtualhere.service
23
jv@JamesWebb:~$ /etc/systemd/system/multi-user.target.wants/virtualhere.service
24
/etc/systemd/system/multi-user.target.wants/virtualhere.service: line 1: [Unit]: command not found
25
/etc/systemd/system/multi-user.target.wants/virtualhere.service: line 2: Server: command not found
26
/etc/systemd/system/multi-user.target.wants/virtualhere.service: line 5: [Service]: command not found
27
/etc/systemd/system/multi-user.target.wants/virtualhere.service: line 7: -b: command not found
28
/etc/systemd/system/multi-user.target.wants/virtualhere.service: line 9: [Install]: command not found
29
jv@JamesWebb:~$ 
30
jv@JamesWebb:~$ cat /etc/systemd/system/multi-user.target.wants/virtualhere.service
31
[Unit]
32
Description=VirtualHere Server
33
After=network.target
34

35
[Service]
36
Type=forking
37
ExecStart=/usr/local/sbin/vhusbdx86_64 -b -c /usr/local/etc/virtualhere/config.ini
38

39
[Install]
40
WantedBy=multi-user.target
41
jv@JamesWebb:~$ locate vhusbdx86_64
42
/home/jv/Downloads/vhusbdx86_64
43
/usr/local/sbin/vhusbdx86_64
Beitrag #7475131 wurde von einem Moderator gelöscht.
OP #7475134
Lesenswert?

Der Server scheint trotz aller Fehlermeldungen auf Linux zu laufen. Jedenfalls sehe ich auf einem Windows Client dessen USB Geräte. Man kann es auch einfach über die Bedienoberfläche zur Benutzung freigeben. Die Enumeration läuft dann so ab, also ob das Kabel am einen Rechner ausgesteckt und am anderen Rechner wieder eingesteckt wird und das Gerät funktioniert einfach entfernt.

Um es wieder am pyhsikalisch gesteckten Gerät zurück zu kriegen, muß man nach dem Stoppen aber das Kabel einmal abziehen und wieder einstecken.

Wie das mit dem Console Client auf Victrons Venus gehen soll muß ich noch rausfinden.

Angehängte Dateien:
OP #7475888
Lesenswert?

Die Sache mit dem Console Client scheint momentan an einem fehlenden Kernel Modul meiner Linux Version zu scheitern:

1
root@einstein:~# ./vhclientarmhf
2
modprobe: FATAL: Module vhci-hcd not found in directory /lib/modules/5.10.109-venus-10
3
Error 2 modprobing vhci, No such file or directory
4
root@einstein:/lib/modules/5.10.109-venus-10/kernel# modprobe vhci.hcd
5
modprobe: FATAL: Module vhci.hcd not found in directory /lib/modules/5.10.109-venus-10
6
root@einstein:/lib/modules/5.10.109-venus-10/kernel#

Habe leider keine Ahnung was das ist und wie man das herkriegt

1
root@einstein:/lib/modules/5.10.109-venus-10# ls
2
kernel                   modules.builtin.bin      modules.devname          modules.symbols.bin
3
modules.alias            modules.builtin.modinfo  modules.order            rtl8192eu
4
modules.alias.bin        modules.dep              modules.softdep          rtl8723bu
5
modules.builtin          modules.dep.bin          modules.symbols          rtl8723du
6
root@einstein:/lib/modules/5.10.109-venus-10# cd kernel
7
root@einstein:/lib/modules/5.10.109-venus-10/kernel# ls
8
crypto   drivers  fs       lib      net
9
root@einstein:/lib/modules/5.10.109-venus-10/kernel#

Die Quellen für die Linux Version sind hier.

https://github.com/victronenergy/venus

Ich befürchte daß ich dazu einen eigenen Kernel compilieren muß ?

#7475918
Lesenswert?

J. V. schrieb:

Ich befürchte daß ich dazu einen eigenen Kernel compilieren muß ?

Nicht unbedingt den kompletten Kernel, angeblich kann man irgendwie auch einzelne Module kompilieren. "grep USBIP /boot/config*" liefert die aktuelle Konfiguration, bei einem Standard-Debian-Kernel sieht das so aus:

1
CONFIG_USBIP_CORE=m
2
CONFIG_USBIP_VHCI_HCD=m
3
CONFIG_USBIP_VHCI_HC_PORTS=15
4
CONFIG_USBIP_VHCI_NR_HCS=8
5
CONFIG_USBIP_HOST=m
6
CONFIG_USBIP_VUDC=m
7
# CONFIG_USBIP_DEBUG is not set

Aber vielleicht geht es mit Hardware doch einfacher:

J. V. schrieb:

Ein Waveshare Teil aus Amazon habe ich hier auch rumliegen, weis aber nicht ob es da eine passende SW auf der Gegenseite gibt.

Hier hat jemand eine ähnliche Verbindung mit socat (aka netcat, nc, netcat-openbsd, netcat-traditional) aufgebaut. Theoretisch musst du nur sein '/dev/ttyS0' durch '/dev/ttyUSB0' ersetzen.

https://gist.github.com/Soph/cc34c539d62771b1f1cb0de3e6288f63

OP #7476469
Lesenswert?

Aber vielleicht geht es mit Hardware doch einfacher:

J. V. schrieb:

Ein Waveshare Teil aus Amazon habe ich hier auch rumliegen, weis aber nicht ob es da eine passende SW auf der Gegenseite gibt.

Gibt es nicht, aber eine passende HW auf der Gegenseite. Das hat mich jetzt vor dem compilieren des Kernels gerettet.

Ich hatte die Teile mal zum Ausprobieren von MQTT bei Eckstein-Komponente bestellt. Der Shop klingt zwar deutsch, ist aber aus Shenzen und wird von Kung Xiang betrieben. Die Methoden zur Eindeutschung haben sich in China bereits großflächig rumgesprochen. Es ist jetzt nicht nur bei Klavieren und Schliessanlagen in Mode gekommen einen ausserordentlich deutsch klingenden Namen draufzuschreiben. (Schliessanlagen Laudmann, Klaviere Zimmermann, Linden usw. ) Entgegen aller Befürchtungen war sogar eine ordentliche Rechnung mit ausgewiesener Mwst dabei und der Preis von 29 Euro ist mehr als fair.

Das Zeugs blieb während Corona aber in den Containern stecken und konnte nicht geliefert werden. Als es dann doch gekommen ist, wurde es in der untersten Schublade eingelagert. Es handelt sich um die Hutschienenversion im Plastikgehäuse. Davon gibt es auch eine Version ohne POE. Zwischenzeitlich habe ich das Teil auch unter dem Label „Luckfox“ gesehen. Ob es dabei einen Unterschied gibt weis ich nicht.

https://eckstein-shop.de/WaveShare-Industrial-Serial-Server-with-POE

Das PDF Manuel ist auf der Waveshare Webseite gut versteckt. Ebenso die zur Inbetriebnahme benötige Konfigurationssoftware vircom_en.exe. Die gibt es leider nur für Windows aber man muß froh sein daß es sie auch auf Englisch gibt. Es gibt zudem ein serielles Terminal sscom.exe zum Debuggen.

Tatsächlich hat das Teil auch einen Webserver mit Oberfläche zum Einstellen. Die IP Adresse wird aber in der Auslieferungseinstellung nicht über DHCP bezogen und ist im PDF Manual falsch beschrieben. Bei mir stand sie auf 192.168.1.201 und der Default nach Reset ist 192.168.1.200. Bei der Installation von chinesischer Software die dann unter Windows auch noch einen Firewall Port aufmachen möchte ist mir grundsätzlich nicht wirklich wohl.

Hat man die IP Adresse aber mal erfolgreich erraten, geht der Zugriff auch über http, aber nicht https. Die chinesische Oberfläche vom Webserver kann man auf Englisch umschalten. Das Ändern des Device-Name ist mir nicht gelungen. DHCP hat aber sofort funktioniert und im Router erscheint als „Active Host Name“ die MAC Adresse.

Es gibt einen „Virtual Serial Port Mode“ wozu man allerdings (Windows) Treiber installieren muß. Somit hat sich diese Betriebsart bei Linux auch erledigt. Das exe der vircom Einstellumgebung kann man ohne Installation direkt starten.

Außer der eigenen IP muß man mindestens eine „Destination IP“ einrichten. Das ist das die Gegenstelle am Ethernet, wobei serielle Daten hier offensichtlich auch an mehrere Gegenstellen verteilt werden können. Zu einer transparenten Kopplung braucht man jedenfalls nichts anderes tun, als die IP Adressen kreuzweise einzutragen und auszuwählen ob man die Übertragung per TCP oder UDP haben möchte. Bei einer erfolgreichen Ethernet Paarung ändern sich die Link LEDs beider Partner von grün auf blau. Das Teil hat außerdem eine Bootzeit von gefühlten 0 Sekunden.

Ein weiteres Schmankerl ist die native Unterstützung des Modbus Protokolls was ich aber trotz Modbus nicht ausgewählt habe. In diesem Fall tut die Ethernet Seite so, als ob sie ein Modbus TCP Client wäre. Man kann dann als Anwendung einen Modbus TCP Server laufen lassen und direkt auf die serielle Hardware zugreifen. Leider kann das mein Venus nicht, zumal ABB ja auch nur Zähler mit Modbus RTU und nicht Modbus TCP baut.

Die Hardware zeigt auch überraschend ordentliche Merkmale. Im Innern werkelt ein STM32. Die galvanische Trennung ist mit gefrästem Schlitz als Luftstrecke realisiert. Als Überspannungsschutz zur RS485 sieht man sogar eine Gasentladungsstrecke. Das PoE Board hat ebenfalls einen DC/DC Wandler und ist senkrecht draufgesteckt. Die fast gleiche Version mit gleichzeitig betreibbarem zusätzlichem RS232 gibts auch noch als Blechgehäuse im Industrial Stil zum doppelten Preis. Bislang stabiler Betrieb und rundum zu empfehlen.

Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren